誰でも ZABBIX

Zabbixの使い方、役に立つ情報、等々

2. 監視アイテムの追加 - SNMPトラップ

Zabbixアプライアンスは、最初からSNMPトラップが受信可能な状態になっています。

まずは、比較的シンプルな設定でSNMPトラップを監視データとして取り込み、監視対象からどのようなトラップデータが飛んでくるのかよく観察してから、監視設定の詳細を検討することをおススメします。

SNMPトラップ監視の概要

監視機器から送信されたSNMPトラップデータは、snmptrapdが受信します。このデータは、そのままsnmptrapfmthndlrに渡され、Zabbixが取り込むことが可能な形式に変換されファイルに格納されます。Zabbixのプロセスのひとつであるsnmp trapperプロセスが定期的にこのファイルを読み込み、SNMPトラップデータを読み込みます。

f:id:Unam:20180206141520p:plain

前半のSNMPトラップの受信、データの編集のところは、Zabbixと関係のないツールで実施される前提になっています。Zabbixアプライアンスでは、整形用のツールにsnmptrapfmthndlrが使われていますが、マニュアルでは、snmpttやperlのモジュール編集する方法が説明されています。

Zabbixは所定のファイルに書き込まれたデータを定期的にチェックし、そこに適合するデータがあれば取り込むだけです。要は、ログチェックと考え方はまるで同じです。

SNMPトラップ受信の準備

Zabbixアプライアンスは、何もしなくてもSNMPトラップに対応できるようにセットアップされているのですが、残念ながらZabbixサーバのコンフィグの一部(SNMPトラップデータの受け渡しファイル名の定義)にポカミス(?)があり、そこを修正する必要があります。

f:id:Unam:20180206144707p:plain

zabbix_server.confの修正し、Zabbixサーバをリスタート

$ sudo vi /etc/zabbix/zabbix_server.conf
:
#SNMPTrapperFile=/var/log/snmptrap/snmptrap.log
:

$ sudo service zabbix-server restart

監視アイテムの設定

SNMPインターフェースに、SNMPトラップ送信元のIPアドレスを指定します。

f:id:Unam:20180206145517p:plain

監視アイテムの設定は以下のとおりです。 snmptrapキーの引数欄は、対象となるSNMPトラップを正規表現で指定するのですが、ひとまず最初は全部取り込みたいので、 .* を指定します。

f:id:Unam:20180206145154p:plain

これで、SNMPトラップの受信が可能です。

実際の受信例

実際にSNMPトラップデータを発行し、監視データをして表示される過程を順番に確認します。

監視対象として指定した機器から、SNMPトラップを発行します。実際にSNMPトラップが発行可能な機器をお持ちの場合は、それがよいですし、ない場合(普通、家にはないですね)別のホストからSNMPトラップを発行します。WindowsLinuxそれぞれ、SNMPトラップを発行させる方法はいくつかありますが、今回は別のZabbixアプライアンスサーバから、net-snmpのコマンドでSNMPトラップを発行します。

coldトラップは、MIB-2で定義されている基本的なトラップのひとつで、システムのリスタート時に発行されるトラップです。
Generic(COLD)Trapの発行(送信元)

$ sudo snmptrap -v 2c -c public 192.168.0.9 "" .1.3.6.1.6.3.1.1.5.1


snmptrapdが受信したデータは、そのままsyslogファイルに記録されます。
SNMPトラップの確認(syslog)

$ less -X /var/log/syslog | grep snmptrapd
Feb  6 14:42:40 zabbix snmptrapd[1234]: 2018-02-06 14:42:40 UDP: [192.168.0.60]:33933->[192.168.0.9]:162 [UDP: [192.168.0.60]:33933->[192.168.0.9]:162]:#012DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (120597443) 13 days, 22:59:34.43#011SNMPv2-MIB::snmpTrapOID.0 = OID: SNMPv2-MIB::coldStart


ちょっとわかりづらいですね。 これが、snmptrapfmthndlrに渡され、整形された結果が以下のデータです。

$ tail -f /var/log/zabbix/snmptrapfmt.log
20180205.205408 ZBXTRAP 192.168.0.60 SNMPv2-MIB::coldStart 0 (null)


syslogメッセージより、だいぶわかりやすくなりました。
このメッセージの中で重要なのは、ZBXTRAP 192.168.0.60の部分です。Zabbix(snmp trapper)は、ZBXTRAP の部分でZabbixが処理すべきかデータかどうかを識別し、その後のIPアドレスで、どの監視ホストに向けて発行されたものかを判別しています。

監視データは以下のようになります。
f:id:Unam:20180206153821p:plain

今回は、一番単純なケースだけ紹介させていただきました。複数のSNMPトラップデータを別々の監視アイテムとして振り分けたり、トリガーを発行したいりする例は、別の機会で紹介したいと思います。

余談

SNMPトラップの監視は、Zabbixの監視設定の中でもわかりづらい仕様のひとつだと思います。

わかりづらさの原因は、以下のような問題のせいかなと個人的には思っています。

  • SNMPトラップの仕様自体がわかりづらい
  • SNMPトラップをテストする方法がよくわからない
  • snmpttなど、外部ツールの設定がわかりづらい

SNMPトラップの問題は、Zabbixでは解決しようがないのですが、正直、SNMPトラップ自体のわかりづらさがいろいろネックになっていると思っています。その辺は、別の場で、改めて説明したいと思います。

また、SNMPトラップの設定で必ずでてくるsnmpttですが、これも非常に便利なツールなんですけども、設定・運用が結構面倒で、仕様もわかりづらく、SNMPトラップの監視が難しく感じてしまう要因になっているのではないかと思っています。

Zabbixも依存アイテムという仕組みができたり、監視アイテムの前処理といった仕組みが発達してきたので、snmpttやsnmpfmthndlrの記述は最低限にしておき、Zabbix側で必要な設定を定義する方向がよいのではないかなと個人的には考えています。