スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

NagiosでTrap検知する

UbuntuServerで動かしているNagiosでTrap検知をしてみる

少し前に書いたNagiosで、Ping監視や各サービス監視、SNMPポーリングでの監視はできていますが機能エンハンスとしてTrapを受信・アラートを出す機能を追加したのでメモ。

Nagiosはプラグインの実行結果をもとにCritical、Okなどのステータスを判断します。Trapの場合は監視対象の装置が一方的に送信してくるためにそのような処理ができないため別のアプローチをとる必要があります。Nagiosで監視する場合には具体的に以下のような流れになるようです。


- NagiosでのTrap受信・アラートまでの簡単な流れ -

① Trapを受信(snmptrapd)
 ↓
② Trapの種類を判断し処理を行う(snmptt)
 処理の一連として、nagios.cmdファイルにログを吐き出す(nagios:submit_check_result利用)
 ↓
③ Nagiosが定期的にnagios.cmdをチェックし該当する(nagios: check_dummy利用
 ↓
④ アラート検知





■前提条件
 ・Ubuntu 12.04 Server
 ・NagiosCore 3.4.1
 ・SNMPTT v1.3




● snmptrapdのインストール&設定
まず、Trapを受信するためのサービス"snmptrapd"をインストールします。Ubuntuでは"snmptt"をインストールすると一緒にインストールされます。
$sudo apt-get install snmptt

すると、/etc/snmp/snmptrapd.confという設定ファイルができるのでこれを編集します。具体的には、最後の行に以下を追加。(※必要に応じてファイルをバックアップしてください。)
traphandle default /usr/sbin/snmptthandler
authCommunity log,execute,net public

ここではコミュニティ名をpublicとしました。
設定の意味は受信したTrapに対してログ出力、コマンドの実行、別のネットワークの転送を許します、という意味らしいです。




● snmpttのインストール&設定

SNMPTTをインストールしますが、先ほどすでにインストール済みなので設定ファイルを変更します。

・ SNMPTTの設定ファイル/etc/snmp/snmptt.iniを変更・確認

確認箇所は以下の通り。
log_enable = 1
log_file = /var/log/snmptt/snmptt.log
log_system_enable = 1 (snmpttの動作ログを残す場合=1)
log_system_file = /var/log/snmptt/snmpttsystem.log
unknown_trap_log_enable = 1 (認識できないTrapをログとして保存する場合=1)
unknown_trap_log_file = /var/log/snmptt/snmpttunknown.log

また、処理するTrapを指定するための設定ファイルを指定する。すでに指定されている/etc/snmp/snmptt.confに追記する手もあるが、新規に別ファイルとして作成する。ここでは、LinkUP,Downを検知するためのファイルを"snmptt.conf.IF-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.conf.IF-MIB



・/etc/snmp/snmptt.confの編集

snmptt.confに記載されているTrap以外はUnknownとして扱うため、監視したいTrap毎に記述する必要がある。mibファイルから生成することも可能。
Ubuntuの場合"/usr/share/mibs/"の配下にMIBファイルがある(NagiosでSNMPプラグインをインストールしていれば)のでこれを利用する。
$sudo snmpttconvertmib --in /usr/share/mibs/ietf/IF-MIB --out /etc/snmp/snmptt.conf.IF-MIB

でMIBファイルからsnmpttconf形式に変換したファイルを生成してくれる。これをsnmptt.confに追記するか、snmptt.iniで読み込むように編集してあげる(一番下の辺り)。今回は後者。



・SNMPTTがnagios.cmdにログを書き込むよう設定する

snmptt.conf(snmptt.conf.IF-MIB 等)のFORMATとSDESCの間に下記行を追加して、SNMPTTが"submit_check_result"を利用し"nagios.cmd"にログを書き込むようにする。
今回は別ファイルとした"/etc/snmp/snmptt.conf.IF-MIB"を編集する
EVENT linkDown .1.3.6.1.6.3.1.1.5.3 "Status Events" Normal
FORMAT A linkDown trap signifies that the SNMP entity, acting in $*
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.
Variables:
1: ifIndex
2: ifAdminStatus
3: ifOperStatus
EDESC

重要!! 追加行の説明
・青文字の"TRAP"は後ほどのNagios設定のサービス名とあわせる必要があります。
・TRAPの後ろで指定する数字は、NagiosがこのTrapの状態をどう認識するかを指定する重要なパラメータです。
 0:OK
 1:Warning
 2:Critical
 3:Unknown
を意味します。上記例だと、LinkDonwをCriticalとして認識させる事を意味します。



● Nagios側での受信設定

submit_check_resultでログを出力するための設定を行う。

・submit_check_resultをコピーする

Nagiosインストール時のパッケージを解凍したディレクトリからsubmit_check_resultをコピーする。コピー元は自分の環境に合わせてください。
$sudo cp ~/Download/nagios/contrib/eventhandlers/submit_check_result /usr/local/nagios/libexec


・submit_check_resultを編集する

submit_check_resultは"/usr/local/nagios/var/rw/nagios.cmd" に書き込みを行うがUbuntuの場合(sudo)ファイルアクセスの際にアクセス権が無いためアクセスできない。
そのため一部変更が必要。
"submit_check_result"の最後の行を下記のように変更する。
#`$echocmd $cmdline >> $CommandFile`
`$echocmd $cmdline | sudo -u nagios tee -a $CommandFile`

※特にUbuntuはここが重要になります。Nagiosのサービスを稼働させた際に/usr/local/nagios/var/nagios.cmdができるのですがこのファイルは所有者がnagios:nagcmdでアクセス権が660(rw/rw/-)になっています。そのためこのままではファイルアクセスが出来ずNagiosにログが渡せません。
参考:sudoを利用する事の短所



・Nagiosでコマンド、サービス定義を行う
ここまできて、Nagios側でサービスを監視するための設定を行います。

コマンドの定義
check_dummyを利用するため、コマンド定義をします。(Nagisファイル:command.cfg)
define command{
command_name check_dummy
command_line $USER1$/check_dummy $ARG1$ $ARG2$
}



サービスの定義
実際に監視するサービスを定義します。
define service{
use generic-service
host_name test-sw00
service_description TRAP
is_volatile 1
max_check_attempts 1
check_command check_dummy!0!"OK"
notification_options w,u,c,f,r
}


※ Max_check_attemptsは1にしないとアラートが飛ばないです



●サービスの起動

関連サービスを再起動します。
$sudo service nagios restart
$sudo service snmptt restart
$sudo /usr/sbin/snmptrapd -On



●SNMPTRAPDの自動起動設定

snmptrapdはサーバ起動時に自動でサービスが開始するように設定する。初期状態ではされません。
"/etc/defualt/snmpd"を編集します。
編集箇所は以下2つ


TRAPDRUN=yes

TRAPDOPTS="-On -Lsd -p /var/run/snmptrapd.pid"

※この場合再起動しないと確かめられませんが・・。


以上で完了です。


Trapを発生させてみて確認してください。
私は実機でLinkTrapを発生させましたが、こんな方法もあるみたいです。


確認のポイント
① snmpttのログ確認
"/var/log/snmptt/snmptt.log"にTrapが記載されていること。

② /usr/local/nagios/var/rw/nagios.cmdのファイル更新時間が最新になること。

②が確認できれば、Nagiosにログが渡っているはずです。アラートを飛ばすようにしていればNagiosのトップ画面から警報・通知・イベントログなどでも確認できます。

それでも、受信等されない場合"netstat -an"でUDPポート162が開いている事、最悪はtcpdumpなどでSNMP-Trapパケットが到達している事を確認しているなどが必要になるかもしれません。


サービス監視画面<正常時>
正常画面


サービス監視画面<LinkDonwTrap受信時>
アラート検知

検知時はCriticalで赤くなりますが次回のサービスチェックのタイミングでLiinkDonwのままでもOKとなりグリーンになります。そのためアラート(メール)などで飛ばさないとタイミングによっては監視画面からは正常となってしまう場合があるので運用にきおつける必要があります。

スポンサーサイト

コメントの投稿

非公開コメント

プロフィール

Author:Opecha-DaDa
ニッチな技術メモ的なブログになりつつありますが、だからこそあなたのお役に立てる内容があれば幸いです。

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QR
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。