ksaitoの日記

日々試したことの覚え書き

サーバの監視

移転しました。

自動的にリダイレクトします。

DNSサーバの監視

/etc/nagios-plugins/config/dns.cfgにDNSサーバを監視するコマンドが定義されています。

# 'check_dns' command definition
define command{
        command_name    check_dns
        command_line    /usr/lib/nagios/plugins/check_dns -H www.google.com -s $HOSTADDRESS$
}

# 'check_dig' command definition
define command{
        command_name    check_dig
        command_line    /usr/lib/nagios/plugins/check_dig -H $HOSTNAME$ -l $ARG1$
}

command_lineを参考に手動で確認します。

$ /usr/lib/nagios/plugins/check_dig -H dnsserver -l example.com
DNS OK - 0.072 seconds response time (example.com.  147169 IN A 208.77.188.166)|time=0.072039s;;;0.000000
$

下記のように/etc/nagios2/conf.d/services_nagios2.cfgにサービスを定義します。

define service {
        hostgroup_name                  dns-servers
        service_description             DNS example.com
        check_command                   check_dig!example.com
        use                             generic-service
        notification_interval           0 ; set > 0 if you want to be renotified
}

続いて監視するサーバをhostgroupに追加します。

define hostgroup {
        hostgroup_name  dns-servers
                alias           DNS servers
                members         dns
        }

最後に設定を再読み込みすれば、監視が始まります。

$ sudo /etc/init.d/nagios2 force-reload
Reloading nagios2 monitoring daemon configuration files: nagios2.
$

IMAPサーバの監視

/etc/nagios-plugins/config/mail.cfgに各種メールサーバを監視するコマンドが定義されています。
pop/imap/smtpの監視だけでなくメールがキューにどれだけ滞留しているかも監視できるようです。
IMAPは、手動で下記のように確認できます。

$ /usr/lib/nagios/plugins/check_imap -H 192.168.0.10
IMAP OK - 0.018 second response time on port 143 [* OK [CAPABILITY IMAP4rev1 UIDPLUS CHILDREN NAMESPACE THREAD=ORDEREDSUBJECT THREAD=REFERENCES SORT QUOTA IDLE ACL ACL2=UNION STARTTLS] Courier-IMAP ready. Copyright 1998-2005 Double Precision, Inc.  See COPYING for distribution information.]|time=0.017523s;0.000000;0.000000;0.000000;10.000000
$ /usr/lib/nagios/plugins/check_imap -p 993 -H 192.168.0.10 -S
IMAP OK - 0.325 second response time on port 993 [* OK [CAPABILITY IMAP4rev1 UIDPLUS CHILDREN NAMESPACE THREAD=ORDEREDSUBJECT THREAD=REFERENCES SORT QUOTA IDLE AUTH=PLAIN ACL ACL2=UNION] Courier-IMAP ready. Copyright 1998-2005 Double Precision, Inc.  See COPYING for distribution information.]|time=0.325370s;0.000000;0.000000;0.000000;10.000000
$

メールキューの監視は、下記のように確認できます。
パーミッションの関係でnagiosDebian-eximグループに追加する必要があります。
100件以上キューにたまっていたら警告、300件以上たまっていたらクリティカルを報告します。

$ sudo -u nagios /usr/lib/nagios/plugins/check_mailq -w 100 -c 300 -M exim
exim: permission denied
CRITICAL: Error code 1 returned from /usr/bin/mailq
$ sudo adduser nagios Debian-exim
Adding user `nagios' to group `Debian-exim' ...
終了。
$ sudo -u nagios /usr/lib/nagios/plugins/check_mailq -w 100 -c 300 -M exim
OK: mailq (0) is below threshold (100/300)|unsent=0;100;300;0
$

どちらも監視対象に組み込みます。
/etc/nagios2/conf.d/services_nagios2.cfgに下記を設定します。

define service {
        hostgroup_name                  imap-servers
        service_description             IMAP
        check_command                   check_imap
        use                             generic-service
        notification_interval           0 ; set > 0 if you want to be renotified
}

define service {
        hostgroup_name                  simap-servers
        service_description             SIMAP
        check_command                   check_simap
        use                             generic-service
        notification_interval           0 ; set > 0 if you want to be renotified
}

define service {
        hostgroup_name                  exim-servers
        service_description             exim mail queue
        check_command                   check_mailq_exim!100!300
        use                             generic-service
        notification_interval           0 ; set > 0 if you want to be renotified
}

/etc/nagios2/conf.d/hostgroups_nagios2.cfgサーバを設定します。

# A list of your imap servers
define hostgroup {
        hostgroup_name  imap-servers
                alias           IMAP servers
                members         localhost
        }

# A list of your simap servers
define hostgroup {
        hostgroup_name  simap-servers
                alias           SIMAP servers
                members         localhost
        }

# A list of your exim servers
define hostgroup {
        hostgroup_name  exim-servers
                alias           EXIM servers
                members         localhost
        }

DNSのときと同様、設定を再読み込みすれば監視を始めます。

mysqlサーバの監視

mysqlサーバの監視は、mysqlサーバへの接続と個別のデータベースを監視することができます。
ネットワークからの接続や監視のために接続するユーザのパスワードをファイルに書く必要があるので注意が必要です。

準備

監視に必要なユーザを登録します。
mysqlサーバへの接続を監視するだけであれば、mysqlに下記のパスワードなし&権限なしユーザを登録するとパスワードをファイルに書かなくて済みます。
このユーザで接続してもデータベースには接続できません。

$ mysql -u root -p mysql
Enter password:
mysql> grant usage on *.* to nagios@localhost;
Query OK, 0 rows affected (0.03 sec)

mysql> quit
Bye
$
手動確認

手動で確認します

$ sudo -u nagios /usr/lib/nagios/plugins/check_mysql -H localhost -u nagios
Uptime: 4462  Threads: 1  Questions: 216  Slow queries: 0  Opens: 135  Flush tables: 1  Open tables: 17  Queries per second avg: 0.048
$
nagiosへの組み込み

/etc/nagios2/conf.d/services_nagios2.cfgに下記を設定します。

define service {
        hostgroup_name                  mysql-servers
        service_description             mysql
        check_command                   check_mysql
        use                             generic-service
        notification_interval           0 ; set > 0 if you want to be renotified
}

/etc/nagios2/conf.d/hostgroups_nagios2.cfgサーバを設定します。

define hostgroup {
        hostgroup_name  mysql-servers
                alias           mysql servers
                members         localhost
        }

DNSのときと同様、設定を再読み込みすれば監視を始めます。

実際の運用では、check_mysql_queryを使っての監視が必要になるでしょう。
手動で実行すると下記のようになります。

$  /usr/lib/nagios/plugins/check_mysql_query -u root -p pass -d mysql -q "select count(*) from user"
QUERY OK: 'select count(*) from user' returned 5.000000
$

check_mysql_queryは、デフォルトでコマンドが定義されていないので/etc/nagios-plugins/config/mysql.cfgを参考にコマンドを定義して、サービス、ホストグループを定義します。
パスワードをファイルに書き込む必要があるので確認するデータベースユーザの権限を最小限に絞ったうえでパスワードを書き込むファイルのパーミッションもファイルオーナ以外の権限をすべて外す必要があります。