Nagiosの各プラグインは /usr/local/nagios/libexec/ に置かれます。これらは、実行権限がついており、コマンドライン上で実行することができます。
Nagios自体に設定を入れる前に、コマンドラインでプラグインのオプションや戻り値をよく確認しておきましょう。ほとんどのプラグインは引数無しで実行するか-helpオプション付きで実行すれば簡易なヘルプを表示してくれます。それを頼りに設定すればよいでしょう。
ここではNagios公式のプラグインについて記載していきます。
check_pgsql
PostgreSQLに接続できるかどうかを確認するプラグインです。
[root]# ./check_pgsql -H 127.0.0.1 -d db01 -l user1 -p password OK - database db01 (0 sec.)|time=0.000000s;2.000000;8.000000;0.000000
こんな風に出力されます。
必須のオプションは下記の4つです。
| -H | ホスト名orIPアドレス |
| -d | データベース名 |
| -l | 接続するユーザ名 |
| -p | 接続するパスワード |
Nagiosの commands.cfg に書く際はデータベース名とユーザ名、パスワードを引数に取るように定義すればよいでしょう。
# 'check_telnet' command definition
define command{
command_name check_pgsql
command_line $USER1$/check_pgsql -H $HOSTADDRESS$ -d $ARG1$ -l $ARG2$ -p $ARG3$
}
services.cfg から呼び出す時は、
check_command check_pgsql!db01!user1!password
という風にします。
check_disk
ローカルホストのディスクの空き容量をチェックするためのプラグインです。リモートホストに対しては実行できません。自ホストを監視するために使います。
パーティション / の空きを確認したところです。
[root]# ./check_disk -w 10% -c 5% -p / -u GB DISK OK - free space: / 130 GB (97% inode=99%);| /=3GB;126;133;0;141
LVM以外の場合は -x /dev/sda1 と言う指定も可能。
オプション。
| -w | Warningレベル。容量または%で指定する。 |
| -c | Criticalレベル。容量または%で指定する。 |
| -p | 対象パーティションのマウントポイント。 |
| -u | 表示する単位。MB、GBなど。 |
| -x | 対象パーティションのデバイス名。 |
WarningおよびCriticalの値の指定の仕方。
Exit with WARNING status if less than PERCENT of disk space is free Exit with CRITCAL status if less than PERCENT of disk space is free
空きスペースが引数で指定した値よりも小さかった場合にWarningまたはCriticalになる。つまり「空き容量 ≧ 警告値」であればOK。そうでなければWarningもしくはCriticalになる。
check_ldap
check_ldapプラグインを使ってOpenLDAPの動作をチェックします。
[root]# ./check_ldap -H 127.0.0.1 o=example,c=JP LDAP OK - 0.001 seconds response time|time=0.001149s;;;0.000000
この例ではAnonymous接続が許可されたOpenLDAPサーバ(127.0.0.1)にアクセスしている。オプション「-b」は必須。
ou=を指定する場合はo=とc=よりも先に書かなくてはいけない。例えば -b ou=hoge.example.jp,o=example,c=JP である。逆にして -b o=example,c=JP,ou=hoge.example.jp だとダメでした。
[root]# ./check_ldap -H 127.0.01 -b ou=hoge.example.jp,o=example,c=JP LDAP OK - 0.001 seconds response time|time=0.001070s;;;0.000000 [root]# ./check_ldap -H 127.0.0.1 -b o=example,c=JP,ou=hoge.example.jp Could not search/find objectclasses in o=example,c=JP,ou=hoge.example.jp
check_mysql
MySQLサーバに接続できるかをチェックするプラグインです。
[root]# ./check_mysql -d db01 -H 127.0.0.1 -u user1 -p password Uptime: 95056 Threads: 1 Questions: 2271 Slow queries: 0 Opens: 20 Flush tables: 1 Open tables: 13 Queries per second avg: 0.024
オプションについては見ての通りです。あまり有難くないかもしれん。
helpを眺めると、Master/Slaveのチェックも可能なようです。手元にSlave構成のMySQLが無いので動作は確認しておりませんが。
-S, --check-slave
Check if the slave thread is running properly.
-w, --warning
Exit with WARNING status if slave server is more then
INTEGER seconds behind master
-c, --critical
Exit with CRITICAL status if slave server is more then
INTEGER seconds behind master
check_mysql_query
check_mysqlプラグインではMySQLサーバにコネクション可能かどうかのみを判別するものでした。一方でcheck_mysql_queryプラグインは、実際にMySQLサーバにクエリを投げ、それが正しく届いたかで死活監視するものです。
試しに使ってみます。データベースdb01にテーブルtesttable1がある環境です。
[root]# ./check_mysql_query -H 127.0.0.1 -u user1 -p password -d db01 \ -q "select * from testtable1" QUERY OK: 'select * from testtable1' returned 1.000000
オプション「-q」に続いてSQL文を書きます。ここでは簡単にselectとしました。もちろんMySQLのユーザ権限で割り当てられたものだけが利用できます。かと言ってINSERTやUPDATEクエリを投げるのも妥当じゃ無いかなと思ったりもします。監視ログをMySQL側で取るためにINSERTしてもいいもしれませんが。
存在しないテーブルに対してクエリを投げるとCriticalになります。
[root]# ./check_mysql_query -H 127.0.0.1 -u user1 -p password -d db01 \ -q "select * from testtable2" QUERY CRITICAL: Error with query - Table 'db01.testtable2' doesn't exist
MySQL内のデータが壊れていないかを簡易にチェックするのに有効でしょう。
check_dns
DNSサーバに問合せをして正常に応答があるかを確認するプラグインです。例えば、ローカルのDNSサーバが192.168.1.100で立っているとします。そのサーバに対してwww.yahoo.co.jpの名前解決を依頼します。
[root]# ./check_dns -H www.yahoo.co.jp -s 192.168.1.100 DNS OK: 0.008 seconds response time. www.yahoo.co.jp returns \ 203.216.247.249,124.83.139.191,124.83.147.202,124.83.147.203, 124.83.147.204,124.83.147.205,124.83.167.212,203.216.231.160, 203.216.235.154,203.216.235.201,203.216.243.218,203.216.247.225 |time=0.008289s;;;0.000000
オプションの-Hでクエリを指定し、-sでDNSサーバを指定します。他のcheckプラグインと対象ホストの指定仕方が違いますね。
check_http
HTTPサーバにGETリクエストを投げてその応答で稼動状況を確認するプラグインです。指定しなければ/をGETするようです。
試しに使ってみます。単純にサーバのIPアドレスもしくはホスト名を指定します。
[root]# ./check_http -H 127.0.0.1 HTTP OK HTTP/1.1 200 OK - 308 bytes in 0.000 seconds |time=0.000400s;;;0.000000 size=308B;;;0
もう少し凝った使い方。HTTPSの確認をしたい場合は-Sオプションを足します。ポートはデフォルトで443番を見に行きます。
[root]# ./check_http -H 127.0.0.1 -S HTTP OK HTTP/1.1 200 OK - 1867 bytes in 0.102 seconds |time=0.101645s;;;0.000000 size=1867B;;;0
80と443以外のポートでHTTPサーバを立ててる場合は-p ポート番号を指定。
check_httpプラグインを利用して、SSL証明書の有効期限をチェックすることもできます。オプション -C 日数 を指定します。
[root]# ./check_http -H 127.0.0.1 -C 14 OK - Certificate will expire on 03/18/2008 07:51.
日数は「14日後にその証明書が有効化どうか」を判別するものです。今現在有効な証明書かどうかを確認するには0を指定します。
上記の例だと、2008年3月18日に期限切れを迎える証明書ですので、165日後には有効期限切れになっているハズです。コマンドで調べます。
[root]# ./check_http -H 127.0.0.1 -C 165 WARNING - Certificate expires in 164 day(s) (03/18/2008 07:51).
と言う具合に165日後は有効期限切れだからWARNINGになります。
なお「現在有効でN日後に期限切れ」の場合はWARNING。現時点で期限切れだとCRITICALになります。
[root]# ./check_http -H 192.168.1.1 -C 7 CRITICAL - Certificate expired on 04/01/2007 12:05.
このようにサーバの応答の他に証明書もチェックできたりします。ただしチェックされるのは「有効期限」のみで、ホスト名やオレオレ証明書の確認はできないようです。
Nagiosには他にも有用なプラグインがたくさんあるので、また検証したら書き足していこうと思います。