Zabbix로 process 모니터링하기

이석환·2023년 12월 17일
0

zabbix

목록 보기
4/4
post-thumbnail

Zabbix로 Instance를 모니터링하고 있었는데, 각 Instance에서 사용중인 Process의 CPU, Memory 사용량을 Monitoring해야하는 상황이 생겼다.

기존에 Zabbix에서도 Process를 모니터링하는 방법이 있다.
하지만, 인자로 어떤 프로세스를 관찰하고 싶은 지 지정해서 Item을 생성할 때 지정해줘야 했다.
내가 필요한 건 Instance의 모든 process를 Monitoring하는 것이기 때문에 맞지 않다고 생각해서 모든 Process를 Monitoring 하는 방법을 찾았다.

정확하지 않은 내용이 있다면, 댓글로 알려주시면 감사하겠습니다.

Script 작성

우선 Zabbix 에이전트를 사용하여 실행 중인 모든 프로세스의 CPU 및 메모리 사용량을 모니터링하려면 사용자 지정 스크립트를 작성하고 이를 Zabbix 에이전트에서 호출하는 방법이 필요하다.

1. Directory 만들기

cd /etc/zabbix
sudo mkdir scripts

위에 명령어를 쳐서 스크립트를 작성할 장소를 준비를 하자

2. Process Monitor Script 작성하기

cd scripts
sudo vi process_monitor.sh

위에 명령어를 쳐서 스크립트 파일을 만든다.

ps aux | awk '{print $1 "," $2 "," $3 "," $4 "," $11}' | tail -n +2

이 명령은 현재 실행 중인 프로세스에 대한 정보를 표시하고, 그 중에서도 특정한 필드를 선택하여 출력한다.

각 부분에 대한 설명은 다음과 같다.

  • ps aux
    현재 실행 중인 모든 프로세스에 대한 상세한 정보를 표시한다.
    ps는 프로세스 정보를 보여주는 명령이며, aux는 모든 사용자의 프로세스를 보여주고 자세한 정보를 제공한다.

  • awk '{print $1 "," $2 "," $3 "," $4 "," $11}'
    awk는 주어진 텍스트를 처리하고 원하는 형식으로 출력할 수 있다.
    이 부분에서는 ps aux 명령의 출력을 받아와서 필요한 필드만을 선택하여 쉼표로 구분된 형식으로 출력한다.
    각각의 $1, $2, $3, $4, $11은 각각 프로세스의 사용자 이름, 프로세스 ID (PID), CPU 사용량, 메모리 사용량, 실행 파일의 이름을 나타낸다.

  • tail -n +2
    tail 명령은 파일의 끝에서부터 몇 줄을 출력하는데 사용된다.
    여기서는 tail -n +2를 사용하여 첫 번째 줄을 제외한 나머지 모든 줄을 출력한다.
    이는 보통 헤더를 제외하기 위한 것으로, 첫 번째 줄에는 각 열의 이름이 표시되기 때문이다.

즉, 해당 스크립트는 실행중인 모든 프로세스의 사용자, PID, CPU 사용량, Memory 사용량, 프로세스 이름을 출력한다.

3. 스크립트 실행 권한 부여

sudo chmod +x /etc/zabbix/scripts/process_monitor.sh

해당 명령어를 치면, 스크립트 파일에 실행 권한을 부여할 수 있다.
이는 Zabbix 에이전트가 사용자 정의 스크립트를 호출하기 위해서이다. 에이전트는 지정된 사용자 정의 스크립트를 실행하고 그 결과를 Zabbix 서버로 전송하여 모니터링 데이터를 수집한다. 스크립트 실행 권한을 주지 않으면 에이전트가 해당 스크립트를 실행할 수 없게 되어 모니터링 데이터를 얻을 수 없다.

Zabbix 에이전트 설정 파일 수정

Zabbix에서 사용자 정의 스크립트를 호출하기 위해서는 설정 파일을 수정해야 한다.

cd /etc/zabbix
sudo vi zabbix_agentd.conf

사용자가 설정한 데이터를 모니터링하기 위해 사용자가 정의한 파라미터를 넣어줘야 한다.

UserParameter가 적힌 곳을 가서 주석을 풀어주고 다음과 같이 작성하자.

UserParameter=process.monitoring[*],/etc/zabbix/scripts/process_monitor.sh

해당 명령어를 쳐서 zabbix-agent를 다시 실행시키자

sudo systemctl restart zabbix-agent

Zabbix Item 생성

우선 Zabbix Web에 들어가자.

여기서는 두 가지 방법이 있다.

관찰하고 싶은 Instance에서만 Item 생성하기

좌측 메뉴 탭에 Configuration - Hosts에서 Items를 누른다.

그 후, 우측 상단에 Create Item을 누른다.

필요에 따라 적절하게 작성하면 된다.
이전에 글을 보고 Zabbix Monitoring을 구성하고 있다면 필자와 똑같이 작성하면 된다.

트리거 설정과 알림 및 대시보드 설정은 필요한 대로 설정하면 되지만, 필자는 text로 데이터를 수집하기 때문에 딱히 설정을 하지 않았다.

여기서 Type of Information을 Text로 설정한 이유는 다음과 같다.
나중에 데이터 값을 보면 알겠지만, 모든 Process를 관찰하기 위해서 설정한 값이기 때문에 미리 파싱을 해서 받으면 관찰하는 아이템이 너무 많다.
따라서 필자는 텍스트로 Zabbix에서 데이터를 수집하고, 자바에서 Zabbix API를 사용해서 텍스트 모두 가져온 뒤에 Process Name/CPU/Memory를 파싱하는 방법을 선택했다.

위와 같이 나오는 걸 알 수 있다.

Templates에 Item 등록하기

사실 위에 방법은 인스턴스에 프로세스를 관찰하고 싶은 곳에만 따로 설정할 수 있다는 장점이 있지만, 상당히 귀찮다.

본인이 사용하고 있는 템플릿을 찾아가자

위와 동일하게 아이템을 추가하면 해당 템플릿에 아이템이 추가 된다.


모든 Monitoring에 Value가 추가된 것을 볼 수 있다.

위에 사진을 보면 알겠지만, 해당 방법도 단점이 있다. 프로세스를 관찰하고 싶지 않은 곳도 프로세스를 관찰하는 Item이 생겨버린다.
사실 여기서 Template 자체를 생성해서 Item으로 process_monitoring을 하나만 추가하는 방법이 있는데, 어차피 나는 모든 프로세스를 관찰해야 하기 때문에 여기서 따로 기술하지는 않았다.

결과

해당 Item의 Value를 찾으러 가면 1분 간격으로 가지고 오는 것을 다음과 같이 볼 수 있다.

여기서 각 값들이 의미하는 뜻을 하나의 값만 들고 와서 설명하겠다.

zabbix,6114,0.0,0.1,/usr/sbin/zabbix_agentd

다음과 같은 순서를 따진다.

zabbix : 해당 프로세스를 시작한 사용자
6114 : PID
0.0 : CPU 사용량
0.1 : Memory 사용량
/usr/sbin/zabbix_agentd : 프로세스

profile
반갑습니다.

2개의 댓글

comment-user-thumbnail
2024년 1월 12일

석환님 자빅스 이후로 코딩을 하시지 않는건가요?
얼른 쾌차하시길 바랍니다^^

1개의 답글

관련 채용 정보