UCD-SNMP (NET-SNMP)との統合


Note: NagiosはHP OpenViewやOpenNMSの様な全対応SNMPマネジメントツールの代わりになるようにはデザインされていません。しかし、Nagiosでネットワーク上の機器が生成したSNMPトラップを受け取って警告を生成する方法があります。 以下はその説明です:

序文

この例ではUCD-SNMPsnmptrapdデーモンから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トラップを送信させるためには、以下のようにしました:

  1. ArcServeのオートパイロットジョブに失敗した、成功したなどの際にSNMPトラップを送るように修正
  2. SYS:\ETC\TRAPTARG.CFGにマネジメントホスト (SNMPトラップを受け取るホスト)のIPアドレスを追加する
  3. SNMP.NLMを読み込む
  4. SNMPトラップを実際に送るようALERT.NLMを読み込む

SNMPマネジメントホストの設定

LinuxのSNMPマネジメントホスト(firestorm)で、UCD-SNMP (NET-SNMP)ソフトウェアをインストールしました。インストール後は以下のようにしました:

  1. ArcServのMIBをインストールする(ArcServeインストールCDに含まれています)
  2. snmptrapd設定ファイル(/etc/snmp/snmptrapd.conf)を修正してArcServの警告の為のトラップハンドラを定義します。この詳細は後述します。
  3. SNMPトラップが来るのをリスンするためにsnmptrapdデーモンを起動します。

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ジョブが失敗、成功などしたら警告を出すでしょう。