トップマニュアル設定事例 | お薦め書籍

AutoCaller - 緊急電話連絡ソフト
連絡先に確実に伝えることが重要な緊急電話連絡。その悩みを解決する。データセンタ事業者、MSP事業者、待望のソフト。システム管理者にもうれしい。

はじめに

ここでは、WinLogmonを使ってログ監視をおこない、Linuxを経由して外部に通知をおこなう設定事例を説明します。なお、SNMPについての基本的な理解がある人を対象として説明します。

設定事例

メールなどの外部への通知手段をもっているLinuxサーバと、外部への直接の通知手段をもたないWindowsサーバがある。

WindowsからLinuxへの通知手段は、SNMPトラップを使用することにする。

Linuxサーバ側

SNMPトラップを受信したら、その内容をメールで指定のメールアドレス(sakazuki@sample.jp)に送信する。

基本情報

  • IPを192.168.200.10とする。
  • コミュニティ名はsampleとする
  • このサーバからはSMTPサーバを指定して、メール送信がおこなえることとする。
  • SNMPトラップを受信するマネージャーソフトには、net-snmpのsnmptrapdを使う。

トラップ受信の設定は、snmptrapd.confに書く。このファイルはデフォルトでは/usr/local/share/snmp/snmptrapd.confにある。

snmptrapd.confの書式は、

traphandle OID|default PROGRAM [ARGS ...]

である。簡単な日本語の説明が欲しい場合はこちらを参考。

トラップの種類が少なくて仕訳する必要なければ、defaultのトラップハンドラにメール通知用スクリプトを指定してやればいい。設定例は以下の通り。

traphandle default /usr/local/bin/traptoemail -s mail.sample.jp sakazuki@sample.jp

snmptrapd.confの編集が終わったら、snmptrapdを再起動する(もしくは、HUPを送る)。これで、受信したトラップのデータはtraptoemailというスクリプトの標準入力に渡されるようになる。

traptoemailは、net-snmpと一緒にインストールされるトラップをメールで通知するPerlスクリプトだ。短いので、ソースをよんでみるといい。このスクリプトの使い方は-hオプションで実行すると確認できる。

sample:~$ /usr/local/bin/traptoemail -h
traptoemail [-s smtpserver] [-f fromaddress] toaddress [...]

  traptoemail shouldn't be called interatively by a user.  It is
  designed to be called as an snmptrapd extension via a "traphandle"
  directive in the snmptrapd.conf file.  See the snmptrapd.conf file for
  details.

  Options:
    -s smtpserver      Sets the smtpserver for where to send the mail through.
    -f fromaddress     Sets the email address to be used on the From: line.
    toaddress          Where you want the email sent to.

sample:~$

トラップの送信元が複数あって、送信元ごとに仕訳する必要がある場合はdefaultではなくOIDを指定する。defaultの代わりにOIDを指定した設定を追加してやる。設定例は以下のとおり。

traphandle .1.3.6.1.4.1.12345.0.0 /usr/local/bin/traptoemail -s mail.sample.jp  test@sample.jp
traphandle default /usr/local/bin/traptoemail -s mail.sample.jp sakazuki@sample.jp

このOIDは何にしていいのか悩むところだ。が、結論からいうと送信元と受信側とで揃えてありさえすればなんでもいい。ただ、揃え方には注意が必要だ。

受信側のtraphandleに書くOIDは、送信元の[Generic]が6なら、[Enterprise]と0と[Specific]の値をつなげたものとする必要がある。

【注意】送信側データ部のOIDと揃えるのではない。

[Enterprise]+0+[Specific]

なんでこうなのかはわからない。この指定の仕方について説明した文書は、筆者はいままで見かけたことがない。ひょっとするとRFCで決まっているかもしれない。筆者は、snmptrapdのソースを読んでみてようやくここに指定すべきOIDの求めかたが分かった。(snmptrapd_handler.c 900行目近辺のcase SNMP_MSG_TRAPのブロック。)

送信側で、Enterpriseを .1.3.6.1.4.1.12345、 Genericを6、Specificを0 の設定をしていた場合は

traphandle .1.3.6.1.4.1.12345.0.0 /usr/local/bin/traptoemail -s mail.sample.jp sakazuki@sample.jp

と指定する。

この設定を書いたらsnmptrapdを再起動する(もしくは、HUPを送る)。

Windowsサーバ側

上記のトラップハンドラで処理されるようにするためには、WinLogmonのSNMPトラップの設定を以下の通りとする。

ラベル 設定値
トラップ送信先 192.168.200.10
ポート番号 162
コミュニティ名 sample
Enterprise 1.3.6.1.4.1.12345
Generic 6
Specific 0
OID 1.3.6.1.4.1.12345.100.1

この場合、Linux側でどのハンドラで処理されるかを決めるのは、EnterpriseとGenericとSpecificだ。最後のOIDはないのでくどいようだが注意しよう。

Enterprise, Generic, Specificの値の意味やなぜそうなのかを知りたい場合は、下記の書籍などを参照しよう。ただ、よくわからなければ、Genericを6、Specificを0で固定してEnterpriseを適度に変更して運用しておけばいいだろう。

「入門SNMP」
ダグラス・R. マウロ (著), その他 単行本 (2002/07) オライリー・ジャパン
SNMPそのものについての参考書。知識としてはこちらの方が整理されており詳しい。SNMPv3についても記述がある。OpenViewやnet-snmp、PerlモジュールなどSNMPを取り扱うツールの基本的な設定方法なども説明してくれる。

 

トラブルシューティング

トラップが受信されているかどうかわからない場合は、snmptrapdを標準出力モードで起動してトラップを受信させてみる。snmptrpdは下記の用にオプション付きで起動する。

/usr/local/bin/snmptrapd -Pd

これで標準出力にトラップの受信データが表示されるので、送られてくるOIDなどがどうなっているか確認する。