SNMPTT
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が受け、定義に従い通知などの処理を行う。
v1.3(beta2)
2009/07/25にv1.3 beta2がリリース
システム要件
- 必須
- Perl 5.6以上
- Net-SNMP
- Text::ParseWords
- Getopt::Long
- Posix
- Config::IniFiles
- Time::HiRes
- Sys::Hostname
- File::Basename
- Text::Balanced
- オプショナル
- Socket
- Sys::Syslog
- DBI
- DBD::mysql
- DBD::PgPP or DBD:Pg
- DBD::ODBC
- Win32::ODBC
- Net-SNMP Perl 5.1.1以上
- threads
- Thread
動作モードは2種類ある
- Standalone Mode
- snmptrapd.confへの設定
traphandle default /usr/sbin/snmptt
- 動き
- snmptrapdからTRAP情報を読み取り
- snmptt.iniから.confファイルを読み取ってTRAP定義を確認
- 適合するTRAPを検索
- ログに記録してEXEC行を実行
- 完了
- Daemon Mode
- snmptrapd.confへの設定
traphandle default /usr/sbin/snmptthandler
- snmptthandlerの動き
- snmptrapdからTRAP情報を読み取り
- /var/spool/snmpttのspoolディレクトリに新しくファイルを作成してTRAP情報を記録
- 完了
- snmptt daemonの動き
- snmptt.iniから.confファイルを読み取ってTRAP定義を確認(起動時のみ)
- spoolディレクトリからTRAP情報を読み取り
- 適合するTRAPを検索
- ログに記録してEXEC行を実行
- (デフォルトでは)5秒待つ
- 2項に戻り実施
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の修正
- 詳細設定はiniファイル内にコメントが記載されているので参照する
- 最終行のsnmptt_conf_filesにsnmpttのconfファイルを指定する
snmptt.confの作成
- ここが一番のポイント
- ファイル名は何でもよい
- snmp.iniに追加しなければ有効にならない
- MIBファイルからsnmpttconvertmibを利用してsnmptt用に生成する
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として記載があるので参考にする |
v1.2
ダウンロード
展開
コピー
# 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を起こす
nagiosとの連携
- nagiosのsubmit_check_resultを利用
- passive service checkを利用
- snmpttからのtrapを受信するserviceを1つ定義する
- このserviceのステータスは手動で確認しないとOKにならない
- nagiosのfreshness checkを有効にして自動的にステータスを更新するのがよい
- このserviceを利用するhostを定義する
- このhostのホスト名はsubmit_check_resultで指定した第一引数と同一の必要がある。第一引数は$rとなっているため、TRAPを送信してきたホスト名となる。このホスト名を用いて定義されたserviceを定義しておかなければならない
この通常方法だと、各ホストのサービス定義にSNMP Traps分を追加する必要があることと、ホスト名にはFQDN名を正確に設定する必要がある
submit_check_resultの引数は4つ
$1 | ホスト名。ホスト名の短い名前でサービスが定義されている必要がある |
---|---|
$2 | サービス定義名。この名称でサービス名が定義されている必要がある |
$3 | 戻り値。0はOK、1はWARNING、2はCRITICAL、3はUNKNOWNとなる |
$4 | 出力。テキスト文字列として出力される |
serviceエントリ
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"で指定した第二引数と同一の必要がある
freshness check
nagios 2.0から導入された概念
freshness serviceはtrap通知のステータスを自動的にOKに変更してくれる
service定義において以下の設定をすると有効になる
freshness_check | 1 |
freshness_threshold | 1 リセットするまでの分数 |
normal_check_interval | 1 |
check_period | 24×7 |