(2020/10/17追記)
本記事は「CentOS 7.3+MIRACLE ZBX 3.0」の手順となっており、情報が古いので注意。「CentOS 8+Zabbix 5.0」における手順は以下を参照すること。
以前、ZabbixにてSNMP Trap監視の実装手順を記載した。
・ZabbixでESXiのSNMP Trapを監視する設定
https://tech-mmmm.blogspot.jp/2016/05/zabbixesxisnmp-trap.html
この記事ではPerlスクリプト「zabbix_trap_receiver.pl」を利用してSNMP Trap監視を実現したが、SNMPTT (SNMP Trap Translator)を使う手法がZabbix推奨のようなので、今回はSNMPTTを使ったSNMP Trap監視を実装してみることにした。
なお、OSはCentOS 7.3、ZabbixはMIRACLE ZBX 3.0となる。
# cd /media/Packages/
# rpm -ivh perl-Digest-1.17-245.el7.noarch.rpm
# rpm -ivh perl-Digest-MD5-2.52-3.el7.x86_64.rpm
# rpm -ivh perl-Digest-SHA-5.85-3.el7.x86_64.rpm
# rpm -ivh perl-Digest-HMAC-1.03-5.el7.noarch.rpm
# rpm -ivh perl-Digest-SHA1-2.13-9.el7.x86_64.rpm
# rpm -ivh perl-Socket6-0.23-15.el7.x86_64.rpm
# rpm -ivh perl-List-MoreUtils-0.33-9.el7.x86_64.rpm
# rpm -ivh perl-IO-stringy-2.110-22.el7.noarch.rpm
# rpm -ivh perl-Sys-Syslog-0.33-3.el7.x86_64.rpm
snmptrapやsnmpwalkコマンドを使えるように、以下RPMを合わせてインストールしておく(SNMPTTの動作に必須ではない)。
# rpm -ivh net-snmp-utils-5.7.2-24.el7_2.1.x86_64.rpm
1つだけ不足するPerlのRPMファイルがあるため、以下からダウンロードし、/root/ZBXに配置しておく。
<ダウンロード先>
https://www.rpmfind.net/linux/rpm2html/search.php?query=perl-Crypt-DES
ftp://195.220.108.108/linux/centos/7.4.1708/os/x86_64/Packages/perl-Crypt-DES-2.05-20.el7.x86_64.rpm
※直リン
<ダウンロードファイル>
perl-Crypt-DES-2.05-20.el7.x86_64.rpm
次に、MIRACLE ZBX公式サイトからダウンロードしたRPMファイルを/root/ZBXに配置しする。
<ダウンロード先>
・Index of /zbx/3.0/7.x/x86_64/RPMS
http://ftp.miraclelinux.com/zbx/3.0/7.x/x86_64/RPMS/
<ダウンロードファイル>
perl-Config-IniFiles-2.79-1.el7.noarch.rpm
perl-Net-SNMP-6.0.1-7.el7.noarch.rpm
snmptt-1.4-0.9.beta2.el7.noarch.rpm
・ZabbixでESXiのSNMP Trapを監視する設定
https://tech-mmmm.blogspot.jp/2016/05/zabbixesxisnmp-trap.html
この記事ではPerlスクリプト「zabbix_trap_receiver.pl」を利用してSNMP Trap監視を実現したが、SNMPTT (SNMP Trap Translator)を使う手法がZabbix推奨のようなので、今回はSNMPTTを使ったSNMP Trap監視を実装してみることにした。
なお、OSはCentOS 7.3、ZabbixはMIRACLE ZBX 3.0となる。
SNMPTTのインストール
SNMPTTには前提パッケージが多数あるため、OSのインストールメディアを/mediaにマウントしたうえで、以下順序でRPMのインストールを行う。# cd /media/Packages/
# rpm -ivh perl-Digest-1.17-245.el7.noarch.rpm
# rpm -ivh perl-Digest-MD5-2.52-3.el7.x86_64.rpm
# rpm -ivh perl-Digest-SHA-5.85-3.el7.x86_64.rpm
# rpm -ivh perl-Digest-HMAC-1.03-5.el7.noarch.rpm
# rpm -ivh perl-Digest-SHA1-2.13-9.el7.x86_64.rpm
# rpm -ivh perl-Socket6-0.23-15.el7.x86_64.rpm
# rpm -ivh perl-List-MoreUtils-0.33-9.el7.x86_64.rpm
# rpm -ivh perl-IO-stringy-2.110-22.el7.noarch.rpm
# rpm -ivh perl-Sys-Syslog-0.33-3.el7.x86_64.rpm
snmptrapやsnmpwalkコマンドを使えるように、以下RPMを合わせてインストールしておく(SNMPTTの動作に必須ではない)。
# rpm -ivh net-snmp-utils-5.7.2-24.el7_2.1.x86_64.rpm
<ダウンロード先>
https://www.rpmfind.net/linux/rpm2html/search.php?query=perl-Crypt-DES
ftp://195.220.108.108/linux/centos/7.4.1708/os/x86_64/Packages/perl-Crypt-DES-2.05-20.el7.x86_64.rpm
※直リン
<ダウンロードファイル>
perl-Crypt-DES-2.05-20.el7.x86_64.rpm
次に、MIRACLE ZBX公式サイトからダウンロードしたRPMファイルを/root/ZBXに配置しする。
<ダウンロード先>
・Index of /zbx/3.0/7.x/x86_64/RPMS
http://ftp.miraclelinux.com/zbx/3.0/7.x/x86_64/RPMS/
<ダウンロードファイル>
perl-Config-IniFiles-2.79-1.el7.noarch.rpm
perl-Net-SNMP-6.0.1-7.el7.noarch.rpm
snmptt-1.4-0.9.beta2.el7.noarch.rpm
/root/ZBXの中の4つのRPMファイルをインストールする。
# cd /root/ZBX/# rpm -ivh perl-Crypt-DES-2.05-20.el7.x86_64.rpm
# rpm -ivh perl-Config-IniFiles-2.79-1.el7.noarch.rpm
# rpm -ivh perl-Net-SNMP-6.0.1-7.el7.noarch.rpm
# rpm -ivh snmptt-1.4-0.9.beta2.el7.noarch.rpm
snmptt.iniは、SNMPTTに関する様々な設定が記載されている。必要な箇所のみ変更する。
# vi /etc/snmp/snmptt.ini
# systemctl start snmptt
# rpm -ivh perl-Config-IniFiles-2.79-1.el7.noarch.rpm
# rpm -ivh perl-Net-SNMP-6.0.1-7.el7.noarch.rpm
# rpm -ivh snmptt-1.4-0.9.beta2.el7.noarch.rpm
以上でインストールは完了となる。
# cat /etc/zabbix/zabbix_server.conf | grep -v -e "^#" -e "^$"
------------------------------
LogFile=/var/log/zabbix/zabbix_server.log
LogFileSize=0
PidFile=/var/run/zabbix/zabbix_server.pid
DBName=zabbix
DBUser=zabbix
DBPassword=XXXXXX
DBPort=5432
StartVMwareCollectors=1
SNMPTrapperFile=/var/log/zabbix/zabbix_traps.tmp
StartSNMPTrapper=1
Timeout=4
AlertScriptsPath=/usr/lib/zabbix/alertscripts
ExternalScripts=/usr/lib/zabbix/externalscripts
LogSlowQueries=3000
Zabbixの設定
ZabbixはSNMPTrapperを有効にする設定を行うだけでよい。# cat /etc/zabbix/zabbix_server.conf | grep -v -e "^#" -e "^$"
------------------------------
LogFile=/var/log/zabbix/zabbix_server.log
LogFileSize=0
PidFile=/var/run/zabbix/zabbix_server.pid
DBName=zabbix
DBUser=zabbix
DBPassword=XXXXXX
DBPort=5432
StartVMwareCollectors=1
SNMPTrapperFile=/var/log/zabbix/zabbix_traps.tmp
StartSNMPTrapper=1
Timeout=4
AlertScriptsPath=/usr/lib/zabbix/alertscripts
ExternalScripts=/usr/lib/zabbix/externalscripts
LogSlowQueries=3000
------------------------------
設定反映のため、サービス再起動を行う。
# systemctl restart zabbix-server
なお、このときZabbixのログに以下エラーメッセージが出力されることがある。
# tail /var/log/zabbix/zabbix_server.log
------------------------------
20695:20171118:091342.878 cannot stat SNMP trapper file "/var/log/zabbix/zabbix_traps.tmp": [2] No such file or directory
------------------------------
これは、SNMP Trap監視用のログファイルであるzabbix_traps.tmpが存在しないことにより出力されるエラーとなる。あらかじめ以下の通り空ファイルを作っておけばエラーは発生しない。
# touch /var/log/zabbix/zabbix_traps.tmp
# chown zabbix:zabbix /var/log/zabbix/zabbix_traps.tmp
# chmod 666 /var/log/zabbix/zabbix_traps.tmp
# ls -l /var/log/zabbix/
------------------------------
-rw-rw-r-- 1 zabbix zabbix 1281 11月 11 18:57 zabbix_agentd.log
-rw-rw-r-- 1 zabbix zabbix 14823059 11月 18 09:13 zabbix_server.log
-rw-rw-r-- 1 zabbix zabbix 0 11月 18 09:13 zabbix_traps.tmp
------------------------------
1つ目はsnmptrapdの起動オプションの設定となる。-Onを付けることで、SNMP TrapのOIDがメッセージに変換されなくなる。後述するが、メッセージへの変換はSNMPTTが行う。
# cat /etc/sysconfig/snmptrapd | grep -v -e "^#" -e "^$"
------------------------------
OPTIONS="-On -Lsd -p /var/run/snmptrapd.pid -M /usr/share/snmp/mibs:/usr/share/snmp/venders -m all"
------------------------------
2つ目はSNMP Trap受信時にsnmptthandlerを実行する設定となる。
設定反映のため、サービス再起動を行う。
# systemctl restart zabbix-server
なお、このときZabbixのログに以下エラーメッセージが出力されることがある。
# tail /var/log/zabbix/zabbix_server.log
------------------------------
20695:20171118:091342.878 cannot stat SNMP trapper file "/var/log/zabbix/zabbix_traps.tmp": [2] No such file or directory
------------------------------
これは、SNMP Trap監視用のログファイルであるzabbix_traps.tmpが存在しないことにより出力されるエラーとなる。あらかじめ以下の通り空ファイルを作っておけばエラーは発生しない。
# touch /var/log/zabbix/zabbix_traps.tmp
# chown zabbix:zabbix /var/log/zabbix/zabbix_traps.tmp
# chmod 666 /var/log/zabbix/zabbix_traps.tmp
# ls -l /var/log/zabbix/
------------------------------
-rw-rw-r-- 1 zabbix zabbix 1281 11月 11 18:57 zabbix_agentd.log
-rw-rw-r-- 1 zabbix zabbix 14823059 11月 18 09:13 zabbix_server.log
-rw-rw-r-- 1 zabbix zabbix 0 11月 18 09:13 zabbix_traps.tmp
------------------------------
snmptrapdの設定
SNMP Trapを受信するsnmptrapdでは、2つのファイルの編集を行う。1つ目はsnmptrapdの起動オプションの設定となる。-Onを付けることで、SNMP TrapのOIDがメッセージに変換されなくなる。後述するが、メッセージへの変換はSNMPTTが行う。
# cat /etc/sysconfig/snmptrapd | grep -v -e "^#" -e "^$"
------------------------------
OPTIONS="-On -Lsd -p /var/run/snmptrapd.pid -M /usr/share/snmp/mibs:/usr/share/snmp/venders -m all"
------------------------------
2つ目はSNMP Trap受信時にsnmptthandlerを実行する設定となる。
# cat /etc/snmp/snmptrapd.conf | grep -v -e "^#" -e "^$"
------------------------------
authCommunity log,execute,net public
traphandle default /usr/sbin/snmptthandler
------------------------------
上記設定後、snmptrapdを起動させる。
# systemctl start snmptrapd
# systemctl enable snmptrapd
------------------------------
authCommunity log,execute,net public
traphandle default /usr/sbin/snmptthandler
------------------------------
上記設定後、snmptrapdを起動させる。
# systemctl enable snmptrapd
SNMPTTの設定
SNMPTTでは2つの設定ファイルの編集を行う。snmptt.iniは、SNMPTTに関する様々な設定が記載されている。必要な箇所のみ変更する。
# vi /etc/snmp/snmptt.ini
------------------------------
mode = daemon
date_time_format = %H:%M:%S %Y/%m/%d
syslog_enable = 0
log_file = /var/log/zabbix/zabbix_traps.tmp
------------------------------
date_time_format = %H:%M:%S %Y/%m/%d
syslog_enable = 0
log_file = /var/log/zabbix/zabbix_traps.tmp
------------------------------
snmptt.confは、デフォルトでいくつか記載がされているが、シンプルに以下2行のみに変更する。このファイルは受信したSNMP Trapの変換処理に関する設定が記載される。
# cat /etc/snmp/snmptt.conf
------------------------------
EVENT general .* "General event" Normal
FORMAT ZBXTRAP $aA $*
------------------------------
SNMPTTを起動させる。
# systemctl enable snmptt
# snmptrap -v2c -c public 127.0.0.1 "" .1.3.6.1.6.3.1.1.5.1 coldStart s "Start"
snmptrapdのログが出力されていることを確認する。
# tail /var/log/messages
------------------------------
Nov 18 16:11:15 t3024ce73 snmptrapd[28050]: 2017-11-18 16:11:15 localhost [UDP: [127.0.0.1]:43300->[127.0.0.1]:162]:#012.1.3.6.1.2.1.1.3.0 = Timeticks: (75916108) 8 days, 18:52:41.08#011.1.3.6.1.6.3.1.1.4.1.0 = OID: .1.3.6.1.6.3.1.1.5.1#011.1.3.6.1.6.3.1.1.5.1 = STRING: "Start"
------------------------------
SNMPTTのログが出力されていることを確認する。
# tail /var/log/zabbix/zabbix_traps.tmp
------------------------------
16:11:15 2017/11/18 .1.3.6.1.6.3.1.1.5.1 Normal "General event" localhost - ZBXTRAP 127.0.0.1 127.0.0.1
------------------------------
ログを見てわかる通り、これだけではSNMP Trapの内容の判別ができないため、SNMPTTにてMIBの登録を行い、OIDをメッセージに変換できるようにする。
# cat /etc/snmp/snmp.conf
------------------------------
MIBDIRS /usr/share/snmp/mibs:/usr/share/snmp/venders
MIBS all
/usr/share/snmp/vendersに必要なMIBファイルを保存し、snmpttconvertmibにて変換を行う。今回は、ESXiのMIBを例にしている。
# cd /usr/share/snmp/venders
# ls -l
------------------------------
-r--r--r-- 1 root root 50968 7月 17 2015 BRIDGE-MIB.mib
-r--r--r-- 1 root root 59268 7月 17 2015 ENTITY-MIB.mib
-r--r--r-- 1 root root 52586 7月 17 2015 HOST-RESOURCES-MIB.mib
~(中略)~
-r--r--r-- 1 root root 8777 7月 17 2015 VMWARE-VC-EVENT-MIB.mib
-r--r--r-- 1 root root 38576 7月 17 2015 VMWARE-VCOPS-EVENT-MIB.mib
-r--r--r-- 1 root root 26952 7月 17 2015 VMWARE-VMINFO-MIB.mib
------------------------------
for分を使って、各MIBファイルの変換を行う。
# mkdir snmpttconf
# for i in `ls *.mib`; do snmpttconvertmib --in=$i --out=snmpttconf/$i.conf; done
catコマンドで1ファイルに結合する。
# cd snmpttconf
# cat *.conf > snmptt.conf.VMWARE
sedコマンドでZabbix検知に必要な文言を付与する。
# sed -i 's/FORMAT/FORMAT ZBXTRAP $aA $N/g' snmptt.conf.VMWARE
作成したconfファイルを所定のディレクトリにコピーし、snmptt.iniファイルのconfファイルのリストに追加する(今後snmptt.confファイルを追加する度に追記すること)。
# cp snmptt.conf.VMWARE /etc/snmp/
# vi /etc/snmp/snmptt.ini
設定反映のため、サービス再起動を行う。
# systemctl restart snmptt
# snmptrap -v2c -c public 127.0.0.1 "" .1.3.6.1.6.3.1.1.5.1 coldStart s "Start"
先ほどと異なり、SNMP TrapのOIDだけでなくメッセージも表示されていることがわかる。
監視テスト①
この段階で一度監視テストとして、Zabbixサーバーにて以下コマンドを実行してみよう。# snmptrap -v2c -c public 127.0.0.1 "" .1.3.6.1.6.3.1.1.5.1 coldStart s "Start"
snmptrapdのログが出力されていることを確認する。
# tail /var/log/messages
------------------------------
Nov 18 16:11:15 t3024ce73 snmptrapd[28050]: 2017-11-18 16:11:15 localhost [UDP: [127.0.0.1]:43300->[127.0.0.1]:162]:#012.1.3.6.1.2.1.1.3.0 = Timeticks: (75916108) 8 days, 18:52:41.08#011.1.3.6.1.6.3.1.1.4.1.0 = OID: .1.3.6.1.6.3.1.1.5.1#011.1.3.6.1.6.3.1.1.5.1 = STRING: "Start"
------------------------------
SNMPTTのログが出力されていることを確認する。
# tail /var/log/zabbix/zabbix_traps.tmp
------------------------------
16:11:15 2017/11/18 .1.3.6.1.6.3.1.1.5.1 Normal "General event" localhost - ZBXTRAP 127.0.0.1 127.0.0.1
------------------------------
ログを見てわかる通り、これだけではSNMP Trapの内容の判別ができないため、SNMPTTにてMIBの登録を行い、OIDをメッセージに変換できるようにする。
MIB登録
MIBを保存するパスとして、snmpt.confファイルを新規作成する。# cat /etc/snmp/snmp.conf
------------------------------
MIBDIRS /usr/share/snmp/mibs:/usr/share/snmp/venders
MIBS all
------------------------------
/usr/share/snmp/vendersに必要なMIBファイルを保存し、snmpttconvertmibにて変換を行う。今回は、ESXiのMIBを例にしている。
# cd /usr/share/snmp/venders
# ls -l
------------------------------
-r--r--r-- 1 root root 50968 7月 17 2015 BRIDGE-MIB.mib
-r--r--r-- 1 root root 59268 7月 17 2015 ENTITY-MIB.mib
-r--r--r-- 1 root root 52586 7月 17 2015 HOST-RESOURCES-MIB.mib
~(中略)~
-r--r--r-- 1 root root 8777 7月 17 2015 VMWARE-VC-EVENT-MIB.mib
-r--r--r-- 1 root root 38576 7月 17 2015 VMWARE-VCOPS-EVENT-MIB.mib
-r--r--r-- 1 root root 26952 7月 17 2015 VMWARE-VMINFO-MIB.mib
------------------------------
for分を使って、各MIBファイルの変換を行う。
# mkdir snmpttconf
# for i in `ls *.mib`; do snmpttconvertmib --in=$i --out=snmpttconf/$i.conf; done
catコマンドで1ファイルに結合する。
# cd snmpttconf
# cat *.conf > snmptt.conf.VMWARE
sedコマンドでZabbix検知に必要な文言を付与する。
# sed -i 's/FORMAT/FORMAT ZBXTRAP $aA $N/g' snmptt.conf.VMWARE
作成したconfファイルを所定のディレクトリにコピーし、snmptt.iniファイルのconfファイルのリストに追加する(今後snmptt.confファイルを追加する度に追記すること)。
# cp snmptt.conf.VMWARE /etc/snmp/
# vi /etc/snmp/snmptt.ini
------------------------------
snmptt_conf_files = <<END
/etc/snmp/snmptt.conf.VMWARE ←★追加
/etc/snmp/snmptt.conf
END
------------------------------
/etc/snmp/snmptt.conf.VMWARE ←★追加
/etc/snmp/snmptt.conf
END
------------------------------
設定反映のため、サービス再起動を行う。
# systemctl restart snmptt
監視テスト②
再度、監視テストを行う。# snmptrap -v2c -c public 127.0.0.1 "" .1.3.6.1.6.3.1.1.5.1 coldStart s "Start"
先ほどと異なり、SNMP TrapのOIDだけでなくメッセージも表示されていることがわかる。
# tail /var/log/zabbix/zabbix_traps.tmp
------------------------------
20:05:28 2017/11/24 .1.3.6.1.6.3.1.1.5.1 Normal "Status Events" localhost - ZBXTRAP 127.0.0.1 coldStart A coldStart trap signifies that the SNMP entity, Start
------------------------------
・テンプレート名:Template SNMP Trap
・グループ:Templates
------------------------------
・名前:SNMP Trap log
・タイプ:SNMP トラップ
・キー:snmptrap[]
・データ型:ログ
・ヒストリ保存期間(日):90
・ログの時間の形式:hh:mm:ss yyyy/MM/dd
・アプリケーションの作成:SNMP Trap
・有効:チェック
------------------------------
・名前:SNMP Trap
・条件式:{Template SNMP Trap:snmptrap[].strlen()}>0
・障害イベントを継続して生成:チェック
・深刻度:軽度の障害
・有効:チェック
------------------------------
以上で設定は完了となる。SNMP Trapを受信すると以下の通り障害検知ができるようになる。
https://gist.github.com/higebu/01c63b0057e3a17494e6
------------------------------
20:05:28 2017/11/24 .1.3.6.1.6.3.1.1.5.1 Normal "Status Events" localhost - ZBXTRAP 127.0.0.1 coldStart A coldStart trap signifies that the SNMP entity, Start
------------------------------
Zabbixの受信設定
最後にZabbixのGUIにて、SNMP Trap受信の設定を行う。テンプレートの作成
------------------------------・テンプレート名:Template SNMP Trap
・グループ:Templates
------------------------------
アイテムの作成
------------------------------・名前:SNMP Trap log
・タイプ:SNMP トラップ
・キー:snmptrap[]
・データ型:ログ
・ヒストリ保存期間(日):90
・ログの時間の形式:hh:mm:ss yyyy/MM/dd
・アプリケーションの作成:SNMP Trap
・有効:チェック
------------------------------
トリガーの作成
------------------------------・名前:SNMP Trap
・条件式:{Template SNMP Trap:snmptrap[].strlen()}>0
・障害イベントを継続して生成:チェック
・深刻度:軽度の障害
・有効:チェック
------------------------------
以上で設定は完了となる。SNMP Trapを受信すると以下の通り障害検知ができるようになる。
参考
・Setup SNMP Trap monitoring for vCenter Server Appliance with Zabbixhttps://gist.github.com/higebu/01c63b0057e3a17494e6