snmpttのベストプラクティスを探る

snmpttが不満

zabbixでSNMP Trapを受信する際に使うsnmpttですが、以前から使い勝手がいまいちだと思っていました。
どこがいまいちかというと、Trapの内容がナマなところ。
もちろんsnmpttconvertmibを使って、trapのOIDによってメッセージを変えることもできましたが、それよりもmibファイルをロードして勝手に読みやすくなってほしい欲求がずっとありました。
あと、SNMP TrapはTrapのOIDのほかに、Trapの引数でもOIDが付いてくることが多々あり、snmpttconvertmibではそこがカバーされないところもいまいちでした。
そこで、ちょっと時間を作ってsnmptt.confのオプションを探りベストプラクティスを考えてみました。

zabbixでsnmpttの使い方をググるとよく出てくるのが以下の設定です。

EVENT general .* “General event” Normal 
FORMAT ZBXTRAP $aA $ar

上記はzabbix2.2のドキュメントで記載されている設定です。
Event行で全てのトラップを設定で受ける設定をして、その時の出力フォーマットは

ZBXTRAP 送信元IPアドレス 送信元IPアドレス

です。
僕はこれのFORMAT行の末尾に$*をつけて、SNMP Trapの引数をすべて出力するようにして使っていました。
そして、mibファイルが入手できた場合はsnmpttconvertmibを使って、confファイルを作って読み込んでいました。
これでも一応は使えているのですが、冒頭に書いたような不満がありました。

見つけたベストプラクティス!?

それで、snmpttのウェブサイトをみて、snmptt.confの変数を眺めてみたところ、おあつらえ向きの変数を見つけました。
それが、これ。
$O: OIDのシンボル名の表示
$o: OIDの表示
$+*: 全ての引数をNAME:VALUEの形式で表示

これさえあれば、わざわざsnmpttconvertmibをしなくても、ほしい情報が手に入るのではないでしょうか。
最終的にはsnmptt.confは以下のようにしました。

EVENT general .* "General event" Normal
FORMAT ZBXTRAP $aA $O($o) $+*

こうすることによってmibファイルがロードされているものは、メールにTrapのシンボル名が記載され、Trapの引数のOIDもシンボルで表示されて、その値も表示されます。

サンプルがこちら。

# snmptrap -v 2c -c public localhost '' .1.3.6.1.4.1.42.2.175.103.2.0.91 1.3.6.1.4.1.42.2.175.103.2.1.2 s ABCDE 1.3.6.1.4.1.42.2.175.103.2.1.29 s hostname

# tail /var/log/snmptt/snmptt.log
17/05/26 .1.3.6.1.4.1.42.2.175.103.2.0.91 Normal "General event" localhost - sunHwTrapHeartbeat[.1.3.6.1.4.1.42.2.175.103.2.0.91] sunHwTrapComponentName:ABCDE sunHwTrapHostname:hostname

もちろん、特定のOIDはCategoryやServerityを変えたい場合には、EVENT行でOIDを指定すればよいと思います。

この設定いかがでしょうか!?

コメントを残す

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