CentOS5.0でNagios2を使う(サービス監視編)

前回、Nagiosをインストールして動かすところまでたどり着いた。今回はNagiosの様々なプラグインを使用して、外部のサーバのサービスを監視する設定をする。変更をするファイルは/etc/nagios/localhost.cfgと/etc/nagios/commands.cfgのみ。

まず、サーバwww1のHTTPサービスを監視する設定をしよう。

[root@manager1 ~]# vi /etc/nagios/localhost.cfg
...
define host{
        use                     linux-server
        host_name               www1
        address                 192.168.2.4
        check_command           check-host-alive
        contact_groups          admins
        }
...
define service{
        use                             generic-service
        host_name                       www1
        service_description             HTTP
        check_command                   check_http
        }
...

hostの設定では、use linux-serverと書いてあるので、先に設定してあるテンプレートlinux-serverから設定値を受け継ぐ。check-host-aliveはサーバが障害になったときに確認用に実行されるコマンド。contact_groupsは障害時にメールで通知するあて先を示す。

serviceの設定でもuse generic-serviceと書いてあるので、先に設定してあるテンプレートgeneric-serviceから設定値を受け継ぐ。host_nameはこのサービスを監視するホストで、カンマ区切りで複数列挙することが出来る。service_descriptionは任意の名前で、Webの表示に使われる。check_commandで指定しているcheck_httpの設定は/etc/nagios/commands.cfgに以下のように定義してある。

[root@manager1 ~]# cat /etc/nagios/commands.cfg
...
define command{
        command_name    check_http
        command_line    $USER1$/check_http -H $HOSTADDRESS$
        }
...

ここで$USER1$は/etc/nagios/resources.cfg内で$USER1$=/usr/lib64/nagios/pluginsと定義されているので、つまりは/usr/lib64/nagios/plugins/check_httpというスクリプトを呼び出す設定ということになる。

次に、DNSサーバの監視をする。ホストの定義は先ほどと同様なので省略。

define service{
        use                             generic-service
        host_name                       ns1
        service_description             DNS
        check_command                   check_dns
        }

先ほどと違うのはcheck_commandで、check_dnsというコマンドを使っている。check_dnsも/etc/nagios/commands.cfgで以下のように定義されている。

define command{
        command_name    check_dns
        command_line    $USER1$/check_dns -H www.yahoo.com -s $HOSTADDRESS$
        }

なんとyahooを名前解決している。ここの部分は自由に書き換えてもよい。

次に、特にサービスを立ち上げていないホストに対して、sshでアクセスできることを監視しよう。

define service{
        use                             generic-service
        host_name                       client1
        service_description             SSH
        check_command                   check_ssh
        }

check_sshというスクリプトは用意されているのだが、コマンドとして定義されていない。よって/etc/nagios/commands.cfgに以下を追加する。

define command{
        command_name    check_ssh
        command_line    $USER1$/check_ssh -H $HOSTADDRESS$
        }

sshも立ち上がっていないホストに対しては、pingで監視するしかない。

define service{
        use                             generic-service
        host_name                       router1
        service_description             PING
        check_command                   check_ping!100.0,20%!500.0,60%
        }

check_pingの後の100.0,20%はOKであるためのラウンドトリップタイム(ms)と失敗率の上限、500.0と60%はWARNINGの上限。それ以上はCRITICALとなる。

check_pingコマンドは/etc/nagios/commands.cfgに以下のように定義されている。

define command{
        command_name    check_ping
        command_line    $USER1$/check_ping -H $HOSTADDRESS$ -w $ARG1$ -c $ARG2$ -p 5
        }

Nagiosにはこれ以外にも多数のサービスに対応したスクリプトがあるが、シンプルにTCPの3ウェイハンドシェイクをチェックするコマンドもある。

define service{
        use                             generic-service
        host_name                       proxy1
        service_description             PROXY
        check_command                   check_tcp!3128
        }

check_tcpの引数に与えた3128はTCPのポート番号で、squidのサービスが上がってるかどうかを監視する。

check_tcpのコマンド定義は以下のとおり。

define command{
        command_name    check_tcp
        command_line    $USER1$/check_tcp -H $HOSTADDRESS$ -p $ARG1$
        }

設定を変更したらservice nagios reloadを忘れずに。