最終更新: engineernochiebukuro 2009年04月26日(日) 02:06:56履歴
NET-SNMP の snmptrapd を利用した TRAP の受信方法を記載する。
使用した NET-SNMP のバージョンは、ver.5.4.1-3 である。
ここでは、ある監視対象から TRAP を受信したとき、管理者へメール送信を行い、syslog にログを出力する。
「public」というコミュニティ名で送信された SNMP v1, v2c の SNMP TRAP を受諾するという意味である。
また、TRAP を受信したときの挙動としては、コマンドの実行(execute)を許可している。execute の他には、ログ出力(log)とTRAPの転送(net)がある。
コマンドを実行するには、次のように traphandle ディレクティブを使う。
ここで trap.pl は、TRAP を受信したときに管理者へのメール送信、syslog への出力(logger や Sys::Syslog モジュールを利用)を行う。
authCommunity に log を指定することでも syslog の出力を行うことができるが、試してみた限りでは syslog のプライオリティを変更することができなかった。また、syslog に出力するメッセージを自分の好みのものに変えるためにも、プログラムから sysylog を出力したほうが良いだろう。
また、traphandle で指定したプログラムは、以下のようなフォーマット(1行につき1エントリである)で TRAP を標準入力から受け取ることになるので、プログラムで自由に文字列を加工すると良い。
HOSTNAME
trap を送ってきた該当ホストの名前。ホスト名は gethostbyaddr() で決定されたものである。
IPADDRESS
trap を送ってきたホストの IP アドレス。
VARBINDS
トラップとその変数の記述を含む variable bindings のリスト。空白までの行の最初のトークンは OID で、行の残りの部分はその値である。 1 番目の OID は system.sysUpTime.0、 2 番目の OID は ...snmpTrap.snmpTrapOID.0 にすべきである。 OID の残りは trap に含まれる variable bindings である (ただし最後の OID はこの限りでないかもしれない)。 SNMPv1 trap では、一番最後の OID は ...snmpTrap.snmpTrapEnterprise とその値である。基本的に SNMPv1 trap は、 SNMPv1 と SNMPv2 の共存のためのドキュメントに書かれている方法で、 SNMPv2 trap の PDU タイプに変換されている。
※参考サイト
http://www.itmedia.co.jp/enterprise/articles/0705/...
使用した NET-SNMP のバージョンは、ver.5.4.1-3 である。
ここでは、ある監視対象から TRAP を受信したとき、管理者へメール送信を行い、syslog にログを出力する。
NET-SNMP の設定 (/usr/local/share/snmp/snmptrapd.conf)
$ cat snmptrapd.conf authCommunity execute public traphandle default /usr/local/bin/trap.plここで、
authCommunity execute publicという行は
「public」というコミュニティ名で送信された SNMP v1, v2c の SNMP TRAP を受諾するという意味である。
また、TRAP を受信したときの挙動としては、コマンドの実行(execute)を許可している。execute の他には、ログ出力(log)とTRAPの転送(net)がある。
コマンドを実行するには、次のように traphandle ディレクティブを使う。
traphandle トラップOID プログラム名先の例では、トラップOID に「default」を指定し、全ての TRAP に対して /usr/local/bin/trap.pl というプログラムを実行する。特定の TRAP を受信したときのみプログラムを実行させる場合は、「default」ではなくトラップOID を指定する。
ここで trap.pl は、TRAP を受信したときに管理者へのメール送信、syslog への出力(logger や Sys::Syslog モジュールを利用)を行う。
authCommunity に log を指定することでも syslog の出力を行うことができるが、試してみた限りでは syslog のプライオリティを変更することができなかった。また、syslog に出力するメッセージを自分の好みのものに変えるためにも、プログラムから sysylog を出力したほうが良いだろう。
また、traphandle で指定したプログラムは、以下のようなフォーマット(1行につき1エントリである)で TRAP を標準入力から受け取ることになるので、プログラムで自由に文字列を加工すると良い。
HOSTNAME
trap を送ってきた該当ホストの名前。ホスト名は gethostbyaddr() で決定されたものである。
IPADDRESS
trap を送ってきたホストの IP アドレス。
VARBINDS
トラップとその変数の記述を含む variable bindings のリスト。空白までの行の最初のトークンは OID で、行の残りの部分はその値である。 1 番目の OID は system.sysUpTime.0、 2 番目の OID は ...snmpTrap.snmpTrapOID.0 にすべきである。 OID の残りは trap に含まれる variable bindings である (ただし最後の OID はこの限りでないかもしれない)。 SNMPv1 trap では、一番最後の OID は ...snmpTrap.snmpTrapEnterprise とその値である。基本的に SNMPv1 trap は、 SNMPv1 と SNMPv2 の共存のためのドキュメントに書かれている方法で、 SNMPv2 trap の PDU タイプに変換されている。
# /usr/local/sbin/snmptrapd -c /usr/local/share/snmp/snmptrapd.confまた、再起動時に snmptrapd が起動するように起動スクリプトを作成しておく。
※参考サイト
http://www.itmedia.co.jp/enterprise/articles/0705/...
タグ
このページへのコメント
zcMycd Thanks so much for the blog post.Really thank you! Will read on...