2014年6月6日金曜日

zabbixでSNMPトラップ監視

ZabbixでSNMPTトラップを受信する手順です。
最初からZabbixがSNMPサーバの機能を持っていると勘違いしたためかなり理解に時間がかかりました。
正確にはSNMPトラップを受信した際にシェルを実行することでzabbixに通知をする、手順となります。

まずsnmp関連のアプリケーションをインストールします。

 yum install net-snmp net-snmp-utils
 yum install vim
 chkconfig snmptrapd on

続いてSNMPトラップ連携するためのzabbix Senderをインストールします。

 yum install zabbix-sender

さらにzabbix-senderを実行するためのshをzabbixのソースファイルから抽出します。

 zabbix-2.2.3.tar.gz の zabbix-2.2.3/misc/snmptrap/snmptrap.sh

/etc/snmp/snmptrapd.conf にSNMPトラップの設定を行います。

 authCommunity  log,execute,net public ←コミュニティに関する設定コミュニティ名「public」からの受信を許可してログ、実行、ネットワーク転送を許可する
 traphandle default /home/zabbix-2.2.3/snmptrap.sh ←デフォルトで全てのホストからトラップ受信した場合に/home/zabbix-2.2.3/snmptrap.shを実行する

snmptrap.sh で以下の設定を行います。

 ZABBIX_SERVER="[zabbixサーバのIP]";
 ZANNIX_SENDER="usr/bin/zabbix_sendaer"; ←zabbix_senderの実行パス

さらにSNMPトラップを受信するためにZabbix管理コンソールでホスト作成を行います。
ホストのIPはzabbixサーバ自身でホスト名は「snmptraps」で作成します。
「snmptraps」はsnmptrap.sh内に記載のある「SNMPTRAP転送先」ホストです。

さらにテンプレート「snmptraps」を作成し、以下のアイテムを作成します。

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

SNMPトラップを受信した場合に「test」文字列以外はトリガー発行するようにします。

 名前:SNMPTrap
 条件式:{{SNMPtrapper}:snmptraps.str(test)}=0
 障害イベントを継続して生成:有効

上記テンプレートをホスト名「snmptraps」に割り当てます。

ここまでやってやっとSNMPトラップを受信できるのですが日本語のSNMPトラップを受信すると16進数になる!

16進数の文字列については一番最初にインストールしたvimのなかにxxdコマンドが含まれているため16進数を日本語に変換可能です。

ですが、xxdコマンドは16進数以外も自動で変換するため最初の/etc/snmp/snmptrapd.confで日本語のトラップを受信する対象のみxxdコマンド変換するようにする。

 traphandle [mib※] /home/zabbix-2.2.3/xxd-trap.sh

 ※3.6.1.4.1.24769などの文字列、SNMPTrap受信した際に/var/log/messageに記録されます。

/home/zabbix-2.2.3/xxd-trap.sh

 #!/bin/sh
 while read line
 do
  echo  "$line" >> /var/log/syslog/xxd.log
  xxd -r -p /var/log/syslog/xxd.log >> /var/log/syslog/xxd-format.log

で、上記のログをzabbixで監視する。


長い・・・

なんかもっと簡単にできそうな気がするんですが

とここでわざわざzabbix_trapper使わなくてもsnmptrapのログを監視すればいいことに気づく・・・

0 件のコメント:

コメントを投稿