第3章 Nagios を利用した監視

目次

3.1. Nagios の機能
3.2. Nagios のインストール
3.3. Nagios の設定ファイル
3.4. Nagios の設定
3.5. トラブルシューティング
3.6. さらなる情報

概要

Nagios は安定していてスケーラビリティに富んだ、拡張性の高いエンタープライズ 用途のネットワーク/システム監視ツールです。管理者に対してネットワークとシステムの 監視機能を提供し、 HTTP, SMTP, POP3 のほか、ディスク使用率やプロセッサの負荷など を監視することができます。もともと Nagios は Linux 上で動作するように設計されて きましたが、一般的な UNIX オペレーティングシステムでも動作します。この章では、 Nagios のインストールと設定方法について説明しています。 Nagios のプロジェクトに ついて、詳しくは http://www.nagios.org/ をお読みください。

3.1. Nagios の機能

Nagios の主要な機能は下記のとおりです:

  • ネットワークサービスの監視 (SMTP, POP3, SMTP, NNTP など)

  • ホスト資源の監視 (プロセッサの負荷, ディスク使用率など)

  • シンプルなプラグイン機能による、さらなるサービスチェック機能の追加

  • 冗長構成の Nagios サーバへの対応

3.2. Nagios のインストール

Nagios は zypper コマンドまたは YaST でインストールします。

パッケージのインストール方法は下記のいずれかをお読みください:

  • 項 「zypper の使用」 (第9章 コマンドラインツールを利用したソフトウエア管理, ↑スタートアップ)

  • 項 「パッケージやパターンのインストールと削除」 (第5章 ソフトウエアのインストールと削除, ↑スタートアップ)

いずれの手順でも、 nagiosnagios-www のパッケージをそれぞれ インストールしてください。後者の RPM パッケージには Nagios に対する Web インターフェイスが含まれていて、たとえばサービスの状態や問題の履歴などを Web 経由で閲覧することができます。なお、後者のパッケージは必須というわけでは ありません。

Nagios はモジュールを利用する設計になっているため、チェックプラグインを 追加することで、特定のサービスが利用可能かどうかを調べることができます。 nagios-plugin パッケージでは、そのような出来合いの プラグインが収録されていますので、インストールしておくことをお勧めします。 もちろん独自のチェックプラグインを作成することもできます。

3.3. Nagios の設定ファイル

Nagios には、下記のような設定ファイルがあります:

/etc/nagios/nagios.cfg

Nagios の根幹部分の設定ファイルで、 Nagios の動作を決定する各種の ディレクティブが書かれています。詳しい文書については、 http://nagios.sourceforge.net/docs/3_0/configmain.html をお読みください。

/etc/nagios/resource.cfg

すべての Nagios プラグインに対するパスを記述します (既定では /usr/lib/nagios/plugins が 書かれています) 。

/etc/nagios/command.cfg

サービスが利用可能かどうかを判断するためのプログラム定義や、 電子メールによる通知を送信するためのコマンド定義を記述します。

/etc/nagios/cgi.cfg

Nagios Web インターフェイス関連のオプションを記述します。

/etc/nagios/objects/

オブジェクト定義ファイルを含むディレクトリです。詳しくは 3.3.1項 「オブジェクト定義ファイル」 をお読みください。

3.3.1. オブジェクト定義ファイル

上述のような設定ファイルに加え、 Nagios では非常に柔軟で高度なカスタマイズの できる、 オブジェクト定義ファイル と呼ばれる設定ファイルが 存在します。これらの設定ファイルでは下記のようなオブジェクトを定義することが できるため、非常に重要な存在となっています:

  • ホスト

  • サービス

  • 連絡先

オブジェクトは容易に拡張できるようになっていることから、より柔軟に 対応できるようになっています。たとえば 1 つのサービスだけが動作している ホストを管理している場合を想定してみてください。同じホストに対して別の サービスをインストールし、そのサービスについても監視を行ないたい場合、 新しいほうのサービスをオブジェクトとして追加し、それをホストオブジェクトに 割り当てれば、面倒な手間をかけることなく新しいサービスを監視できるように なります。

インストールが終わっていれば、 Nagios ではオブジェクト定義の設定ファイルに ついて、既定のテンプレートが提供されます。テンプレートは /etc/nagios/objects 内に存在していますので、 下記のようにホストやサービス、連絡先を追加することができます:

例3.1 ホストオブジェクトの定義

define host {
 name                   SRV1             
 host_name              SRV1
 address                192.168.0.1
 use                    generic-host     
 check_period           24x7            
 check_interval         5           
 retry_interval         1              
 max_check_attempts     10            
 notification_period    workhours     
 notification_interval  120
 notification_options   d,u,r
}

host_name オプションでは、ホストに対する監視時の 表示名を指定しています。また address には、この ホストの IP アドレスを指定しています。 use ステートメントでは、 generic-host という名称の他の設定値を継承する指定が 書かれています。さらに check_period では、 24x7 (24 時間 7 日、つまり年中無休) で監視することを指定しています。 また、 check_interval では 5 分間隔で監視する 設定が書かれているほか、 retry_interval では 再試行の間隔が 1 分間隔であることを指定しています。また、 Nagios では 正当性が確認できなかったチェックに対して、複数回の再試行を行ないます。 再試行の回数を指定する項目として、 max_check_attempts ディレクティブが用意されています。また、 notification で始まるすべての設定フラグは、 Nagios が監視対象のサービスに異常を検出した 場合に、どのような処理を行なうべきかを指定します。上記のホスト定義では、 Nagios は日中の時間帯に管理者に対してのみ通知を行ないます。時間帯の 設定は notification_period で行ないます。 また notification_interval によると、通知は 2 時間ごとに送信されます。さらに notification_options では、 4 種類のフラグ d, u, r, n を設定する ことができます。ここでは管理者に対してどのような通知を行なうのかを指定します。 d はサービスが動作していない (down) 状態を、 u はネットワーク経由で到達不能な状態 (unreachable) 、そして r は それらの状態からの復旧 (recoveries) について、それぞれ 通知を行なうように指定します。なお、 n は 通知を全く行なわないようにするフラグです。

例3.2 サービスオブジェクトの定義

define service {
 use                    generic-service
 host_name              SRV1
 service_description    PING
 contact_groups         router-admins
 check_command          check_ping!100.0,20%!500.0,60%
} 

最初の設定ディレクティブである use では、 Nagios に対して generic-service のテンプレートから 設定を引き継ぐように指定しています。次の host_name はサービスを割り当てる先のホストオブジェクトを指定しています。ホスト 自体の設定は、ホストオブジェクトとして設定してください。また、 service_description ではサービスに対する説明文を 設定することができます。上記の例では単純に PING とだけ 書かれています。 contact_groups オプションでは、 サービスが動作していない場合の連絡先となるグループを指定します。グループと その中のメンバーは、後述する連絡先グループオブジェクトで設定します。 最後に check_command では、そのサービスが利用 可能かどうかを調べるプログラムを設定します。

例3.3 連絡先と連絡先グループの定義

define contact {
 contact_name           admins                
 use                    generic-contact        
 alias                  Nagios Admin
 email                  nagios@localhost        
}
                
define contactgroup {
 contactgroup_name      router-admins
 alias                  Administrators
 members                admins
}

上記の例では、 contact を利用した直接的な連絡先 設定と、それを包含する contactgroup による 連絡先グループを示しています。 contact では、 サービスが利用できない場合に利用する電子メールアドレスと、そのユーザの 名前を設定します。通常、ここは責任を持つ管理者を設定します。 use では、 generic-contact という名称で設定された 既定値を引き継ぐことを指定しています。

Nagios のすべてのオブジェクトについて、詳しくは下記をお読みください: http://nagios.sourceforge.net/docs/3_0/objectdefinitions.html.

3.4. Nagios の設定

リモートのサービスやリモートホストの資源など、様々な項目を監視するにあたっての Nagios の設定方法を説明します。

3.4.1. Nagios を利用したリモートサービスの監視

この章では、 Nagios を利用してリモートのサービスを監視するための 方法を示しています。具体的には下記のようにして実施してください:

手順3.1 Nagios を利用したリモートの HTTP サービスの監視

  1. mkdir コマンドを利用し、 /etc/nagios/objects 内にディレクトリを作成します。 作成するディレクトリ名は任意の名前でかまいません。

  2. /etc/nagios/nagios.conf ファイルを開き、 最初の段階で作成しておいたディレクトリを cfg_dir (設定ディレクトリ) 内に設定します。

  3. 最初の段階で作成した設定ディレクトリに移動し、それぞれ新しい ファイルを作成します: hosts.cfg, services.cfg, contacts.cfg

  4. hosts.cfg ファイル内にホストオブジェクトを 記述します:

    define host {
     name                   host.name.com
     host_name              host.name.com
     address                192.168.0.1
     use                    generic-host
     check_period           24x7
     check_interval         5
     retry_interval         1
     max_check_attempts     10
     contact_groups         admins
     notification_interval  60
     notification_options   d,u,r
    }                        
                            
  5. services.cfg 内にサービスオブジェクトを 記述します:

    define service {
     use                    generic-service
     host_name              host.name.com
     service_description    HTTP
     contact_groups         router-admins
     check_command          check_http
    }
                    
  6. contacts.cfg 内に連絡先および連絡先 グループオブジェクトを記述します:

    define contact {
     contact_name           max-mustermann
     use                    generic-contact
     alias                  Webserver Administrator
     email                  mmustermann@localhost
    }
    
    define contactgroup {
     contactgroup_name      admins
     alias                  Administrators
     members                max-mustermann
    }
                        
  7. rcnagios restart を実行し、 Nagios を再起動します。

  8. cat /var/log/nagios/nagios.log を実行し、下記の ような出力があることを確認します:

     [1242115343] Nagios 3.0.6 starting... (PID=10915)
     [1242115343] Local time is Tue May 12 10:02:23 CEST 2009
     [1242115343] LOG VERSION: 2.0
     [1242115343] Finished daemonizing... (New PID=10916)

異なるリモートサービスを監視したい場合は、 ステップ 5 のステップで check_command の項目を調整します。 利用可能なすべてのチェックプログラムについて、一覧を表示するには、 ls /usr/lib/nagios/plugins/check_* を実行してください。

何らかのエラーが発生した場合は、 3.5項 「トラブルシューティング」 をお読みください。

3.4.2. Nagios を利用したリモートホストの資源監視

この章では、 Nagios を利用してリモートホストの資源を監視するための手順を 説明しています。

Nagios サーバ上で下記の手順を実施します:

手順3.2 Nagios を利用したリモートホストの資源監視 (サーバ)

  1. nagios-nsca パッケージを インストールします (たとえば zypper in nagios-nsca など) 。

  2. /etc/nagios/nagios.cfg ファイル内で、下記の設定を 行ないます:

    check_external_commands=1
     accept_passive_service_checks=1
     accept_passive_host_checks=1
     command_file=/var/spool/nagios/nagios.cmd
  3. /etc/nagios/nsca.conf ファイル内の command_file オプションについて、 /etc/nagios/nagios.conf と同じファイルを指定します。

  4. 他のホストやサービスのオブジェクトを追加します:

    define host {
     name                            foobar
     host_name                       foobar
     address                         10.10.4.234
     use                             generic-host
     check_period                    24x7
     check_interval                  0
     retry_interval                  1
     max_check_attempts              1
     active_checks_enabled           0
     passive_checks_enabled          1
     contact_groups                  router-admins
     notification_interval           60
     notification_options            d,u,r
    }
    define service {
     use                             generic-service
     host_name                       foobar
     service_description             diskcheck
     active_checks_enabled           0
     passive_checks_enabled          1
     contact_groups                  router-admins
     check_command                   check_ping
    }
  5. rcnagios restartrcnsca restart コマンドをそれぞれ実行します。

監視対象のクライアント側では、下記の手順を実施します:

手順3.3 Nagios を利用したリモートホストの資源監視 (クライアント)

  1. 監視対象 (監視を受ける) のホストに対して、 nagios-nsca-client パッケージを インストールします。

  2. 下記のようにして、テスト用のスクリプトを作成します (たとえばディスクの 使用率をチェックするスクリプトなど):

    #!/bin/bash
    NAGIOS_SERVER=10.10.4.166
    THIS_HOST=foobar
                           
    #
    # ここに独自のテストアルゴリズムを記述します
    #
                        
    # 成功時に実行するもの:
    echo "$THIS_HOST;diskcheck;0;OK: test ok" \
             | send_nsca -H $NAGIOS_SERVER -p 5667 -c /etc/nagios/send_nsca.cfg -d ";"
                           
    # 警告時に実行するもの:
    echo "$THIS_HOST;diskcheck;1;Warning: test warning"  \
             | send_nsca -H $NAGIOS_SERVER -p 5667 -c /etc/nagios/send_nsca.cfg -d ";"
                           
    # 失敗時に実行するもの:
    echo "$THIS_HOST;diskcheck;2;CRITICAL: test critical"  \
             | send_nsca -H $NAGIOS_SERVER -p 5667 -c /etc/nagios/send_nsca.cfg -d ";"
  3. あとは crontab -e コマンドを利用して、新しい cron 項目を作成します。たとえば下記のようになります:

    */5 * * * * /directory/to/check/program/check_diskusage

3.5. トラブルシューティング

Error: ABC 'XYZ' specified in ... '...' is not defined anywhere!

すべてのオブジェクトが正しく定義されていることを確認してください。 また、スペルミスには注意してください。

(Return code of 127 is out of bounds - plugin may be missing)

nagios-plugins パッケージが インストールされているかどうか確認してください。

電子メールによる通知が動作しない

postfixexim などの メールサーバがインストールされていて、正しく設定されているかどうかを 確認してください。メールサーバが正しく動作しているかどうかを確認するには、 echo "Mail Server Test!" | mail foo@bar.com のように 入力します。このコマンドは foo@bar.com 宛にメールを送信します。このメールが 正しく配信されれば、お使いのメールサーバは問題なく動作していることになります。 配信されない場合は、メールサーバのログファイルを確認してください。

3.6. さらなる情報

Nagios の完全なドキュメンテーション

http://nagios.sourceforge.net/docs/3_0/toc.html

オブジェクト設定の概要

http://nagios.sourceforge.net/docs/3_0/configobject.html

オブジェクトの定義について

http://nagios.sourceforge.net/docs/3_0/objectdefinitions.html

Nagios のプラグイン

http://nagios.sourceforge.net/docs/3_0/plugins.html


openSUSE システム分析とチューニングガイド 13.1