NagiosをCentOS 5.5にインストール、MySQLのプロセス監視、メール通知設定まで

サーバー監視についていろいろ調査しています。
まずは一番有名どころのNagiosをためしてみました。

Nagiosは、ヤフオクmixiでも使われてらしく実績は十分です。
設定はテキストですが、テンプレートも用意されているのでそれほど難しくはありません。

Nagios以外では、ZABBIXも気になるので、またの機会に調べてみようと思っています。

では、早速CentOS 5.5にNagiosをインストールしていきます。

公式?のインストールガイドはこちら:
http://nagios.sourceforge.net/docs/3_0/quickstart.html

今回はyumを使用してインストールしました。ほぼ以下のサイトを参考にしています:
http://docs.cslabs.clarkson.edu/wiki/Install_Nagios_on_CentOS_5

前提条件

Fedoraのインストールガイドを見ると前提条件としてソフトウェアがリストされています。

yumでインストール

# yum install httpd php gcc glibc glibc-common gd gd-devel

Apache自動起動をセットし、インバウンドの80番ポートを開けます

# chkconfig --levels 345 httpd on
# iptables -I INPUT -p tcp --dport 80 -j ACCEPT
# /etc/init.d/iptables save
# /etc/init.d/iptables restart
リポジトリの追加

公式ガイドでは、make installしていますがyumでインストールしてみました。
Nagiosはデフォルトのリポジトリには含まれてません。rpmforgeをリポジトリ追加
32bit版

# rpm -Uhv http://apt.sw.be/redhat/el5/en/i386/rpmforge/RPMS/rpmforge-release-0.3.6-1.el5.rf.i386.rpm

64bit版

# rpm -Uhv http://apt.sw.be/redhat/el5/en/x86_64/rpmforge/RPMS/rpmforge-release-0.3.6-1.el5.rf.x86_64.rpm
NagiosおよびNagiosプラグインのインストール

yumでインストール

# yum install nagios nagios-plugins nagios-plugins-setuid

Nagios Web管理画面にアクセスするユーザIDとパスワードを作成します。

# htpasswd -c /etc/nagios/htpasswd.users nagiosadmin

Nagiosを起動します。

# /etc/init.d/nagios start
nagios is stopped
Configuration validation failed                            [FAILED]

失敗しました。以下のサイトを見るとSELinuxが有効になっていると起動しないそうです。
http://www.harukari.net/index.php/Nagios%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB
SELinusを無効にして、もう一度

# /etc/init.d/nagios start
nagios is stopped
Starting nagios:                                           [  OK  ]

無事起動

次に、Apacheを再起動しておきます。

# /etc/init.d/httpd restart
インストールの確認

http:///nagiosにアクセスして以下のページが表示されたらインストール成功です。

バージョンは3.2.3がインストールされました。

Nagiosの設定方法

Nagiosの設定の基本は以下のサイトが参考になります。
http://www.marsandares.jp/tools/nagios-config.html

MySQLを監視する

MySQL監視用のプラグイン

インストールされたNagiosプラグインは以下のディレクトリにあります。

ls /usr/lib/nagios/plugins/
check_apt       check_ide_smart     check_ntp       check_ssmtp
check_breeze    check_ifoperstatus  check_ntp_peer  check_swap
check_by_ssh    check_ifstatus      check_ntp_time  check_tcp
check_clamd     check_imap          check_nwstat    check_time
check_cluster   check_ircd          check_oracle    check_udp
check_dhcp      check_jabber        check_overcr    check_ups
check_dig       check_ldap          check_pgsql     check_users
check_disk      check_ldaps         check_ping      check_wave
check_disk_smb  check_load          check_pop       contrib
check_dns       check_log           check_procs     eventhandlers
check_dummy     check_mailq         check_radius    negate
check_file_age  check_mrtg          check_real      plugins.pm
check_flexlm    check_mrtgtraf      check_rpc       urlize
check_fping     check_mysql         check_sensors   utils.pm
check_ftp       check_mysql_query   check_simap     utils.py
check_game      check_nagios        check_smtp      utils.pyc
check_hpjd      check_nntp          check_snmp      utils.sh
check_http      check_nntps         check_spop
check_icmp      check_nt            check_ssh

Nagiosプラグインをインストール後にデフォルトで含まれるMySQL用のプラグインはcheck_mysqlとcheck_mysql_queryです。
check_mysql
プロセス監視
http://nagiosplugins.org/man/check_mysql
check_mysql_query
SQLを実行して確認
http://nagiosplugins.org/man/check_mysql_query

check_mysqlを設定してみる

MySQLの設定はこちらのブログを参考にさせていただきました。
http://d.hatena.ne.jp/kaorumori/20080607/1212863599

MySQLに監視用ユーザを追加

mysql>create database nagios;
mysql>GRANT SELECT ON nagios.* TO nagios@localhost IDENTIFIED BY 'password';

commands.cfg

# vi /etc/nagios/objects/commands.cfg

commands.cfgの最後にcheck_mysqlコマンドを追加

# 'check_mysql' command definition
define command{
        command_name    check_mysql
        command_line    $USER1$/check_mysql -H $HOSTADDRESS$ -u $ARG1$ -p $ARG2$
        }

localhost.cfg

# vi /etc/nagios/objects/localhost.cfg
define service{
        use                             local-service         ; Name of service template to use
        host_name                       localhost
        service_description             MySQL
        check_command                   check_mysql!nagios!password
        }

nagios再起動
設定をチェックして問題無ければNagiosを再起動

# nagios -v /etc/nagios/nagios.cfg 
# /etc/init.d/nagios restart
メール通知設定

メール通知はcontacts.cfgに設定します。

# vi /etc/nagios/objects/contacts.cfg 

emailを実際に通知するメールアドレスに書き換えます。

define contact{
        contact_name                    nagiosadmin             ; Short name of user
        use                             generic-contact         ; Inherit default values from generic-contact template (defined above)
        alias                           Nagios Admin            ; Full name of user

        email                           nagios@localhost        ; <<***** CHANGE THIS TO YOUR EMAIL ADDRESS ******
        }

設定をチェックして問題無ければNagiosを再起動

# nagios -v /etc/nagios/nagios.cfg 
# /etc/init.d/nagios restart
チェック間隔と試行回数の設定について

localhost.cfgに追加したMySQLのservice設定はtemplates.cfgのlocal-serviceの設定を参照します。

define service{
        name                            local-service           ; The name of this service template
        use                             generic-service         ; Inherit default values from the generic-service definition
        max_check_attempts              4                       ; Re-check the service up to 4 times in order to determine its final (hard) state
        normal_check_interval           5                       ; Check the service every 5 minutes under normal conditions
        retry_check_interval            1                       ; Re-check the service every minute until a hard state can be determined
        register                        0                       ; DONT REGISTER THIS DEFINITION - ITS NOT A REAL SERVICE, JUST A TEMPLATE!
        }

normal_check_interval
コマンドの実効間隔、デフォルト 5分ごと
retry_check_interval
コマンドが失敗した後の再試行間隔、デフォルト 1分
max_check_attempts
ここに指定した回数コマンドが失敗した場合通知される、デフォルト 4回

動作確認

NagiosのServicesの画面です。
MySQL稼働時

MySQL停止時

メール通知の確認

通知メールが送信されない場合は以下をチェックしてください。

デフォルトの通知時間帯はworkhours
templates.cfgのlinux-serverの設定を見ると

define host{
        name                            linux-server    ; The name of this host template
        ...
        notification_period            workhours       ; Linux admins hate to be woken up, so we only notify during the day
        ...
}

とあります。検証では24x7に変更して置いた方が良さそうです。

フラッピング検知が有効だとすぐにメールは送信されない
デフォルトはフラッピングの検知flap_detection_enabledが有効になっています。

define host{
        name                            generic-host    ; The name of this host template
        ...
        flap_detection_enabled          1               ; Flap detection is enabled
        ...
}

flap_detection_enabledをメールの送信テストの際は0にして置いた方が良さそうです。

フラッピングとは正常と異常が頻繁に入れ替わることで、それを検知して大量の通知が送信されないようにする機能のようです。
詳しくはこちら:
http://nagios.sourceforge.net/docs/3_0/flapping.html

正しく設定されるとデフォルト設定ではこんなメールが飛びます。