오픈소스 인사이트
home
오픈소스 기술 동향
home

Zabbix 연동 - Zabbix 서버로 Custom 메트릭 전달

들어가며

Zabbix는 서버, 네트워크, 애플리케이션 등 IT 인프라의 성능과 상태를 실시간으로 모니터링하고 관리하는 오픈 소스 기반의 IT 모니터링 솔루션입니다.
사용자는 Zabbix를 통해 장애 상황을 신속하게 감지하고, 데이터를 수집하여 시각적으로 확인할 수 있으며, 장애 발생 시 알림을 받아 문제를 해결할 수 있습니다.
Zabbix는 널리 사용되는 주요 시스템들에 대해 다양한 표준 템플릿(Standard Template)을 기본적으로 제고합니다. 표준 템플릿이 지원되지 않는 솔루션이나 자체 개발(In-house) 시스템이라 하더라도, 사용자 정의(Custom) 메트릭을 구성하면 Zabbix를 통해 통합 모니터링이 가능합니다.
이  글에서는 자체 정의된(Custom) 메트릭 데이터를 전송해서, Zabbix에서 모니터링 하는 방법에 대해 알아 보겠습니다.
Zabbix에서 Custom 메트릭을 Zabbix에 전달하는 방법은 User parameter를 사용하는 방법과 Zabbix Sender와 Zabbix Trapper 아이템을 사용하는 방법이 있습니다.
User Parameter는 Agent에서 명령이나 스크립트를 수행한 결과를 메트릭으로 사용하는 방법입니다.

User Parameter

1. 필요한 메트릭을 조회하는 명령을 작성합니다.
예를 들어, MySQL 서버에서 실행된 총 쿼리 수를 얻으려면 다음 명령을 사용하면 됩니다. (PATH 환경변수에 mysqladmin의 경로가 포함되어 있어야 합니다.)
# mysqladmin -uroot status | cut -f4 -d":" | cut -f1 -d"S" 39934932
Plain Text
복사
2. 명령을 zabbix_agentd.conf에 추가합니다.
UserParameter=mysql.questions,mysqladmin -uroot status | cut -f4 -d":" | cut -f1 -d"S"
C
복사
mysql.questions 은 아이템 키입니다.
이 명령이 제대로 수행되는지 확인합니다.  (Agent는 zabbix 사용자 권한으로 수행될 수 있으므로 유의하시기 바랍니다.)
# zabbix_agentd -t mysql.questions mysql.questions [t| 39934562]
C
복사
3. User Parameter 설정을 Agent에 적용합니다.
# zabbix_agentd -R userparameter_reload
Bash
복사
4. 키 값이 mysql.questions 인  아이템을 추가합니다. 아이템의 타입은 Zabbix Agent 또는 Zabbix Agent (active)입니다.
아이템의 설정에 따라 명령이 수행되고 메트릭이 수집 됩니다.

Zabbix Sender와 Zabbix Trapper 아이템

Trapper 아이템 설정

Trapper 아이템은 Zabbix Sender에서 보낸 데이터를 수신합니다. 여기서 정의된 키는 Zabbix Sender에서 사용하는 키와 동일해야 합니다.
1. Data collection>Hosts 메뉴에서 아이템 생성합니다.  타입은 Zabbix trapper로 하고, 키는 사용하고자 하는 값을 정의하면 됩니다.

Zabbix Sender

Zabbix Sender는 Zabbix Server나 Proxy에 데이터를 전달하는 명령형 툴입니다.
설치(Ubuntu 기준)
$ sudo apt install zabbix-sender
C
복사
간편 사용법
zabbix_sender -z server -s host -k key -o value
C
복사
실행 예
$ zabbix_sender -z 127.0.0.1 -s "Zabbix server" -k "test_key" -o "422" Response from "127.0.0.1:10051": "processed: 1; failed: 0; total: 1; seconds spent: 0.000193" sent: 1; skipped: 0; total: 1
C
복사
수신 데이터를 확인하려면 Monitoring>Latest data 화면 에서 정의된 Trapper 아이템을 선택합니다.
Zabbix Sender 대신 Zabbix API 를 사용하여 메트릭을 전송할 수도 있습니다.  History.push를 사용합니다.

API호출을 통한 메트릭 전송

Zabbix에서는 json-rpc 형태의 API를 제공합니다.
이글에서는 Zabbix 공식 Python 라이브러인 zabbix_utils를 사용하여 이벤트를 처리합니다.
1. API를 호출하기 위해서 Admin 사용자로 로그인 하여 User>API tokens 화면에서  API 토큰을 생성합니다.
반드시 Admin사용자일 필요는 없지만 해당 이벤트에 대한 접근 권한이 있는 사용자이어야 합니다.
토큰은 다시 조회할 수 없으므로 복사해 두어야 합니다.
2. zabbix_utils 패키지를 설치합니다.
$ pip install zabbix_utils
C
복사
3. 스크립트를 작성합니다.
#!/usr/bin/env python3 import sys import re from zabbix_utils import ZabbixAPI ZABBIX_URL = "http://127.0.0.1/zabbix" ZABBIX_TOKEN = "" # 생성한 API 토큰 복사 if __name__ == "__main__": api = ZabbixAPI(url=ZABBIX_URL) api.login(token=ZABBIX_TOKEN) api.history.push(host="Zabbix server", key="test_key", value=19)
C
복사
API에 관한 자세한 정보는 매뉴얼을 참조하시면 됩니다.

마치며

이  글에서는 자체 정의된(Custom) 메트릭 데이터를 전송해서, Zabbix에서 모니터링 하는 방법에 대해 알아 보았습니다.
이것을 확장하면 자체 개발된 시스템에서 Zabbix로 메트릭을 전달하여 Zabbix가 모니터링 하도록 할 수 있습니다.

레퍼런스

김유성 프로
에스코어㈜ 소프트웨어사업부 OSS사업팀
Kubernetes , Istio 기술 지원을 하였으며, 현재는 Zabbix  기술 지원을 하고 있습니다.