概要
Nagios は安定していてスケーラビリティに富んだ、拡張性の高いエンタープライズ 用途のネットワーク/システム監視ツールです。管理者に対してネットワークとシステムの 監視機能を提供し、 HTTP, SMTP, POP3 のほか、ディスク使用率やプロセッサの負荷など を監視することができます。もともと Nagios は Linux 上で動作するように設計されて きましたが、一般的な UNIX オペレーティングシステムでも動作します。この章では、 Nagios のインストールと設定方法について説明しています。 Nagios のプロジェクトに ついて、詳しくは http://www.nagios.org/ をお読みください。
Nagios の主要な機能は下記のとおりです:
ネットワークサービスの監視 (SMTP, POP3, SMTP, NNTP など)
ホスト資源の監視 (プロセッサの負荷, ディスク使用率など)
シンプルなプラグイン機能による、さらなるサービスチェック機能の追加
冗長構成の Nagios サーバへの対応
Nagios は zypper コマンドまたは YaST でインストールします。
パッケージのインストール方法は下記のいずれかをお読みください:
項 「zypper の使用」 (第9章 コマンドラインツールを利用したソフトウエア管理, ↑スタートアップ)
項 「パッケージやパターンのインストールと削除」 (第5章 ソフトウエアのインストールと削除, ↑スタートアップ)
いずれの手順でも、 nagios
と
nagios-www
のパッケージをそれぞれ
インストールしてください。後者の RPM パッケージには Nagios に対する Web
インターフェイスが含まれていて、たとえばサービスの状態や問題の履歴などを
Web 経由で閲覧することができます。なお、後者のパッケージは必須というわけでは
ありません。
Nagios はモジュールを利用する設計になっているため、チェックプラグインを
追加することで、特定のサービスが利用可能かどうかを調べることができます。
nagios-plugin
パッケージでは、そのような出来合いの
プラグインが収録されていますので、インストールしておくことをお勧めします。
もちろん独自のチェックプラグインを作成することもできます。
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項 「オブジェクト定義ファイル」 をお読みください。
上述のような設定ファイルに加え、 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.
リモートのサービスやリモートホストの資源など、様々な項目を監視するにあたっての Nagios の設定方法を説明します。
この章では、 Nagios を利用してリモートのサービスを監視するための 方法を示しています。具体的には下記のようにして実施してください:
手順3.1 Nagios を利用したリモートの HTTP サービスの監視
mkdir
コマンドを利用し、
/etc/nagios/objects
内にディレクトリを作成します。
作成するディレクトリ名は任意の名前でかまいません。
/etc/nagios/nagios.conf
ファイルを開き、
最初の段階で作成しておいたディレクトリを cfg_dir
(設定ディレクトリ) 内に設定します。
最初の段階で作成した設定ディレクトリに移動し、それぞれ新しい
ファイルを作成します: hosts.cfg
,
services.cfg
,
contacts.cfg
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 }
services.cfg
内にサービスオブジェクトを
記述します:
define service { use generic-service host_name host.name.com service_description HTTP contact_groups router-admins check_command check_http }
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 }
rcnagios restart を実行し、 Nagios を再起動します。
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項 「トラブルシューティング」 をお読みください。
この章では、 Nagios を利用してリモートホストの資源を監視するための手順を 説明しています。
Nagios サーバ上で下記の手順を実施します:
手順3.2 Nagios を利用したリモートホストの資源監視 (サーバ)
nagios-nsca
パッケージを
インストールします (たとえば zypper in nagios-nsca
など) 。
/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
/etc/nagios/nsca.conf
ファイル内の
command_file
オプションについて、
/etc/nagios/nagios.conf
と同じファイルを指定します。
他のホストやサービスのオブジェクトを追加します:
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 }
rcnagios restart と rcnsca restart コマンドをそれぞれ実行します。
監視対象のクライアント側では、下記の手順を実施します:
手順3.3 Nagios を利用したリモートホストの資源監視 (クライアント)
監視対象 (監視を受ける) のホストに対して、
nagios-nsca-client
パッケージを
インストールします。
下記のようにして、テスト用のスクリプトを作成します (たとえばディスクの 使用率をチェックするスクリプトなど):
#!/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 ";"
あとは crontab -e コマンドを利用して、新しい cron 項目を作成します。たとえば下記のようになります:
*/5 * * * * /directory/to/check/program/check_diskusage
Error: ABC 'XYZ' specified in ... '...' is not defined anywhere!
すべてのオブジェクトが正しく定義されていることを確認してください。 また、スペルミスには注意してください。
(Return code of 127 is out of bounds - plugin may be missing)
nagios-plugins
パッケージが
インストールされているかどうか確認してください。
postfix
や exim
などの
メールサーバがインストールされていて、正しく設定されているかどうかを
確認してください。メールサーバが正しく動作しているかどうかを確認するには、
echo "Mail Server Test!" | mail foo@bar.com のように
入力します。このコマンドは foo@bar.com 宛にメールを送信します。このメールが
正しく配信されれば、お使いのメールサーバは問題なく動作していることになります。
配信されない場合は、メールサーバのログファイルを確認してください。
http://nagios.sourceforge.net/docs/3_0/objectdefinitions.html