http://snmptt.sourceforge.net/
SNMPTT (SNMP Trap Translator)
MIBファイルのTRAP-TYPE (SMIv1)かNOTIFICATION-TYPE (SMIv2)部分を利用する
SNMPTTとnagiosを連携させることが可能
動き:対象機器からTrapをsnmptrapdが受け取りtraphandleを利用してSNMPTTの snmptthandlerに渡す。snmptthandlerはTrapを/var/spool/snmpttにファイルとして保存する
SNMPTT DaemonはDefaultで5秒毎に/var/spool/snmpttを確認しファイルが存在していれば 中身を読み込む。
OIDを元にTrapFilesに記載されたファイル内で該当セクションを探し 存在していればEXEC行に記載されたnagiosのsubmit_check_resultを実行する。
その結果をnagiosが受け、定義に従い通知などの処理を行う。
2009/07/25にv1.3 beta2がリリース
システム要件
動作モードは2種類ある
traphandle default /usr/sbin/snmptt
traphandle default /usr/sbin/snmptthandler
Standaloneモードでの設定
# cd /usr/local/src; mkdir snmptt; cd snmptt # wget http://downloads.sourceforge.net/project/snmptt/snmptt/snmptt_1.3beta2/snmptt_1.3beta2.tgz?use_mirror=ncu # tar zxvf snmptt_1.3beta2.tgz # cd snmptt_1.3beta2 cp snmptt /usr/sbin cp snmptthandler /usr/sbin cp snmpttconvert* /usr/sbin chmod +x /usr/sbin/snmptt* cp snmptt.ini /etc/snmp cp snmptt.logrotate /etc/logrotate.d/snmptt ログファイル保存先作成 # mkdir /var/log/snmptt # vi /etc/snmp/snmptrapd.conf traphandle default /usr/sbin/snmptt snmptrapd -Onで起動 -OnはsnmptrapdがOIDをsnmpttに通過させるオプション
snmptrapd.confでセキュリティ設定し忘れに注意!
authCommunity log,execute,net <community strings>
snmptt.iniの修正
snmptt.confの作成
snmpttはMIBファイルからsnmptt.confファイルを作成しなければいけなく、このファイルがポイントとなる
MIBファイルから作成するツールが付属
環境 | |
対象MIBファイル | /usr/share/snmp/mibs/IF-MIB.txt |
snmptt.conf保存ディレクトリ | /etc/snmp/snmptt |
snmptt.ini | /etc/snmp/snmptt.ini |
submit_check_result | /usr/local/nagios/libexec/submit_check_result |
コンバート
# cd /etc/snmp/snmptt # snmpttconvertmib --exec='/usr/local/nagios/libexec/submit_check_result SNMPTRAPS "SNMP_TRAPS" 2'--in /usr/share/snmp/mibs/IF-MIB.txt --out IF-MIB.conf ... Done Total translations: 2 Successful translations: 2 Failed translations: 0
作成したconfファイルを開くとEVENT、FORMAT、EXEC、SDESC~EDESCが見て取れる
SDESCからEDESCまでは注釈となる
EVENT行がOID等を指定している箇所
FORMAT行に指定した文字列と変数はロギングプロセスに渡され、ログに記載される。
EXEC行の変数はFORMAT行と同様の設定が可能とのことだが、改行などは反映されなかった
同種のMIBファイルが複数ある場合は以下でやると吉
例えばHP(compaq)系のMIBファイルが複数存在している場合 for i in CPQ* > do > /usr/local/sbin/snmpttconvertmib --in=$i --out=snmptt.conf.compaq --exec='/usr/local/nagios/libexec/submit_check_result SNMPTRAPS "SNMP_TRAPS" 2' > done
EXEC /usr/local/nagios/libexec/submit_check_result "$r" "SNMP_TRAPS" <status> "TRAP Message Strings"
第一引数 | $r nagiosに渡る際、ホスト名として渡される |
第二引数 | 文字列 nagiosのservice定義名となる |
第三引数 | nagiosに渡すステータス、0:OK、1:Warnig、2:Critical、-1:Unknown |
第四引数 | 文字列 nagiosのserviceに渡る文字列、$1/$2などのTRAP引数を設定できる、TRAP引数はSDESC~EDESC内にVariablesとして記載があるので参考にする |
ダウンロード
展開
コピー
# tar zxvf snmptt_1.2.tgz # cd snmptt_1.2 # cp -p snmptt /usr/sbin # cp -p snmptthandler /usr/sbin # cp -p snmpttconvert* /usr/sbin # cp -p snmptt.ini /etc/snmp # vi /etc/snmp/snmptrapd.conf traphandle default /usr/sbin/snmptthandler ←全てのtrapをsnmpttに渡す # cp -p snmptt-init.d /etc/rc.d/init.d/snmptt # chmod +x /etc/rc.d/init.d/snmptt # mkdir /var/spool/snmptt # chkconfig --add snmptt # chkconfig --level 2345 snmptt on # service snmptt start
PerlのIniFiles.pmが見つからない場合あり。 起動に失敗する。 この時はPerlのInitFilesをインストールすればOK cpan2rpmをインストールしてあれば cpan2rpm --install Config::IniFiles Time::HiResもいるみたい その前にnet-snmp-perlもね。
snmptrapdのdaemonオプションに-Onを追加する
snmpttが利用するMIBファイルを生成する
ベンダー分も生成しておくとよい
# mkdir /etc/snmp/snmptt # cd /etc/snmp/snmptt # snmpttconvertmib --in /usr/share/snmp/mibs/IF-MIB.txt --out snmptt.conf.IF-MIB # snmpttconvertmib --in /usr/share/snmp/mibs/SNMPv2-MIB.txt --out snmptt.conf.SNMPv2-MIB
生成したファイルを編集する
EVENT行とFORMAT、SDESCからEDESCが見て取れるはず SDESCからEDESCは注釈文となる FORMAT行の後ろにEXEC行を追加する EXEC /usr/local/nagios/libexec/eventhandlers/submit_check_result "$r" "SNMP Traps" 1 "Interface $1 on $r is Up" $rはホスト名かIPアドレスに変換される submit_check_resultの引数は4つでnagiosで定義されているhost name、Service Description Statusと任意の文字列となる。 Statusは 0:OK 1:Warrning 2:Critical 3:Unknown となる。 任意の文字列部分はFORMATやSDESCを読み取り適宜修正する $1や$2などの変数が利用可能
snmptt.iniに生成したファイルを設定する
# vi /etc/snmp/snmptt.ini daemon_uid = root [TrapFiles] snmptt_conf_files = <<END /etc/snmp/snmptt/snmptt.conf.IF-MIB /etc/snmp/snmptt/snmptt.conf.SNMPv2-MIB ENC
以下書き直す予定
nagiosのsubmit_check_resultを含むeventhandlerをコピー
<code>
# cp -pR /usr/local/src/nagios-3.0.2/contrib/eventhandlers /usr/local/nagios/libexec
</code>
nagiosでSNMP Trapsのサービスを定義する
snmpttのdebugを見るには
snmptt.iniでdaemon_fork=0を指定してから
/usr/sbin/snmptt –daemon debug=2
として実行させる
Defaultでは5秒毎にspoolディレクトリを確認する様子が見て取れる
snmptrapを受信するとsnmptrapdがtraphandleを利用してspoolディレクトリに
受信したtrapファイルを生成する
このファイルを元にsnmpttがnagiosのeventとして通知する
nagiosは通知されたeventを元に定義されたActionを起こす
この通常方法だと、各ホストのサービス定義にSNMP Traps分を追加する必要があることと、ホスト名にはFQDN名を正確に設定する必要がある
submit_check_resultの引数は4つ
$1 | ホスト名。ホスト名の短い名前でサービスが定義されている必要がある |
---|---|
$2 | サービス定義名。この名称でサービス名が定義されている必要がある |
$3 | 戻り値。0はOK、1はWARNING、2はCRITICAL、3はUNKNOWNとなる |
$4 | 出力。テキスト文字列として出力される |
host_name | ホスト名 |
service_description | submit_check_resultスクリプトに設定した文字列 |
is_volatile | 1 |
check_command | check_host-alive |
max_check_attempts | 1 |
normal_check_interval | 1 |
retry_check_interval | 1 |
active_checks_enabled | 0 passive checkしか利用しない |
passive_checks_enabled | 1 |
check_period | 24×7 |
notification_interval | 31536000 nagiosが許容する最大値(1年)を設定 |
notification_options | w,u,c warningとunknownとcriticalのみ通知し、recoveryは不要 |
notifications_enabled | 1 |
contact_groups | admins |
service_descriptionの文字列はsnmptt.confのEXEC行
EXEC /usr/local/nagios/libexec/eventhandlers/submit_check_result $r TRAP 1 "xxxxxx"で指定した第二引数と同一の必要がある
nagios 2.0から導入された概念
freshness serviceはtrap通知のステータスを自動的にOKに変更してくれる
service定義において以下の設定をすると有効になる
freshness_check | 1 |
freshness_threshold | 1 リセットするまでの分数 |
normal_check_interval | 1 |
check_period | 24×7 |