nagiosでSNMPトラップを使用した監視
ここではNagiosを使用したSNMP監視の設定について説明します。
SNMPでネットワーク機器など障害情報を通知する機能があり、その通知(SNMPトラップ)を受けて
Nagios上で処理させます。ここではsnmptt(SNMP Trap Translator)を使用した監視方法を取上げます。
監視の流れは以下の図のようになります。
ネットワーク機器や監視対象のサーバから送られてくるSNMPトラップはsnmptrapdで行われます
snmptrapdはNet-SNMPに含まれています。
受けたトラップ内容をsnmpttに引渡して、トラップ内容をフィルタリングしてトラップ状態をファイルに
書き込みます。そのファイルを定期的にNagiosデーモンが見に行き、アラートをあげます。
snmttを動作させるのに必要なソフトのインストール
snmptt本体は以下のサイトからダウンロードできます
http://downloads.sourceforge.net/snmptt/snmptt_1.2.tgz?modtime=1181989825&big_mirror=0
今回ダウンロードしてきたsnmpttのバージョンは1.2です
snmpttを動作させるには以下のパッケージやPerlモジュールが必要になります。
■Perl 5.6.1以上
■Net-SNMPパッケージ
・net-snmp-5.1-2.1.i386.rpm(今回使用したパッケージ)
・net-snmp-utils-5.1-2.1.i386.rpm(今回使用したパッケージ)
以下のPerlモジュール
・Sys::Syslog   ・Net-SNMP Perl  ・Soket  ・Time::HiRes
・Text::ParseWords  ・Config::IniFiles  ・Getop::Long  ・Posix
Perlのバージョンはperl -vとすればわかります。Net-SNMPはおそらく最初から入っていると思いますが
#rpm -qa | grep snmp  で調べると良いでしょう。
Perlモジュールのインストール状態を確認するには以下のようにコマンドから調べるといいでしょう
#find `perl -e 'print join(" ", @INC)'` -type f -name "*.pm" > perl.txt
インストール内容はperl.txtにはきだされます
インストールされていなければ以下のサイトで検索してダウンロードすると良いでしょう
http://search.cpan.org/
snmpttのインストール
ダウンロードしたsnmpttを展開していきます。
展開方法は下記参照お願いします。
#tar -zxvf snmptt_1.2.tgz
#cd snmptt_1.2  ←解凍してできたディレクトリに移動
#cp -p snmptt /usr/sbin  ←snmpttをコピーします
#chmod 755 /usr/sbin/snmptt  ←アクセス権を変更します
#cp -p snmptt.ini /etc/snmp/  ←snmptt設定を/etc/snmpへコピーします
snmptrapdのインストール
使用しているディストリビューションにインストールされていない場合はインストールします。
rpmコマンドでインストールするといいでしょう。
#rpm -ivh net-snmp-5.0.9-2.90.1.i386.rpm
#rpm -ivh net-snmp-utils-5.0.9-2.90.1.i386.rpm
#rpm -qa | grep snmp  ←インストールされたか確認します
snmptrapdの設定
snmptrapdの設定は/etc/snmp/snmptrapd.confで行います。
設定はsnmptrapd.confに以下の1行を記述します。
#vi /etc/snmp/snmptrapd.conf
   traphandle default /usr/sbin/snmptt  ←コピーしたsnmpttのパスを指定
snmptrapd起動スクリプトの編集
rpmでインストールした場合、自動的にsnmptrapdの起動スクリプトも/etc/init.d下に作成されます。
起動オプションを変更する必要があるので起動スクリプトを編集します。
#vi /etc/init.d/snmptrapd
   OPTIONS="-On -s -u /var/run/snmptrapd.pid" ←変数に"-On"を付けます
設定が完了したらsnmptrapdを起動させましょう
#/etc/init.d/snmptrapd start
snmptt.iniの設定
snmptt.iniの設定を変更してログを取る設定に変更しておきます。
これでうまくトラップが処理できなかった場合に記録が残ります。
#vi /etc/snmp/snmptt.ini
   unknown_trap_log_enable = 1  ←0を1に変更しています
  unknown_trap_log_file = /var/log/snmpttunknown.log  ←ログファイルを指定しています
※記述はsnmptt.iniに最初からありますので右側の変数だけ変えましょう
snmptt.confの作成
snmptt.iniの最後の方に記載されている[TrapFiles]セクションで指定されているsnmptt.confを
作成します。snmptt.confで指定されているトラップを受けたときに処理が実行されます。
ちなみにsnmptt.confのサンプルはsnmptt1.2.tgzを展開したときにできるsnmpleディレクトリに
入っていますので、それを/etc/snmp/下にコピーして使用するといいでしょう
---------------------------------------------
[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 ←このファイルを作成します
END
'---------------------------------------------
snmptt.confの作成は以下のようにおこないます
次の例は機器がリンクダウンした場合とアップしたときの定義を行っています
sampleのsnmptt.confを使用する場合、必要箇所のコメントを外して使用します
---------------------------------------------
EVENT linkDown .1.3.6.1.6.3.1.1.5.3 "Status Events" Normal
FORMAT Link down on interface $1.  Admin state: $2.  Operational state: $3
EXEC /usr/local/nagios/libexec/submit_check_result $r TRAP 2 "Link down on interface $1.
Admin state: $2.  Operational state: $3"
SDESC
A linkDown trap signifies that the SNMP entity, acting in
an agent role, has detected that the ifOperStatus object for
one of its communication links is about to enter the down
state from some other state (but not from the notPresent
state).  This other state is indicated by the included value
of ifOperStatus.
EDESC
#
#
#
EVENT linkUp .1.3.6.1.6.3.1.1.5.4 "Status Events" Normal
FORMAT Link up on interface $1.  Admin state: $2.  Operational state: $3
EXEC /usr/local/nagios/libexec/submit_check_result $r TRAP 0 "Link up on interface $1.  Ad
min state: $2.  Operational state: $3"
SDESC
A linkUp trap signifies that the SNMP entity, acting in an
agent role, has detected that the ifOperStatus object for
one of its communication links left the down state and
transitioned into some other state (but not into the
notPresent state).  This other state is indicated by the
included value of ifOperStatus.
EDESC
---------------------------------------------
上記の設定はEVENT欄で受けるイベント(OID)を設定して受けたイベントに対して
EXEC欄に指定された/usr/local/nagios/libexec/submit_check_resultを実行します
submit_check_resultの作成
snmpトラップを受けたときに実行されるシェルであるsubmit_check_resultを作成します
以下作成例です
snmptt.confで指定したsubmit_check_resultの引数がそれぞれ$1、$2、$3、$4に引き継がれます
---------------------------------------------
[TrapFiles]#!/bin/sh
echocmd="/bin/echo"
CommandFile="/usr/local/nagios/var/rw/nagios.cmd"
datetime=`date +%s`
cmdline="[$datetime] PROCESS_SERVICE_CHECK_RESULT;$1;$2;$3;$4"
 `$echocmd $cmdline >> $CommandFile`
---------------------------------------------
snmptt.confで指定されたEXEC欄をみていただければわかりますが
EXEC /usr/local/nagios/libexec/submit_check_result $r TRAP 0 "Link up on interface $1.  Admin state: $2.  Operational state: $3"
$rはトラップを投げてきたホスト名が入ります。この$rがsubmit_check_resultの$1に入ります
同じようにsubmit_check_resultの$2にはTRAP、$3には"0"が入り
$4には"Link up on interface $1.  Admin state: $2.  Operational state: $3"が入ります
このトラップを受けてsubmit_check_resultシェルが動き、結果が/usr/local/nagios/var/rw/nagios.cmdに
吐き出されていきます。nagiosはこの吐き出されたファイルの内容を見てアラートをあげるかどうかを判断
します
SNMPトラップサービスをNagiosに設定する
ここまで設定が完了したらSNMPトラップをNagiosにサービスとして動作させられるように設定を
行います
localhost.cfgのservice項目に追加をします
以下設定例です
---------------------------------------------
define service{
        use                             local-service         ; Name of service template to use
        host_name                       sw01
        service_description             TRAP
        active_checks_enabled            1
        max_check_attempts              1
        is_volatile                     1
        check_command                   check_dummy!0!"OK"
}
---------------------------------------------
ファイルの状態(ログ)を見て状態の変更を行うのでis_volatileを1に設定します
また定期的にファイルの状態を確認するため再試行はおこないませんのでmax_check_attemptsも1に設定
します
設定の確認
設定の確認はsnmptt1.2.tgzを展開したときにできるexamplesディレクトリ下のsample-trap.generic
を使用します
sample-trap.genericの内容は以下のようになっていますので使用環境に合わせて編集
するといいでしょう
---------------------------------------------
sw01
192.168.1.15
.1.3.6.1.2.1.1.3.0 31:18:27:02.00
.1.3.6.1.6.3.1.1.4.1.0 .1.3.6.1.6.3.1.1.5.3
.1.3.6.1.2.1.2.2.1.1.3 3
.1.3.6.1.2.1.2.2.1.7.3 2
.1.3.6.1.2.1.2.2.1.8.3 3
---------------------------------------------
#/usr/sbin/snmptt < /usr/local/snmptt/snmptt_1.2/examples/sample-trap.generic
アラートがあがれば成功です。また実際使用するにはsnmpトラップをとばす設定を
各監視対象ホストに入れておく必要があります
Windowsであれば簡易SNMPプロトコロル、スイッチであればsnmp-server hostコマンドでトラップの
送り先(今回の場合NagiosのIPアドレス)を設定します
 
前のページへ戻る