Nagios

(作成:2013/04)

サービス停止に一早く気付けないのはインフラ屋さんとして失格よね。サーバは立てたら監視しませう。
監視にも色々あるけれど、こちらは主にリアルタイムな死活監視をするもの。

Install on CentOS

サクッと入れましょ。パッケージ便利ね。

# yum install --enablerepo=epel nagios nagios-plugins nagios-plugins-all

nagiosadminパスワードを変更。

# htpasswd /etc/nagios/passwd nagiosadmin
New password: 
Re-type new password: 

取り敢えずはこれだけで動く。デフォルトではローカルマシンに対するちょっとした監視設定がある。
後はまあ、ちょっと設定や動作確認を楽にするための環境作りみたいなことをしておく。

# mkdir /usr/local/nagios_check_scripts
# ln -sf /usr/lib64/nagios/plugins/ /etc/nagios/

Nagiostats + Nacti Template

どっちかってーとNagiosパフォーマンス改善のお供に。Nagios監視の統計情報を収集できるので、ここから設定上の問題点を探ると良い、らしい。
Cacti・View topic – Nagios Statistics Templates

nacti.tar.gz を取得して展開。READMEを読めばインストール方法は簡単。

# scp mrtgstats.cgi (Nagios監視サーバ):/usr/lib/nagios/cgi/
# scp check_nagios.pl (Cacti監視サーバ):/var/www/cacti/scripts/
(Nagios監視サーバ)# chmod 755 /usr/lib/nagios/cgi/mrtgstats.cgi
# chmod 755 /usr/bin/nagios*

nagiostats の権限が無いためにCGIがうまく動作しない事もあるので注意。755ならまあ大体大丈夫。
http://(Nagios監視サーバ)/nagios/cgi-bin/mrtgstats.cgi?type=latency へアクセスして動作確認する。

ブラウザアクセス
ConsoleImport/ExportImport Templates
Import Template from Local File: (展開した全XMLファイル)

するとDevices定義時に Graph Template の項目として以下が利用可能になる。

  • Nagios Statistics – Check Statistics
  • Nagios Statistics – Host Checks
  • Nagios Statistics – Host Problems
  • Nagios Statistics – Latency
  • Nagios Statistics – Service Checks
  • Nagios Statistics – Service Problems

この結果を見ながらNagiosのパフォーマンスを最適化すると良いみたい。
Nagiosのパフォーマンスを最適化する – Nagios 3翻訳プロジェクト Wiki

監視サービスの追加

サーバリソース監視

サーバを監視するうえで最低限必要な監視スクリプトを列挙。やり方は色々だけれど、SNMPで何でも見れるようにするのが便利じゃないかな。個人的にはNagios pluginsがお勧め。このうち以下のスクリプトを貰ってくる。
Nagios plugins

  • check_snmp_load.pl
  • check_snmp_mem.pl
  • check_snmp_process.pl
  • check_snmp_storage.pl
  • check_snmp_win.pl

これを使うには perl-Net-SNMP パッケージが必要なのでインストール。

# yum install --enablerepo=epel perl-Net-SNMP

あとCentOS 6 x86_64などではPerlライブラリが何故か32bit版ディレクトリしか見に行かないので、以下のような感じでリンク貼っておく。これ何だかなぁ……。

# ln -sf /usr/lib64/nagios /usr/lib/

コマンドとしてはこんな感じ。以下はLinuxサーバに対して。

# plugins/check_snmp_load.pl -H 192.168.0.1 -C private -w 80% -c 95%
1 CPU, load 12.0% < 95% : OK
# plugins/check_snmp_mem.pl -H 192.168.0.1 -C private -w 80,70 -c 95,80
Ram : 34%, Swap : 2% : ; OK 
# plugins/check_snmp_process.pl -H 192.168.0.1 -C private -n syslogd -n crond -w 0 -c 0 -t 60
1 process matching crond (> 0)
# plugins/check_snmp_storage.pl -H 192.168.0.1 -C private -m / -r -w 80% -c 95%
/: 22%used(3028MB/13780MB) (<80%) : OK

以下はWindowsサーバに対して。

# plugins/check_snmp_load.pl -H 192.168.0.2 -C private -w 80% -c 95%
1 CPU, load 0.0% < 80% : OK
# plugins/check_snmp_storage.pl -H 192.168.0.2 -C private -m "C:" -w 80% -c 95%
C:\ Label:  Serial Number XXXXXXXX: 56%used(11375MB/20481MB) (<85%) : OK
# plugins/check_snmp_storage.pl -H 192.168.0.2 -C private -m "Physical Memory" -w 80% -c 95%
Physical Memory: 72%used(737MB/1023MB) (<80%) : OK
# /usr/lib/nagios/plugins/check_snmp_win.pl -H 192.168.0.2 -C private -n "DNS Server,DHCP Server"
2 services active (matching "DNS Server,DHCP Server") : OK

んで、これをNagiosに設定する。

#### /etc/nagios/objects/commands.cfg
...
define command{
        command_name    check_snmp_storage_win
        command_line    $USER1$/check_snmp_storage.pl -H $HOSTADDRESS$ -C private -m $ARG1$ -w $ARG2$ -c $ARG3$
}

define command{
        command_name    check_snmp_storage
        command_line    $USER1$/check_snmp_storage.pl -H $HOSTADDRESS$ -C private -m $ARG1$ -r -w $ARG2$ -c $ARG3$
}

define command{
        command_name    check_snmp_load
        command_line    $USER1$/check_snmp_load.pl -H $HOSTADDRESS$ -C private -w $ARG1$ -c $ARG2$
}

define command{
        command_name    check_snmp_mem
        command_line    $USER1$/check_snmp_mem.pl -H $HOSTADDRESS$ -C private -w $ARG1$ -c $ARG2$
}

define command{
        command_name    check_snmp_process
        command_line    $USER1$/check_snmp_process.pl -H $HOSTADDRESS$ -C private -n $ARG1$ -w 0 -c 0 -t 60
}

define command{
        command_name    check_snmpv2_process
        command_line    $USER1$/check_snmp_process.pl -H $HOSTADDRESS$ -C private -2 -n $ARG1$ -w 0 -c 0 -t 60
}

define command{
        command_name    check_snmp_win
        command_line    $USER1$/check_snmp_win.pl -H $HOSTADDRESS$ -C private -n $ARG1$
}
#### /etc/nagios/objects/servers.cfg
...
define service{
        use                     generic-service
        host_name               dc-arak-hp-svr
        service_description     DISK_USAGE_/
        check_command           check_snmp_storage!/!85%!95%
}
...
# /etc/init.d/nagios restart

VMware ESXi監視

check_esxi_hardware.py を使うと良い感じに取得できる。これを使うには pywbem パッケージが必要なのでインストール。
Nagios Exchange – check_esxi_hardware.py

# yum install pywbem

コマンドとしてはこんな感じで実行する。以下はDELLサーバに対して実施した結果。あらかじめESXi上で check というアカウントを作成しておく必要がある。

# /etc/nagios/plugins/check_esxi_hardware.py -H 192.168.0.1 -U check -P (パスワード) -V dell
OK - Server: Dell Inc. PowerEdge RXXX s/n: ******* System BIOS: 2.X.XX 20XX-XX-XX

何か問題があれば、これがWARNINGになったりCRITICALになったりする。
んで、これをNagiosに設定する。

#### /etc/nagios/objects/commands.cfg
...
define command{
        command_name    check_esxi_hardware
        command_line    $USER1$/check_esxi_hardware.py -H $HOSTADDRESS$ -U $ARG1$ -P $ARG2$ -V $ARG3$ $ARG4$
}
#### /etc/nagios/objects/servers.cfg
...
define service {
        use                     generic-service
        host_name               server
        service_description     CHECK_ESXI
        check_command           check_esxi_hardware!check!(パスワード)!dell
}
# /etc/init.d/nagios restart