Zabbix 2.2 のSNMPトラップ受信でいろいろやってみる。 その1(Zabbix_Sender&シェルスクリプト)


Zabbix 2.2 では、SNMPトラップを受信出来るようなので、やってみた。

ZabbixでSNMPトラップを処理する場合は、いくつかあって、
・以前からの方法であるZabbix_Senderを使用する方法
・新しい方法であるアイテムタイプにSNMP trapsを使用する方法
があります。

ただ、新しい方法の資料があまりないので、
以前からの方法をベースに、いろいろと変えて試してみました。

参考

 

変更した点

・1つのサーバにSNMPTrapの結果に集めるのではなく、
SNMPTrapが発行された各サーバに登録するよう変更。
(DNSやHostsでIPアドレスからマシン名を逆引き出来ない環境だと
Trap発生ホスト名が<UNKNOWN>になってしまうことに対する対応を含む)

・複数のOIDがある場合に、うまく動かない点を修正
(とりあえず、6まで対応)

・メッセージを変更
“$hostname $address $community $enterprise $oid”

“$oid:$oid:$oid・・・・・”

ただし、前提条件として、
ホスト登録時に、「ホスト名」でDNS名ではなく、
IPアドレス(SNMPTrapが出るインターフェイスのアドレス)で指定する必要があります。
表示上のホスト名は、「表示名」に設定します。

 

それでは、設定方法です。

まずは、ZabbixをインストールしているサーバでSNMPTrapd側の設定

vi /etc/snmp/snmptrapd.conf

修正後、snmptrapdサービスの起動と自動起動設定を実施

別のマシンからSNMPTrapを発行して動作確認
(別のWindowsPCで、SNMPトラップ先の設定をして再起動)

ログを確認して、以下のように出ていればOK

次にZabbixサーバ側で、Zabbix_Senderの設定をする。

念のため、SNMP受信用のホストを登録

ホスト名:snmptraps
単体のホストとして登録[IPは127.0.0.1])

 

まず、テンプレートを作成

テンプレート:Template SNMP Traps

所属グループ:Template
利用中:snmptraps, Template ICOMP Ping

アプリケーション:SNMPTraps

アイテム:SNMPtrapper

タイプ:Zabbixトラッパー
キー:snmptraps
データ型:テキスト
アプリケーション:SNMPTraps

トリガー:SNMPTRAP: {ITEM.VALUE}

条件式:(トラップ受信35秒で自動的に正常。特定のOIDは無視)
{Template SNMP Traps:snmptraps.nodata(35)}=0&{Template SNMP Traps:snmptraps.str(VMWARE-CIMOM-MIB::vmwCimOmHeartbeat)}=0&{Template SNMP Traps:snmptraps.str(VMWARE-VMINFO-MIB::vmwVmHB)}=0

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

これで、Template ICOMP Pingが適用されているすべてのサーバで
SNMPTrap用のZabbixSender受信ができるようになります。

確認

以下のコマンドでzabbix Senderで送信してみて、
snmptrapsホストにて、トリガーが起動し、
35秒後に自動的に状態を元に戻ることを確認する。
(Zabbix サーバのIPは192.168.29.153)

zabbix Senderをまだインストールしていない場合は、
yum -y install 
zabbix-sender
でインストールする。 

 

snmptrapdで設定した、呼び出しスクリプトを作成する。

/etc/zabbix/snmptrap.sh

[root@zabbix2 zabbix]# cat /etc/zabbix/snmptrap.sh

これで、再度別のマシンからSNMPTrapを発行して動作確認
(別のWindowsPCで、SNMPトラップ先の設定をして再起動)

うまくいけば、Zabbix上で、
該当ホストにてトリガーが発生するはずです。
(現在の設定では、35秒1ブロックとして受信しているので、トリガーは1つだけで、
・トリガー障害時に最初のSNMPTrapメッセージ
・トリガー正常時に最後のSNMPTrapメッセージ
でそれぞれアクションが発生するようになっています。
トリガの設定で障害イベントを継続して生成:チェックありにすれば、すべてのメッセージでアクションが実行されますが、最後のSNMPメッセージが、障害、正常の2件になってしまいます。)

最初のメッセージ(障害発生時アクション)

最後のメッセージ(正常復帰時アクション)

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

2013/12/08 17:41:01 IF-MIB::linkUp:3
2013/12/08 17:41:00 IF-MIB::linkUp:2
2013/12/08 17:41:00 IF-MIB::linkUp:1
2013/12/08 17:41:00 SNMPv2-MIB::coldStart

アクションでメール送信等をする場合に、現状はすべてのメッセージを送信していません。
棒読みちゃんによる音声通知を行っているため、すべてのメッセージを読み上げると大変なことになるので)
このため、最低限の異常発生の通知となっています。

すべてのメッセージで、アクションを実行するためには、
トリガー設定時に「障害イベントを継続して生成:チェックあり」に変更してください。

 

 

 

あと、SNMP用のMIBの登録は以下のサイトが参考になります。
https://sites.google.com/site/osscatalog/tips/linux/centos-snmptrapd-mib-add

ベンダーが用意したMIBの保存場所を用意します。

snmptrapdの設定を変更

vi /etc/sysconfig/snmptrapd

snmptrapdサービスをを再起動します。

mibは、/usr/share/snmp/vendormibs に保存する。

たとえば、VMwareESXiのMIBの場合、https://my.vmware.com/jp/group/vmware/details?downloadGroup=SNMPMIBS550&productId=353からダウンロー
ドできる。

あとは、ダウンロードしたファイルを解凍して、中のファイルを
/usr/share/snmp/vendormibs にコピーします。

更新後に必要かどうかわからないけど、念のため
/etc/init.d/snmptrapd restart

これで、VMwareが定期的に発行するTrapである以下のメッセージは
以下のように変化します。

SNMPv2-SMI::enterprises.6876.4.90 :”07 DD 0C 07 0F 24 31 00 ”

VMWARE-CIMOM-MIB::vmwCimOmHeartbeat:2013-12-7,15:51:55.0

ただし上記メッセージは、定期的に発行させるので、
トリガ条件で除外しています。

VMWARE-CIMOM-MIB::vmwCimOmHeartbeat
VMWARE-VMINFO-MIB::vmwVmHBで始まるSNMPTrap(Lost,Detect)

 

新しい方法については、また後日確認したいと思います。

つづき

Zabbix 2.2 のSNMPトラップ受信でいろいろやってみる。 その1(Zabbix_Sender&シェルスクリプト)」への3件のフィードバック

    • コメントありがとうございます。
      Zabbixについてのスライド資料については、以前より参考にさせていただいております。

      現状、新しい方法では、まずはsnmpttを試す前に、zabbix_trap_receiver.plを使ったやつで試しているのですが、まず’/tmp/zabbix_traps.tmp’が生成されない時点でつまずいています。

      スクリプト単体で動かすと、以下のメッセージが出るので、
      Undefined subroutine &NetSNMP::TrapReceiver::register called at ./zabbix_trap_receiver.pl line 105.

      net-snmp-perlのインストールとモジュールパスの確認、
      snmptrapd.confへのdisableAuthorization yesの追加は行っているのですが
      なかなかうまくいかない状況で、足踏みしています。

      ある程度試したら、SNMPTTを試してみたいと思います。

コメントを残す

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