【zabbix2.0】snmpttによるトラップメッセージの編集 #zabbix #自宅ラック勉強会
TRANSCRIPT
Zabbix2.0ではSNMPTrapメッセージを SNMPTT(SNMP Trap Translator)を使って整形し、SNMPTrapperFileに出力されたメッセージをSNMPTrapperという専用プロセスによって収集します。
2013/3/9 4
Zabbix2.0でのSNMPTrap監視
SNMP-Trap監視
2013/3/9 5
Zabbix1.8
snmptrapd
サンプルスクリプト または
自作スクリプト
zabbix_sender
Zabbix_Trapper
Zabbix2.0
snmptrapd
handler SNMPTT
TrapperFile
snmp_trapper
snmptrap
2013/3/9 6
snmpttによるTrapの動き
SNMPTrap snmptrapd handler
snmptt (.conf)
+カテゴリ,重要度 snmptt.log snmp trapper
key:snmptrap[<重要度>"カテゴリ
名"]
1. snmptrapdがsnmpTrapを受信 2. snmptrapdがsnmpttのhandlerをキック 3. Handlerがspoolファイルを生成 4. Snmpttはiniファイルで指定されたsleep秒数毎にspoolファイルを読み込み 5. Snmpttはmib変換ファイルに従い、書式整形、カテゴリ名、重要度情報を付加し、ファイルに出
力 6. Zabbixのsnmp trapperが5.のファイルを読み込む 7. log内の“ZBXTRAP” 文字列の後ろの文字列をIPアドレスと解釈し、当該IPアドレスと一致する
SNMPインターフェイスを持つホストの タイプ:snmpトラップ キー:snmptrap[<重要度> “カテゴリ名”] に対してメッセージを登録する。
8. 重要度、カテゴリ名が一致しない場合 タイプ:snmpトラップ キー:snmptrap.fallbak に対してメッセージを登録する。
9. IPアドレスが一致しない場合、アイテムには登録せずzabbix_server.log(zabbix_proxy.log)に unmatched trap received from[IPaddress]:メッセージ というログが記録される。 ※IPアドレスが登録されていないホストからのTrapを集約登録する機能は無い。
2013/3/9 7
snmpttによるTrapの動き
nmptt動作例
2013/3/9 8
SNMPtrap(テストコマンド) snmptrap -v 1 -c public localhost .1.3.6.1.2.1.11 192.168.100.201 ''.1.3.6.1.2.1.2.2.1.1.1 i 2
/var/log/snmp/zabbix_traps.tmp (デフォルトファイルパス) 2013/03/08 00:46:36 .1.3.6.1.6.3.1.1.5.3 Normal "Status Events" 192.168.100.201 - ZBXTRAP 192.168.100.201 ポートNo.2 でlinkDownトラップを検知しました。
ホスト設定 SNMPエージェント 192.168.100.201 タイプ:snmp_trapper キー:snmptrap[Normal "Status Events“] ログの時間形式:yyyy/MM/dd hh:mm:ss
unmatched trapのロギング設定
2013/3/9 9
アイテム登録の無いIPアドレスからのSNMPTrapを受信した際に、zabbix_server.logに unmatched trap received from[IPaddress]:~~メッセージを記録するかどうかは[一般設定]-[その他のパラメータ]の設定により変わります。 [マッチしないSNMPトラップをログに記録]の チェックをはずした場合、zabbix_server.logにunmatched trap のメッセージは出力されなくなります。
SNMPTrap受信するのは、snmptrapdプロセスです。 SNMPTrapを受信したら、SNMPTTのhandlerをキックするように、snmptrapd.confを編集します。
SNMPTrapのoidに応じてメッセージに変換を行う操作はSNMPTTが行いますので、snmptrapdでは変換を行わず、oidのまま引き渡すように、snmptapdの起動スクリプトを編集します。
編集が終わったら、snmptrapdを再起動します。
2013/3/10 10
snmptrapdの設定
~~~ #vi /etc/snmp/snmptrapd.conf traphandle default /usr/local/snmptt/sbin/snmptthandler disableAuthorization yes ~~~
~~~ #vi /etc/init.d/snmptrapd 変更前 OPTIONS=“-Lsd -p /var/run/snmptrapd.pid“ 変更後 OPTIONS="-m +ALL -Lsd -On -p /var/run/snmptrapd.pid" ~~~
環境設定:
インストールディレクトリ:/usr/local/snmptt/ mib変換ファイルディレクトリ:/etc/snmp/snmptt_confs/ TrapperFileパス:/var/log/snmp/zabbix_traps.tmp logファイルパス: /var/log/snmptt/
パスは任意に変更することが可能です。
2013/3/9 11
SNMPTTのインストール
2013/03/07現在、SNMPTTの安定最新版はsnmptt_1.3となっています。
(snmptt_1.4bata2も公開されています。)
snmptt_1.3 http://sourceforge.net/projects/snmptt/files/snmptt/snmptt_1.3/snmptt_1.3.tgz/download
2013/3/9 12
SNMPTTのダウンロード
インストールディレクトリの作成 # mkdir /usr/local/snmptt # mkdir /usr/local/snmptt/sbin SNMPTTダウンロード # cd /usr/local/snmptt # wget http://sourceforge.net/projects/snmptt/files/snmptt/snmptt_1.3/snmptt_1.3.tgz/download # tar zxvf snmptt_1.3.tgz
バイナリ
snmptt :snmptt本体
snmpttconvertmib :mibファイルからsnmptt用設定ファイルを作成する コンバータ
Snmptthandler:snmptrapdからtrapメッセージを受け取り spoolファイルを生成する
設定ファイル
Snmptt.ini:snmpttの設定ファイル
2013/3/9 13
Snmpttの構成
実行ファイル配置 # cd snmptt_1.3 # cp snmptt snmptthandler snmpttconvertmib /usr/local/snmptt/sbin/ # cd /usr/local/snmptt/sbin/ # chmod 755 snmptt snmpttconvertmib snmptthandler 設定ファイルの配置 # cp /usr/local/snmptt/snmptt_1.3/snmptt.ini /etc/snmp/
/etc/snmp/snmptt.iniで変更を加えた部分についてだけ、記述します。
2013/3/10 14
Snmptt.iniファイルの編集
mode = daemon #動作モードをdaemonに変更 net_snmp_perl_enable = 1 net_snmp_perl_best_guess = 2 date_time_format = %Y/%m/%d %H:%M:%S #logの日時フォーマットです。アイテムの設定と合わせます。 (書式は異なるので注意) sleep = 1 #スリープ時間です、この秒数毎にspoolファイルを読み込みます。 デフォルトでは5秒毎です、1秒に変更します。 log_file = /var/log/snmp/zabbix_traps.tmp #Zabbix_server.confのデフォルトSNMPTrapFileパスに 合わせています。 log_system_enable = 1 unknown_trap_log_enable = 1 DEBUGGING_FILE = /var/log/snmptt/snmp.debug DEBUGGING_FILE_HANDLER = /var/log/snmptt/snmpttthandler.debug
SNMPTTのログ・spool・SNMPTrapFile生成のため、ディレクトリの作成とパーミッションの設定を行います。
2013/3/9 15
動作用ディレクトリの作成
Snmpttユーザの作成 # useradd -s /sbin/nologin snmptt Spoolディレクトリの作成 # mkdir /var/spool/snmptt # chown snmptt.snmptt /var/spool/snmptt/ 起動スクリプトの配置 # cp /usr/local/snmptt/snmptt_1.3/snmptt-init.d /etc/init.d/snmptt # chkconfig --add snmptt # chkconfig snmptt on ログファイル用ディレクトリの作成 # mkdir /var/log/snmptt # chown snmptt.snmptt /var/log/snmptt SNMPTrapFile用に/var/log/snmp/ディレクトリのパーミッション変更 #chgrp shmptt /var/log/snmp 初期ファイルの作成 # touch /var/log/snmp/zabbix_traps.tmp #chown snmptt /var/log/snmp/zabbix_traps.tmp
SNMPTrapFileはSNMPTrapを受信する度に追記されるため、 logローテションの設定を行います。
snmptt.logrotateの中身は以下の通りです。
2013/3/9 16
Logrotate設定
Logrotateファイルの配置 # cp /usr/local/snmptt/snmptt_1.3/snmptt.logrotate /etc/logrotate.d/
/var/log/snmptt/snmptt*.log /var/log/snmptt/snmptthandler.debug /var/log/snmp/zabbix_traps.tmp { weekly notifempty missingok create 0644 snmptt rotate 1 } /var/log/snmptt/snmptt.debug { weekly notifempty missingok create 0644 snmptt postrotate /etc/init.d/snmptt reload >/dev/null 2>/dev/null || true endscript }
Mibファイルからsnmptt用mib変換ファイルを生成します。 この例では、net-snmp附属のIF-MIBを変換しています。
Snmpttのmib変換ファイルはmibファイルの数だけ(Trap用の情報を持たないmibは除きます。)必要になりますので、ディレクトリを分ける事をお勧めします。
2013/3/9 17
Mibファイルのコンバート
MIBファイルの変換 # cd /usr/local/snmptt/sbin # ./snmpttconvertmib --in=/usr/share/snmp/mibs/IF-MIB.txt --out=/etc/snmp/IF-MIB.conf.org --net_snmp_perl Zabbix用の識別コード挿入 # cd /etc/snmp/ #sed -e "s/^FORMAT¥s/FORMAT ZBXTRAP ¥$aA /g" IF-MIB.conf.org > IF-MIB.conf
Mibファイルのコンバートにより以下の様なmib変換ファイルが生成されます。(上下は省略しています)
Snmpttがこのファイルをロードしている場合、Zabbixでは以下の様に表示されます。
2013/3/9 18
Mib変換ファイルの編集
~~~ EVENT linkDown .1.3.6.1.6.3.1.1.5.3 "Status Events" Normal FORMAT ZBXTRAP $aA A linkDown trap signifies that the SNMP entity, acting in $* SDESC ~~~ EVENT linkUp .1.3.6.1.6.3.1.1.5.4 "Status Events" Normal FORMAT ZBXTRAP $aA A linkUp trap signifies that the SNMP entity, acting in an $* SDESC ~~~
先ほどのファイルを以下のように編集することにより、Trapメッセージを日本語化することも可能です。
Snmpttがこのファイルをロードしている場合、Zabbixでは以下の様に表示されます。
2013/3/9 19
Mib変換ファイルの編集
~~~ EVENT linkDown .1.3.6.1.6.3.1.1.5.3 "Status Events" Normal FORMAT ZBXTRAP $aA ポートNo.$* でlinkDownトラップを検知しました。 SDESC ~~~ EVENT linkUp .1.3.6.1.6.3.1.1.5.4 "Status Events" Normal FORMAT ZBXTRAP $aA ポートNo.$* でlinkUpトラップを検知しました。 SDESC ~~~
先ほどの様に作成したmib変換ファイルはsnmptt.iniにおいて、[TrapFiles]として定義することで読み込まれます。 [TrapFiles] の定義は、snmptt.iniファイルの最下部に記載されています。
TrapFilesの設定は絶対パスで行ってください。
Mib変換ファイルの編集を行った場合やsnmptt.iniの編集を行った場合、必ずsnmpttの再起動を行ってください。 Snmpttのデーモンが再起動されるまで、設定は反映されません。
2013/3/9 20
Mib変換ファイルの読み込み設定
~~~ [TrapFiles] # A list of snmptt.conf files (this is NOT the snmptrapd.conf file). The COMPLETE path # and filename. Ex: '/etc/snmp/snmptt.conf' snmptt_conf_files = <<END /etc/snmp/snmptt.conf /etc/snmp/snmptt_confs/IF-MIB.conf.jp ~~~
Zabbix2.0ではSNMPTTのmib変換ファイルにより、トラップ毎に別々のキーワード、重要度を設定することができます。
SNMPTrapFileに記録されるキーワード・重要度が異なる場合、
Zabbix2.0では別々のアイテムとして登録することが出来るので トリガー設定では、データを受信したことだけを検知し、 詳細はアイテム値をみる事で、トリガーを簡略化することができます。
2013/3/9 21
監視設定のポイント
謝辞:今回の検証においては以下の資料を参考にさせていただきました。
ZABBIX-JP Study#5 Zabbix2.0rc1 SNMP Traps http://www.slideshare.net/HaruyoshiChiyoda/zabbixjp-study4-zabbix20rc1-snmp-traps
米麹の検証日記 SNMPTT その1 http://ricemalt.blog98.fc2.com/blog-entry-20.html
2013/3/9 22
参考資料