Note: NagiosはHP OpenViewやOpenNMSの様な全対応SNMPマネジメントツールの代わりになるようにはデザインされていません。しかし、Nagiosでネットワーク上の機器が生成したSNMPトラップを受け取って警告を生成する方法があります。 以下はその説明です:
序文
この例ではUCD-SNMPのsnmptrapdデーモンからSNMPトラップを受け取ってNagiosで警告を出す方法を説明します。以下の方法ではSNMPトラップを受け取るホストとNagiosが稼働しているホストとは別のホストであると想定しています。SNMPトラップを受け取るホストとNagiosが稼働しているホストが同一の場合は多少サンプルを変更する必要があるでしょう。同様に監視サーバにnsca デーモンが、SNMPトラップを受け取るホストにはnscaクライアント(send_nsca)がインストールされているものとしています。
この例では、私のNovellサーバ上で稼働しているArcServのバックアップジョブのSNMPトラップを受け取ってNagiosが警告を生成するやり方を説明します。 私はバックアップが失敗したときに警告をつけ取りたいので、これが動いているのはとても私にとってはナイスです。
追加ソフトウェア
SNMPトラップをNagiosのイベントに翻訳するのは少し退屈です。もっと簡単にしたいのなら、 Net-SNMPに結合され、さらにトラップハンドルシステム向上を提供する http://www.snmptt.orgの Alex Burgerの SNMP トラップ変換プロジェクトを調べたほうがいいかもしれません。
サービスを定義する
まず初めにオブジェクト設定ファイルにSNMPトラップ用のサービスを定義します(この例では、ArcServeのバックアップジョブサービスを定義しています)。警告を作成するホストはnovellserverと言う名前で呼ばれていると想定したサンプルサービス定義は以下のようになります:
define service{
host_name novellserver
service_description ArcServe Backup
is_volatile 1
active_checks_enabled 0
passive_checks_enabled 1
max_check_attempts 1
contact_groups novell-backup-admins
notification_interval 120
notification_period 24x7
notification_options w,u,c,r
check_command check_none
}
ここで重要なのはこのサービスではvolatileオプションが有効になっていることです。なぜなら、このサービスは警告が発せられるたびに通知してほしいからです。同様にこのサービスではアクティブサービスチェックも無効になっていますが、一方でパッシブチェックは有効です。これはこのサービスはアクティブチェックを行うことがなく、全警告情報は、SNMPマネジメントホスト(この例ではfirestormです)のnscaクライアントから受動的に受け取ると言うことを意味しています。
ArcServe とNovell SNMP の設定
マネジメントホストへArcServ(とNovellサーバ)がSNMPトラップを送信させるためには、以下のようにしました:
SNMPマネジメントホストの設定
LinuxのSNMPマネジメントホスト(firestorm)で、UCD-SNMP (NET-SNMP)ソフトウェアをインストールしました。インストール後は以下のようにしました:
ArcServeのSNMPトラップがNagiosホストにルーティングさせるためには、/etc/snmp/snmptrapd.confファイルにトラップハンドラを定義します。私の設定は以下のような感じになっています:
#############################
# ArcServe SNMP Traps
#############################
# Tape format failures
traphandle ARCserve-Alarm-MIB::arcServetrap9 /usr/local/nagios/libexec/eventhandlers/handle-arcserve-trap 9
# Failure to read tape header
traphandle ARCserve-Alarm-MIB::arcServetrap10 /usr/local/nagios/libexec/eventhandlers/handle-arcserve-trap 10
# Failure to position tape
traphandle ARCserve-Alarm-MIB::arcServetrap11 /usr/local/nagios/libexec/eventhandlers/handle-arcserve-trap 11
# Cancelled jobs
traphandle ARCserve-Alarm-MIB::arcServetrap12 /usr/local/nagios/libexec/eventhandlers/handle-arcserve-trap 12
# Successful jobs
traphandle ARCserve-Alarm-MIB::arcServetrap13 /usr/local/nagios/libexec/eventhandlers/handle-arcserve-trap 13
# Imcomplete jobs
traphandle ARCserve-Alarm-MIB::arcServetrap14 /usr/local/nagios/libexec/eventhandlers/handle-arcserve-trap 14
# Job failures
traphandle ARCserve-Alarm-MIB::arcServetrap15 /usr/local/nagios/libexec/eventhandlers/handle-arcserve-trap 15
この例ではSNMPマネジメントホスト上の/usr/local/nagios/libexec/eventhandlers/ディレクトリにhandle-arcserve-trapスクリプトがあるものと想定しています。あなたの設定にあうように修正してください。ともかく、私のマネジメントホスト上のhandle-arcserve-trapスクリプトは以下のような感じになっています:
#!/bin/sh
# Arguments:
# $1 = trap type
# First line passed from snmptrapd is FQDN of host that sent the trap
read host
# Given a FQDN, get the short name of the host as it is setup in Nagios
hostname="unknown"
case $host in
novellserver.mylocaldomain.com)
hostname="novellserver"
;;
nt.mylocaldomain.com)
hostname="ntserver"
;;
esac
# Get severity level (OK, WARNING, UNKNOWN, or CRITICAL) and plugin output based on trape type
state=-1
output="No output"
case "$1" in
# failed to format tape - critical
11)
output="Critical: Failed to format tape"
state=2
;;
# failed to read tape header - critical
10)
output="Critical: Failed to read tape header"
state=2
;;
# failed to position tape - critical
11)
output="Critical: Failed to position tape"
state=2
;;
# backup cancelled - warning
12)
output="Warning: ArcServe backup operation cancelled"
state=1
;;
# backup success - ok
13)
output="Ok: ArcServe backup operation successful"
state=0
;;
# backup incomplete - warning
14)
output="Warning: ArcServe backup operation incomplete"
state=1
;;
# backup failure - critical
15)
output="Critical: ArcServe backup operation failed"
state=2
;;
esac
# Submit passive check result to monitoring host
/usr/local/nagios/libexec/eventhandlers/submit_check_result $hostname "ArcServe Backup" $state "$output"
exit 0
handle-arcserve-trapスクリプトで注意してほしいのは実際に監視ホストに警告を送信しているスクリプトはsubmit_check_resultだと言うことです。 submit check_resultは以下のような感じになります(マネジメントホストのsend_nscaプログラムの場所を適切な位置に変更してください):
#!/bin/sh
# Arguments
# $1 = name of host in service definition
# $2 = name/description of service in service definition
# $3 = return code
# $4 = output
/bin/echo -e "$1\t$2\t$3\t$4\n" | /usr/local/nagios/bin/send_nsca monitor -c /usr/local/nagios/etc/send_nsca.cfg
完了
これで必要な設定はすべてできました。監視サーバのNagiosを再起動してください。これで完了です!NagiosはArcServeジョブが失敗、成功などしたら警告を出すでしょう。