Zabbix 2.2 のSNMPトラップ受信でいろいろやってみる。 その2(SNMPTrapper&perlスクリプト)


Zabbix 2.2 では、SNMPトラップを受信する方法で、
Zabbix_Sender&シェルスクリプトについては、前回成功したので、
今度は、Zabbix2.0から導入されたアイテムタイプ「SNMPトラップ」を利用した方法にチャレンジ。

アイテムタイプ「SNMPトラップ」を使った方法にも2種類あります。
・Perlスクリプトを利用した方法(SNMPTrapdの出力をそのまま出力)
・SNMPTTを利用した方法(市販NMSのようなメッセージ変換が可能)

今回は、Perlスクリプトに関する方法を試してみます。

なお、連携方法については、以下の公式ドキュメントにあります。
https://www.zabbix.com/documentation/2.2/manual/config/items/itemtypes/snmptrap

まずは、Perlスクリプト実行に必要なライブラリをインストール
(今回不要なものがあるかもしれませんが
次に実施予定のSNMPTTに必要とも思われる物も含んでいます。)

cpanは、最初初期設定が必要ですが、全部デフォルトで大丈夫なようです。

なお、gccの依存関係として、kernel-headersが要求される場合がありますが、Walbrixで用意されているCentOS6.4の場合、yumでkernel-headersをインストールできませんでした。(おそらくKernelが3.0.68になっているため)
このため、kernel-headersの3.0.68を探したのですが、正式なインストール方法がわからず、とりあえず見つけた別のOS用のものをインストールして回避しましたが、たぶん悪手だと思います。

 

インストールが完了したら、Perlライブラリが入っているかを確認します。
以下は実行例

 

さて、今回使用する肝心のPerlスクリプトですが、Zabbix2.2のソースコードに含まれています。

zabbix 2.2のソースコードをダウンロード
http://www.zabbix.com/jp/download.php

ダウンロードしたファイルを解凍して、以下のファイルをZabbix Serverにコピーします。

zabbix-2.2.0/misc/snmptrap/zabbix_trap_receiver.pl

/etc/zabbix/zabbix_trap_receiver.pl

解凍したファイルに実行権限を与えます。

 

SNMPTrapdの設定を変更する。

# vi /etc/snmp/snmptrapd.conf

設定にdisableAuthorization yesを追加する必要があるのと、
SNMPTrapd内蔵のperlで実行するために、

perl do “/etc/zabbix/zabbix_trap_receiver.pl”

と指定します。(上の行で1行です。最初書式を間違えてはまってしまいました。)

なお、 zabbix_trap_receiver.plは、シェル上で実行してもエラーになりますがこれで正常です。
SNMPTrapdからキックされたperlで実行しないといけないようです。

 

SNMPTrapdの設定を変更したら、SNMPTrapdサービスを再起動します。
必要であれば、自動起動設定もしておきます。

 

別のマシンからSNMPTrapを発行して動作確認します。
(別のWindowsPC[192.168.29.40]で、SNMPトラップ先[192.168.29.153]の設定をして再起動)
ログを確認して、以下のように出ていればOKです。
(デフォルトではPerlスクリプトの出力結果は/tmp/zabbix_traps.tmpに出力されます。)

 次にZabbixサーバ側での設定をします。

 zabbix_server.confに以下の2行を設定します。

SNMPTrapperFile=/tmp/zabbix_traps.tmp
StartSNMPTrapper=1

vi /etc/zabbix/zabbix_server.conf

 

zabbix serverを再起動します。
これで、SNMP Trapperが有効になり、
/tmp/zabbix_traps.tmpファイルを監視するようになります。

 

次に、テンプレートを作成

テンプレート:Template SNMP Trap

所属グループ:Template
利用中:Template SNMP Generic

アプリケーション:SNMPTrap

アイテム:SNMPtrap-log

タイプ:SNMPトラップ
キー:snmptrap[“”]
データ型:ログ
ログ時間の形式:hh:mm:ss yyyy/MM/dd
アプリケーション:SNMPTrap

アイテム:SNMPtrap-fallback

タイプ:SNMPトラップ
キー:snmptrap.fallback
データ型:ログ
ログ時間の形式:hh:mm:ss yyyy/MM/dd
アプリケーション:SNMPTrap

アイテムのキー:snmptrap.fallbackについては、
今回の場合アンマッチになることがないと思いますが念のため定義。

トリガー:SNMP Trap Log受信

(トラップ受信で異常/トラップ受信35秒で自動的に正常。特定のOIDは無視)
(アクション実行は35秒以内に発生した最初と最後のメッセージのみ。)
([棒読みちゃん連携のため])

条件式:
{Template SNMP Trap:snmptrap[“”].nodata(35)}=0&{Template SNMP Trap:snmptrap[“”].str(VMWARE-CIMOM-MIB::vmwCimOmHeartbeat)}=0&{Template SNMP Trap:snmptrap[“”].str(VMWARE-VMINFO-MIB::vmwVmHB)}=0

障害イベントを継続して生成:チェックなし
深刻度:情報

障害イベントを継続して生成:チェックありにすると、すべてのSNMPTrapでアクションが実行されます。

これで、Template SNMP Genericが適用されているすべてのサーバで
SNMPトラップ受信ができるようになります。

再度、別のマシンからSNMPTrapを発行して動作確認します。

受信したすべてのSNMPTrapメッセージを確認する場合は、
監視データ -> 最新データから、発生ホストを選んで、
SNMPTrapsアイテムの snmptrapper ->snmptrapsの履歴で確認できます。
(トリガー発生直後(30分以内)であれば、
監視データ -> トリガから、
名前の部分のトリガー名(SNMPTRAP: IF-MIB::linkUp:3)のヒストリ
からも確認できます。)

2013/12/11 23:19:50 2013/12/11 23:19:50 23:19:50 2013/12/11 PDU INFO: notificationtype TRAP version 0 receivedfrom UDP: [192.168.29.40]:3191->[192.168.29.153] errorstatus 0 messageid 0 community public transactionid 1950 errorindex 0 requestid 0 VARBINDS: DISMAN-EVENT-MIB::sysUpTimeInstance type=67 value=Timeticks: (2429) 0:00:24.29 SNMPv2-MIB::snmpTrapOID.0 type=6 value=OID: IF-MIB::linkUp IF-MIB::ifIndex.3 type=2 value=INTEGER: 3 SNMP-COMMUNITY-MIB::snmpTrapAddress.0 type=64 value=IpAddress: 192.168.29.40 SNMP-COMMUNITY-MIB::snmpTrapCommunity.0 type=4 value=STRING: “public” SNMPv2-MIB::snmpTrapEnterprise.0 type=6 value=OID: SNMPv2-SMI::enterprises.311.1.1.3.1.1
2013/12/11 23:19:50 2013/12/11 23:19:50 23:19:50 2013/12/11 PDU INFO: notificationtype TRAP version 0 receivedfrom UDP: [192.168.29.40]:3191->[192.168.29.153] errorstatus 0 messageid 0 community public transactionid 1949 errorindex 0 requestid 0 VARBINDS: DISMAN-EVENT-MIB::sysUpTimeInstance type=67 value=Timeticks: (2429) 0:00:24.29 SNMPv2-MIB::snmpTrapOID.0 type=6 value=OID: IF-MIB::linkUp IF-MIB::ifIndex.2 type=2 value=INTEGER: 2 SNMP-COMMUNITY-MIB::snmpTrapAddress.0 type=64 value=IpAddress: 192.168.29.40 SNMP-COMMUNITY-MIB::snmpTrapCommunity.0 type=4 value=STRING: “public” SNMPv2-MIB::snmpTrapEnterprise.0 type=6 value=OID: SNMPv2-SMI::enterprises.311.1.1.3.1.1
2013/12/11 23:19:50 2013/12/11 23:19:49 23:19:49 2013/12/11 PDU INFO: notificationtype TRAP version 0 receivedfrom UDP: [192.168.29.40]:3191->[192.168.29.153] errorstatus 0 messageid 0 community public transactionid 1948 errorindex 0 requestid 0 VARBINDS: DISMAN-EVENT-MIB::sysUpTimeInstance type=67 value=Timeticks: (2429) 0:00:24.29 SNMPv2-MIB::snmpTrapOID.0 type=6 value=OID: IF-MIB::linkUp IF-MIB::ifIndex.1 type=2 value=INTEGER: 1 SNMP-COMMUNITY-MIB::snmpTrapAddress.0 type=64 value=IpAddress: 192.168.29.40 SNMP-COMMUNITY-MIB::snmpTrapCommunity.0 type=4 value=STRING: “public” SNMPv2-MIB::snmpTrapEnterprise.0 type=6 value=OID: SNMPv2-SMI::enterprises.311.1.1.3.1.1
2013/12/11 23:19:50 2013/12/11 23:19:49 23:19:49 2013/12/11 PDU INFO: notificationtype TRAP version 0 receivedfrom UDP: [192.168.29.40]:3191->[192.168.29.153] errorstatus 0 messageid 0 community public transactionid 1947 errorindex 0 requestid 0 VARBINDS: DISMAN-EVENT-MIB::sysUpTimeInstance type=67 value=Timeticks: (0) 0:00:00.00 SNMPv2-MIB::snmpTrapOID.0 type=6 value=OID: SNMPv2-MIB::coldStart SNMP-COMMUNITY-MIB::snmpTrapAddress.0 type=64 value=IpAddress: 192.168.29.40 SNMP-COMMUNITY-MIB::snmpTrapCommunity.0 type=4 value=STRING: “public” SNMPv2-MIB::snmpTrapEnterprise.0 type=6 value=OID: SNMPv2-SMI::enterprises.311.1.1.3.1.1

 

次は、SNMPTrapper & SNMPTT での組み合わせを試してみたいと思います。

 

今回の参考URL

Zabbix2.2 公式ドキュメント(英語)
https://www.zabbix.com/documentation/2.2/manual/config/items/itemtypes/snmptrap

米麹の検証日記 SNMPTT その1
http://ricemalt.blog98.fc2.com/blog-entry-20.html

ZABBIX-JP Study#5 Zabbix2.0rc1 SNMP Traps
http://www.slideshare.net/HaruyoshiChiyoda/zabbixjp-study4-zabbix20rc1-snmp-traps

【Zabbix2.0】snmpttによるトラップメッセージの編集 #Zabbix #自宅ラック勉強会
http://www.slideshare.net/qryuu/zabbix20snm-ptt

 

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です