ZabbixでSNMPトラップ監視をdocker-composeで構築してテストしてみた
2021/3/20 更新
こちら
でKubernetes版を紹介しています。
そろそろ真面目にSNMPでネットワーク機器を監視しようと思って勉強中です。
最近だとPrometheusが流行っているみたいですが、snmp_exporterはトラップが受信できないようなので、まずはZabbixを触ってみることにしました。
今回はひとまずSNMPトラップをZabbixで受信するところまでを試します。
実行環境は以下の通り。
$ cat /etc/redhat-release
CentOS Linux release 7.7.1908 (Core)
$ docker --version
Docker version 19.03.6, build 369ce74a3c
$ docker-compose --version
docker-compose version 1.25.3, build d4d1b42b
docker-compose.ymlは以下のようにしました。
zabbix-snmptrapsを使うには/var/lib/zabbix/snmptrapsを
紐付けたボリュームをzabbix-serverと共有して、
ZBX_ENABLE_SNMP_TRAPSをtrueにする必要があります。
version: "3"
services:
zabbix_db:
image: mysql:5.7
container_name: zabbix_db
volumes:
- ./db:/var/lib/mysql
environment:
- MYSQL_DATABASE=zabbix
- MYSQL_USER=zabbix
- MYSQL_PASSWORD=zabbix
- MYSQL_ROOT_PASSWORD=P@ssword
zabbix_server:
image: zabbix/zabbix-server-mysql:alpine-4.4-latest
container_name: zabbix_server
volumes:
- ./snmptraps:/var/lib/zabbix/snmptraps
- ./mibs:/var/lib/zabbix/mibs
environment:
- DB_SERVER_HOST=zabbix_db
- MYSQL_DATABASE=zabbix
- MYSQL_USER=zabbix
- MYSQL_PASSWORD=zabbix
- ZBX_DEBUGLEVEL=3
- ZBX_ENABLE_SNMP_TRAPS=true
zabbix_web:
image: zabbix/zabbix-web-apache-mysql:alpine-4.4-latest
container_name: zabbix_web
ports:
- "8080:80"
environment:
- ZBX_SERVER_HOST=zabbix_server
- DB_SERVER_HOST=zabbix_db
- MYSQL_DATABASE=zabbix
- MYSQL_USER=zabbix
- MYSQL_PASSWORD=zabbix
- PHP_TZ=Asia/Tokyo
zabbix_snmptraps:
image: zabbix/zabbix-snmptraps:alpine-4.4-latest
container_name: zabbix_snmptraps
volumes:
- ./snmptraps:/var/lib/zabbix/snmptraps
- ./mibs:/var/lib/zabbix/mibs
ports:
- "162:162/tcp"
- "162:162/udp"
4つのコンテナがちゃんと起動したらzabbix-webにログインできるか試してみてください。
ユーザ名:admin
パスワード:zabbix
でログインできます。
続いてSNMPトラップを受信できるか試します。
Macで以下のコマンドを実行します。IPアドレスはZabbixを構築したサーバのIPに変更してください。
コマンドの内容は適当に拾ってきたものなのでよくわかりません(笑
% snmptrap -v 2c -c public 192.168.100.4 '' netSnmpExperimental netSnmpExperimental.1 s "hogehoge1" netSnmpExperimental.2 s "hogehoge2"
無事受信できればsnmptraps.logに以下の内容が書き込まれます。
$ docker exec -it zabbix_server cat snmptraps/snmptraps.log
20200216.054112 ZBXTRAP 192.168.100.2 NET-SNMP-MIB::netSnmpExperimental 0 (null) NET-SNMP-MIB::netSnmpExperimental.1 hogehoge1 NET-SNMP-MIB::netSnmpExperimental.2 hogehoge2
では、Zabbixで確認してみます。
設定⇒ホスト⇒ホストの作成でホストを追加します。
SNMPインターフェースに監視する機器のIPを指定してください。
アイテムはひとまずテンプレートのTemplate Module Generic SNMPv2でドバッと追加しました。
ホストの設定が正しければ、監視データ⇒概要で
グループをホストを追加したグループに、タイプをデータに変更すると以下のようにSNMP trapsに何か値が表示されます。
(表示されない場合、しばらく待ってからもう1度トラップを送信するコマンドを実行してみてください)
詳細は最新の値で確認できます。受信したログの内容が表示されると思います。
受信はできているようなのでこれでひとまずOKなのかな?
あとはメール通知とかできると良さそうだけど、ログのタイムスタンプがUTCになってるのはダメそう。
まだMIBとかZabbixの設定方法がいまいちよくわからないのでまだまだ勉強が必要ですねー
次回 は実際のネットワーク機器の監視を試してみたいと思います。