SNMPトラップ監視(NetSNMPの出力フォーマット設定)
度々お世話になっております。
Zabbix1.8.2においてSNMPトラップを監視しようとしています。
NetSNMPで受信したトラップのデータを以下のフォーマットで
zabbixに引き渡したいと思っています。
◇フォーマット
E_ID=="EnterpriseID" G_ID=="GenericID" S_ID=="SpecificID" VAR=="引数データ"
◇例
E_ID==.1.3.6.1.4.1.9 G_ID==6 S_ID==9999 VAR==○○○○○
調査した結果、NetSNMPは任意のフォーマットでトラップの
データをsyslogに記録できることがわかり以下の設定を
おこなうと想定通りのフォーマットでsyslogにデータが
出力されました。
◇ファイル:/etc/sysconfig/snmptrapd.options
OPTIONS="-Lsd -p /var/run/snmptrapd.pid -F \"E_ID==%N G_ID==%w S_ID==%q VAR==%v\n\""
このフォーマット形式をtraphandleで指定したスクリプトに
引き渡されるデータにおいても適用させたいのですが
うまくいきません。
もし同じような経験をされた方がいましたら解決方法を
ご教示いただけませんでしょうか。
そもそもtraphandleに渡すデータのフォーマットは
設定できないのでしょうか。。。
(最悪このsyslogをログ監視すれば良いんでしょうけど)
heya - 投稿数: 319
こんにちは。
> そもそもtraphandleに渡すデータのフォーマットは
> 設定できないのでしょうか。。。
traphandleで指定されたプログラムは、標準入力からデータを受け取ってあれこれするだけです。snmptrapdがこの標準入力に渡すデータは、
<code>ホスト名[改行]
IPアドレス[改行]
SNMPv2-MIB::sysUpTime.0(or.1.3.6.1.2.1.1.3.0) アップタイム[改行]
SNMPv2-MIB::snmpTrapOID.0(or.1.3.6.1.6.3.1.1.4.1.0) トラップのOID[改行]
OID 値[改行]
OID 値[改行]
...</code>
という感じになっています(man snmptrapdの「NOTIFICATION PROCESSING」を参照、または、googleで「snmptrapd 標準入力」と検索してもいくつか出てきます)。トラップのOIDより後ろは、追加のデータです(トラップによってあったり無かったりする)。
さて、本題ですが、zabbix_serverに渡すデータを決定しているのは、snmptrapd.confでtraphandleに指定している(であろう)snmptrap.shです。このスクリプトの最後に実行しているzabbix_senderの-oオプションの値が、zabbix_serverに渡されます。なので、このsnmptrap.shでstrを設定している部分を適当にいじれば目的は達成できるんじゃないかと思います。
snmptrapd.optionsのフォーマット内の%N、%w、%q、%vが具体的に何を指すのかがよく分からない(すみません、-Fオプションは使ったことないんです・・・)ので具体例は書けませんが、適当にあれこれやってみるといいと思います。
ttts - 投稿数: 9
ご回答いただきありがとうございます。
こちらでもtraphandleで渡されるデータの形式を確認してみました。
◆SNMPv2cトラップ形式
--------------------------------
送信元ホスト名
UDP:△[送信元IPアドレス]:値
sysUpTime△値
snmpTrapOID△値
引数(varbind)OID△値 ※可変※
引数(varbind)OID△値 ※可変※
--------------------------------
◆SNMPv1トラップ形式
--------------------------------
送信元ホスト名
UDP:△[送信元IPアドレス]:値
sysUpTime△値
snmpTrapOID△値
引数(varbind)OID△値 ※可変※
引数(varbind)OID△値 ※可変※
snmpTrapAddress△送信元IPアドレス
snmpTrapCommunity△コミュニティ名
snmpTrapEnterprise△値
--------------------------------
Zabbixが提供しているsnmptrap.shだと引数を扱ってくれないので
今回のような方法を検討していましたが、snmptrap.shを
いじくって、引数を取ってくるように修正したほうが楽な気が
してきました(snmptrapd.optionsは使えないようなので)。
色々試してみます。
どうもありがとうございました。