2012年9月16日日曜日

[SNMP] トラップの受信設定

先日SNMPを設定したが、どうせなのでtrapdも設定してみる。 trapdはTRAP(ようは障害通報)を受信する機能。 「XXXな通報が来たら◯◯◯する」みたいな設定をするらしい。

trapの受信設定

設定の修正と再読み込み

snmptrapd.conf の修正

場所は「/etc/snmp/snmptrapd.conf」。
まずは全体的な設定

「doNotRetainNotificationLogs」はyesにすると「送信失敗時に再送信しない」?
「doNotLogTraps」はnoにすると「ログを出力しない」?
「doNotFork」はnoにすると「Forkしない」

次に受信元、「authCommunity TYPES COMMUNITY [SOURCE [OID | -v VIEW ]]」みたいに書けばいいらしい、今回はlogとexecuteとnetをpublicコミュニティから受信する。
「disableAuthorization」がnoなので「認証あり」


いよいよsyslogに出力する設定。
文法はこれ
traphandle トラップOID 受信時に実行するコマンド 引数
というわけで「すべてのTrap」を「syslogに出力」するには以下
traphandle default /usr/bin/logger


すべて合わせると以下のようになるっぽい
#### When Recieve Trap
#default : write to syslog
traphandle default /usr/bin/logger

#### Settings
doNotRetainNotificationLogs yes
doNotLogTraps no
doNotFork no
pidFile /var/run/snmptrapd.pid

# authCommunity   TYPES COMMUNITY   [SOURCE [OID | -v VIEW ]]
#authCommunity     log   "community" 192.168.1.0/24
authCommunity     log,execute,net   public
disableAuthorization no

設定の再読み込み

snmptrapdの設定を再読み込み
%sudo service snmptrapd reload

Trapの送信方法

トラップを送信するコマンドには「snmptrap」を使ってみる。 こいつがめんどくさくて、SNMPv1のときとSNMPv2cのとき、SNMPv3の時で使い方が違う・・・

SNMPv1の場合

以下はv1の時。
snmptrap -v 1 共通オプション エンタープライズOID 送信元ホスト名 一般トラップ番号 固有トラップ番号 時刻 [パラメータのOID 型 値]...
例えばこんな風になる。
 snmptrap -v 1 -c public 127.0.0.1 .1.3.6.1.4.1.8072.99999 127.0.0.1 6 1 '' .1.3.6.1.4.1.8072.99999.1 s "Test Message"
意味
共通オプション-c public 127.0.0.1コミュニティはpublic、送信先は127.0.0.1
エンタープライズOID.1.3.6.1.4.1.8072.99999net-SNMPのトラップ
送信元ホスト名127.0.0.1
一般トラップ番号6net-SNMP独自の電文なので、「ベンダ固有」
固有トラップ番号1トラップの番号
時刻''現在時刻
パラメータのOID.1.3.6.1.4.1.8072.99999.1トラップ
s型、今回はString
"TestMessage"内容

SNMPv2cやSNMPv3の場合

以下はv2cの時。
snmptrap -v 2c 共通オプション 時刻 トラップOID [OID 型 値]...
例えばこんな風になる。
snmptrap -v 2c -c public localhost '' .1.3.6.1.4.1.8072.99999 .1.3.6.1.4.1.8072.99999.1 s "Test Message"
意味
共通オプション-c public 127.0.0.1コミュニティはpublic、送信先は127.0.0.1
エンタープライズOID.1.3.6.1.4.1.8072.99999net-SNMPのトラップ
送信元ホスト名127.0.0.1
時刻''現在時刻
トラップのOID.1.3.6.1.4.1.8072.99999トラップ
パラメータのOID.1.3.6.1.4.1.8072.99999.1トラップ
s型、今回はString
"TestMessage"内容

送信してみる

というわけで、ためしに送信してみる。
% logger "==== This is SNMP Traptesting...===="
% sudo snmptrap -v 2c -c public localhost '' .1.3.6.1.4.1.8072.99999 .1.3.6.1.4.1.8072.99999.1 s "Test Message"
% sudo tail /var/log/messages
(前略)
Sep 16 15:14:33 myhost yosilove: ==== This is SNMP Traptesting...====
Sep 16 15:14:52 myhost snmptrapd[30522]: 2012-09-16 15:14:52 localhost [UDP: [127.0.0.1]:39309->[127.0.0.1]]:#012DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (597278044) 69 days, 3:06:20.44#011SNMPv2-MIB::snmpTrapOID.0 = OID: NET-SNMP-MIB::netSnmp.99999#011NET-SNMP-MIB::netSnmp.99999.1 = STRING: "Test Message"
Sep 16 15:14:52 myhost logger: localhost
Sep 16 15:14:52 myhost logger: UDP: [127.0.0.1]:39309->[127.0.0.1]
Sep 16 15:14:52 myhost logger: DISMAN-EVENT-MIB::sysUpTimeInstance 69:3:06:20.44
Sep 16 15:14:52 myhost logger: SNMPv2-MIB::snmpTrapOID.0 NET-SNMP-MIB::netSnmp.99999
Sep 16 15:14:52 myhost logger: NET-SNMP-MIB::netSnmp.99999.1 "Test Message"
どうやらできたらしい。

0 comments:

コメントを投稿