자빅스 에이전트로 뭔가 모니터링을 하고 싶은데 요것이 자빅스에서 미리 정의되어 있는 아이템이 아닌 경우가 있다. 그런 경우에 user parameter를 사용한다.

문법

문법은 매우 간단하다.

UserParameter=<Key>,<command>

이 내용을 zabbix_agentd.conf에 쓰면 된다.

...
Include=/etc/zabbix/zabbix_agentd.d/
...

우분투라면 보통 해당 파일에 이런 내용으로 설정 파일을 읽어들일 위치를 따로 지정하도록 되어 있으니, 위 디렉토리에 파일을 넣으면 된다.

예제

Docker 컨테이너 호스트 서버의 컨테이너 수 모니터링

도커 컨테이너 서버가 있는데, 요 서버가 컨테이너를 얼마나 사용하고 있는지를 모니터링해야 한다. 당연히 자빅스에는 이런 것이 미리 정의되어 있지 않으므로 다음과 같이 유저 파라미터를 추가할 수 있다.

UserParameter=docker.containers.created,sudo docker ps -a -q -f status=created | wc -l
UserParameter=docker.containers.running,sudo docker ps -a -q -f status=running | wc -l
UserParameter=docker.containers.restarting,sudo docker ps -a -q -f status=restarting | wc -l
UserParameter=docker.containers.paused,sudo docker ps -a -q -f status=paused | wc -l
UserParameter=docker.containers.exited,sudo docker ps -a -q -f status=exited | wc -l
UserParameter=docker.containers.dead,sudo docker ps -a -q -f status=dead | wc -l

컨테이너의 상태를 docker.container.{status}로 지정하여 해당 라인을 세는 식으로 정의하였다. 참고로 유저 파라미터는 리눅스 유저 zabbix 권한으로 실행되므로, 권한을 미리 만들어 주어야 한다. 관리자 권한을 부여하거나 그룹에 포함시키는 것은 조금 과하다 싶어서 sudoers 파일을 추가했다. 내용은 아래와 같다.

zabbix ALL=(root)NOPASSWD:/usr/bin/docker ps -a -q -f *

이제 자빅스 모니터링 아이템에 docker.container.runnng을 추가하여 모니터링을 하면 된다. 간단한 테스트 결과는 다음과 같다.

R sudo docker ps -a
CONTAINER ID        IMAGE                COMMAND             CREATED             STATUS              PORTS               NAMES
336ed1050aa7        ubuntu               "/bin/bash"         2 days ago          Up 2 days                               test


$ sudo docker ps -a -q -f status=running | wc -l
1

리눅스 서버의 소켓 현황 모니터링

UserParameter=sockstat.sockets,cat /proc/net/sockstat|grep sockets|cut -d' ' -f 3
UserParameter=sockstat.tcp.inuse,cat /proc/net/sockstat|grep TCP|cut -d' ' -f 3
UserParameter=sockstat.tcp.orphan,cat /proc/net/sockstat|grep TCP|cut -d' ' -f 5
UserParameter=sockstat.tcp.timewait,cat /proc/net/sockstat|grep TCP|cut -d' ' -f 7
UserParameter=sockstat.tcp.allocated,cat /proc/net/sockstat|grep TCP|cut -d' ' -f 9
UserParameter=sockstat.tcp.mem,cat /proc/net/sockstat|grep TCP|cut -d' ' -f 11
UserParameter=sockstat.udp.inuse,cat /proc/net/sockstat|grep UDP:|cut -d' ' -f 3
UserParameter=sockstat.udp.mem,cat /proc/net/sockstat|grep UDP:|cut -d' ' -f 5

출처: https://systembash.com/track-tcp-and-udp-connections-with-zabbix/

참고로 /proc/net/sockstat의 내용은 대략 다음과 같다.

$ cat /proc/net/sockstat
sockets: used 201
TCP: inuse 12 orphan 0 tw 82 alloc 25 mem 6
UDP: inuse 10 mem 2
UDPLITE: inuse 0
RAW: inuse 0
FRAG: inuse 0 memory 0