フリーのネットワーク監視ソフト、Nagiosをインストールします。
世の中には有償のネットワーク監視ソフトが多数存在しており、それらの価格は軽く100万を越えるものもたくさん ありますが私個人の一番のオススメ監視ソフトはNagiosです。これに慣れてしまえば他の何百万とするソフトを購入するのはもったいなく思えてきます。オープンソースであり無保証というのが欠点ではありますが、下手の有償ソフトよりもよくできておりNagiosの他にcactiをインストールしておけばほぼ事足りるかと思います。
■Nagios インストール
# yum install nagios nagios-plugins-all # rpm -qa | grep nagios nagios-common-3.4.1-2.el6.i686 nagios-3.4.1-2.el6.i686 その他nagiosプラグイン多数 |
多数のパッケージが一気にインストールされます。Nagiosは設定自体はCLIから行いますが閲覧はブラウザからとなりますので HTTPDの設定を変更することになります。Nagiosのインストールとともに/etc/httpd/conf.d/nagios.confがインス トールされます。内容は以下の通り。
# cat /etc/httpd/conf.d/nagios.conf #ScritpAlias /nagios/cgi-bin/ "/usr/lib/nagios/cgi-bin/" Alias /nagios/cgi-bin/ "/usr/lib/nagios/cgi-bin/" <Directory "/usr/lib/nagios/cgi-bin/"> # SSLRequireSSL Options ExecCGI AllowOverride None Order allow,deny Allow from all # Order deny,allow # Deny from all # Allow from 127.0.0.1 AuthName "Nagios Access" AuthType Basic AuthUserFile /etc/nagios/passwd Require valid-user </Directory> Alias /nagios "/usr/share/nagios/html" <Directory "/usr/share/nagios/html"> # SSLRequireSSL Options None AllowOverride None Order allow,deny Allow from all # Order deny,allow # Deny from all # Allow from 127.0.0.1 |
上記のように管理画面にはApacheのBasic認証がかかりますので、これの登録を行います。
# htpasswd -c /etc/nagios/passwd nagiosadmin New password: ********** Re-type new password: ********** Adding password for user nagiosadmin |
■Nagiosの設定
nagiosには複数の設定ファイルがインストールされ、それぞれのコンフィグファイルが連携して動く仕様となっており少々ややこしいです。設定ファイル一覧を下記にまとめてみました。
/etc/nagios/nagios.cfg | nagiosのメイン設定ファイル。 |
/etc/nagios/objects/commands.cfg | チェックコマンド一覧。実際に実行されるのはnagios plugin。 |
/etc/nagios/objects/contancts.cfg | 異常が発生した際の通知先を指定。 |
/etc/nagios/objects/timeperiods.cfg | 通知の時間帯を指定。 |
/etc/nagios/objects/templates.cfg | 監視対象ホストや監視サービスに関する監視間隔や通知時間などのテンプレート一覧。 |
/etc/nagios/objects/任意ファイル名 | /etc/nagios/nagios.cfg にてファイル名を指定。登録するホスト、サービス一覧 |
上記にも書いたようにNagiosのメイン設定ファイルは/etc/nagios/nagios.cfgです。まず、このファイルを編集して監視対象を登録するファイルを指定します。
# vi /etc/nagios/nagios.cfg # Definitions for monitoring the local (Linux) host #cfg_file=/etc/nagios/objects/localhost.cfg # Definitions for monitoring a Windows machine #cfg_file=/etc/nagios/objects/windows.cfg # Definitions for monitoring a router/switch cfg_file=/etc/nagios/objects/network.cfg # Definitions for monitoring a server cfg_file=/etc/nagios/objects/server.cfg |
私の場合、ネットワーク機器とサーバ機器でファイルを分割しました。ファイル別々が面倒な場合は一つのファイルにまとめることも可能です。それぞれのファイルに監視対象を登録していきますが登録方法はどちらも同じなのでnetwork.cfgのみ下記に示します。
# vi /etc/nagios/objects/network.cfg define host{ use generic-switch host_name switch1 alias フロアスイッチ address 192.168.0.1 } define host{ use generic-switch host_name firewall1 alias ファイアウォール address 192.168.0.2 parents switch1 } define service{ use generic-service host_name switch1 service_description PING check_command check_ping!100.0,20%!500.0,60% } define service{ use generic-service host_name firewall1 service_description PING check_command check_ping!100.0,20%!500.0,60% } |
この中で設定している項目を下記にまとめます。
use | 使用するtemplateを指定する。template一覧は/etc/nagios/objects /template.cfgを参照。generic- switchの他にwindows-server / linux- serverなどがある。明示的に指定しなければtemplateで設定されている値が 適用される。 |
host_name | ホスト名を指定。 |
alias | ホスト名の別名を指定。 |
address | 監視対象のIPアドレスを指定。 |
parents | 監視対象の親ホストを指定。例えばWebサーバを監視するとき、Webサーバ を接続しているスイッチがダウンした場合は当然Webサーバにもアクセスで きなくなる。このときスイッチはWebサーバの親ホストとなり、親ホストが ダウンした際には監視をunknown状態にすることができる。 |
check_command | 実 際に実行するpluginを指定する。plugin一覧はcommand.cfgを参照。 check_ping!100.0,20%!500.0,60%は!で引数を区切っており一つ目の引数 は応答が100ms以上が20%だと警告2つ目の引数は応答が500ms以上が60% でクリティカルという意味です。 |
上記で指定しているgeneric-switchのtemplate.cfgの中身は以下のようになっています。generic-serviceについてもほぼ同様な意味となり明示的に指定しない場合はここの設定されている値が適用されます。
# cat templates.cfg ############################################################################### ############################################################################### # # HOST TEMPLATES # ############################################################################### ############################################################################### # Define a template for switches that we can reuse define host{ name generic-switch use generic-host check_period 24x7 check_interval 5 retry_interval 1 max_check_attempts 10 check_command check-host-alive notification_period 24x7 notification_interval 30 notification_options d,r contact_groups admins statusmap_image switch.png register 0 } |
各項目の意味は次のようになります。
check_period |
24時間365日監視をする。 |
check_interval |
5分間隔で監視を実行する。 |
retry_interval |
pingに応答しなかった際に1分後にリトライする。 |
max_check_attempts |
リトライを最大10回繰り返す |
check_command |
実際に実行するプラグインを指定する。 |
notification_period | 通知を行う時間帯を指定する。24×7は常に通知する。 |
notification_interval |
30分毎に再通知を行う。0を指定すると再通知は行わない。 |
notification_options |
どの状態の際に通知を行うか指定する。ステータスは以下の通り。 d → down r → recovery u → unreachable w → warning c → critical |
contact_groups | 通知する先を指定する。これは/etc/nagios/objects/contacts.cfgで設定する。 |
generic-serviceについてもほぼ同様な意味なのでここでは割愛します。
■通知先の設定
実際に異常を検知した際の通知先を変更しておきます。
# vi /etc/nagios/objects/contacts.cfg define contact{ contact_name nagiosadmin use generic-contact alias Nagios Admin email xx@yy.com } |
とりあえずここまでの設定でnagiosは動きますが、起動前にコンフィグファイルにエラーがないかチェックを行うことがで きます。
# nagios -v /etc/nagios/nagios.cfg Nagios Core 3.4.1 Copyright (c) 2009-2011 Nagios Core Development Team and Community Contributors Copyright (c) 1999-2009 Ethan Galstad Last Modified: 05-11-2012 License: GPL Website: http://www.nagios.org Reading configuration data... Read main config file okay... Processing object config file '/etc/nagios/objects/commands.cfg'... Processing object config file '/etc/nagios/objects/contacts.cfg'... Processing object config file '/etc/nagios/objects/timeperiods.cfg'... Processing object config file '/etc/nagios/objects/templates.cfg'... Processing object config file '/etc/nagios/objects/network.cfg'... Processing object config file '/etc/nagios/objects/server.cfg'... Read object config files okay... Running pre-flight check on configuration data... Checking services... Checked 6 services. Checking hosts... Checked 4 hosts. Checking host groups... Checked 0 host groups. Checking service groups... Checked 0 service groups. Checking contacts... Checked 1 contacts. Checking contact groups... Checked 1 contact groups. Checking service escalations... Checked 0 service escalations. Checking service dependencies... Checked 0 service dependencies. Checking host escalations... Checked 0 host escalations. Checking host dependencies... Checked 0 host dependencies. Checking commands... Checked 25 commands. Checking time periods... Checked 5 time periods. Checking for circular paths between hosts... Checking for circular host and service dependencies... Checking global event handlers... Checking obsessive compulsive processor commands... Checking misc settings... Total Warnings: 0 Total Errors: 0 Things look okay - No serious problems were detected during the pre-flight check |
上記のようにエラーが何もでなければ以下のコマンドで起動します。
# /etc/rc.d/init.d/nagios start |
Webからアクセスして冒頭で登録したID/PASSを入力すると以下の画面が見れます。
■監視コマンドの設定
実際に監視をする際にはpingのみなんてことはなく、各サーバで動いているサービス各々に対して行うことになり ます。普通に考えてHTTP / HTTPS / SMTP / POP3 / DNSなどはざらに存在しているでしょう。これらを監視するには少しだけ設定ファイルを修正する必要がありますのでそれらを紹介します。
■DNSサービス
DNSサービスのチェックには以下のファイルにそれぞれ内容を追記します。
# vi /etc/nagios/objects/commands.cfg # 'check_dig' command definition define command{ command_name check_dig command_line $USER1$/check_dig -H $HOSTADDRESS$ -l $ARG1$ } # vi /etc/nagios/objects/server.cfg define service{ use generic-service host_name dns.xxyy.jp service_description DNS check_command check_dig!www.yahoo.co.jp } |
上記ではwww.yahoo.co.jpをdigコマンドで定期的にチェックを行うという意味になります。どのURLをチェック対象にするのかは任意に決めることができます。
■HTTPSサービス
HTTPは標準でcommands.cfgに記載されていますが、HTTPSは記載がないので手動で追記する必要 があります。
# vi /etc/nagios/objects/commands.cfg # 'check_https' command definition define command{ command_name check_https command_line $USER1$/check_http --ssl -I $HOSTADDRESS$ -u $ARG1$ } # vi /etc/nagios/objects/server.cfg define service{ use generic-service host_name ssl.xxyy.jp service_description DNS check_command check_https!/ssl/ } |
check_https!の後ろの部分にURLを記載します。トップURLからhttpsが表示される場合はこれは不要です。
■NTPサービス
# vi /etc/nagios/objects/commands.cfg # 'check_ntp' command definition define command{ command_name check_ntp command_line $USER1$/check_ntp -H $ARG1$ -w $ARG2$ -c $ARG3$ } # vi /etc/nagios/objects/server.cfg define service{ use generic-service host_name ntp.xxyy.jp service_description NTP check_command check_ntp!xx.yy.xx.yy!5!10 } |
xx.yy.xx.yyに実際に同期するNTPサーバのIPアドレスを記載します。!の後の5と10に関して、NTPサーバと5秒ずれればwarning、10秒ずれれば異常とみなす、という意味です。その他メール関連のSMTP / POP3 / IMAPなどはcommands.cfgを触らなくてもそのまま使用できます。他にもnagios pluginは多数用意されており、私自身、ここで上げたプラグインぐらいしか使ったことがありません。
プラグイン一覧は下記の通りです。
# ls -al /usr/lib/nagios/plugins/ 合計 2228 drwxrwxr-x 3 root root 4096 11月 23 03:49 2012 . drwxr-xr-x 4 root root 4096 11月 22 15:20 2012 .. -rwxr-xr-x 1 root root 2251 8月 17 22:42 2012 check_breeze -rwxr-xr-x 1 root root 53164 8月 17 22:42 2012 check_by_ssh lrwxrwxrwx 1 root root 9 11月 22 16:33 2012 check_clamd -> check_tcp -rwxr-xr-x 1 root root 37632 8月 17 22:42 2012 check_cluster -rwsr-x--- 1 root nagios 52148 8月 17 22:42 2012 check_dhcp -rwxr-xr-x 1 root root 47820 8月 17 22:42 2012 check_dig -rwxr-xr-x 1 root root 60172 8月 17 22:42 2012 check_disk -rwxr-xr-x 1 root root 9145 8月 17 22:42 2012 check_disk_smb -rwxr-xr-x 1 root root 52272 8月 17 22:42 2012 check_dns -rwxr-xr-x 1 root root 30256 8月 17 22:42 2012 check_dummy -rwxr-xr-x 1 root root 3053 8月 17 22:42 2012 check_file_age -rwxr-xr-x 1 root root 6315 8月 17 22:42 2012 check_flexlm -rwsr-x--- 1 root nagios 51012 8月 17 22:42 2012 check_fping lrwxrwxrwx 1 root root 9 11月 22 16:33 2012 check_ftp -> check_tcp -rwxr-xr-x 1 root root 41752 8月 17 22:42 2012 check_game -rwxr-xr-x 1 root root 47556 8月 17 22:42 2012 check_hpjd -rwxr-xr-x 1 root root 115412 8月 17 22:42 2012 check_http -rwsr-x--- 1 root nagios 59060 8月 17 22:42 2012 check_icmp -rwsr-x--- 1 root nagios 40220 8月 17 22:42 2012 check_ide_smart lrwxrwxrwx 1 root root 9 11月 22 16:33 2012 check_imap -> check_tcp -rwxr-xr-x 1 root root 6887 8月 17 22:42 2012 check_ircd lrwxrwxrwx 1 root root 9 11月 22 16:33 2012 check_jabber -> check_tcp -rwxr-xr-x 1 root root 48536 8月 17 22:42 2012 check_ldap lrwxrwxrwx 1 root root 10 11月 22 16:33 2012 check_ldaps -> check_ldap -rwxr-xr-x 1 root root 41584 8月 17 22:42 2012 check_load -rwxr-xr-x 1 root root 6020 8月 17 22:42 2012 check_log -rwxr-xr-x 1 root root 20284 8月 17 22:42 2012 check_mailq -rwxr-xr-x 1 root root 41400 8月 17 22:42 2012 check_mrtg -rwxr-xr-x 1 root root 40016 8月 17 22:42 2012 check_mrtgtraf -rwxr-xr-x 1 root root 55644 8月 17 22:42 2012 check_mysql -rwxr-xr-x 1 root root 53616 8月 17 22:42 2012 check_mysql_query -rwxr-xr-x 1 root root 41908 8月 17 22:42 2012 check_nagios lrwxrwxrwx 1 root root 9 11月 22 16:33 2012 check_nntp -> check_tcp lrwxrwxrwx 1 root root 9 11月 22 16:33 2012 check_nntps -> check_tcp -rwxr-xr-x 1 root root 58736 8月 17 22:42 2012 check_nt -rwxr-xr-x 1 root root 53584 8月 17 22:42 2012 check_ntp -rwxr-xr-x 1 root root 14281 8月 17 22:42 2012 check_ntp.pl -rwxr-xr-x 1 root root 52520 8月 17 22:42 2012 check_ntp_peer -rwxr-xr-x 1 root root 48816 8月 17 22:42 2012 check_ntp_time -rwxr-xr-x 1 root root 68220 8月 17 22:42 2012 check_nwstat -rwxr-xr-x 1 root root 8324 8月 17 22:42 2012 check_oracle -rwxr-xr-x 1 root root 49108 8月 17 22:42 2012 check_overcr -rwxr-xr-x 1 root root 50680 8月 17 22:42 2012 check_pgsql -rwxr-xr-x 1 root root 55164 8月 17 22:42 2012 check_ping lrwxrwxrwx 1 root root 9 11月 22 16:33 2012 check_pop -> check_tcp -rwxr-xr-x 1 root root 57332 8月 17 22:42 2012 check_procs -rwxr-xr-x 1 root root 45864 8月 17 22:42 2012 check_real -rwxr-xr-x 1 root root 9581 8月 17 22:42 2012 check_rpc -rwxr-xr-x 1 root root 1412 8月 17 22:42 2012 check_sensors lrwxrwxrwx 1 root root 9 11月 22 16:33 2012 check_simap -> check_tcp -rwxr-xr-x 1 root root 75380 8月 17 22:42 2012 check_smtp -rwxr-xr-x 1 root root 92428 8月 17 22:42 2012 check_snmp lrwxrwxrwx 1 root root 9 11月 22 16:33 2012 check_spop -> check_tcp -rwxr-xr-x 1 root root 43004 8月 17 22:42 2012 check_ssh lrwxrwxrwx 1 root root 9 11月 22 16:33 2012 check_ssmtp -> check_tcp -rwxr-xr-x 1 root root 43304 8月 17 22:42 2012 check_swap -rwxr-xr-x 1 root root 59752 8月 17 22:42 2012 check_tcp -rwxr-xr-x 1 root root 44664 8月 17 22:42 2012 check_time lrwxrwxrwx 1 root root 9 11月 22 16:33 2012 check_udp -> check_tcp -rwxr-xr-x 1 root root 51464 8月 17 22:42 2012 check_ups -rwxr-xr-x 1 root root 35960 8月 17 22:42 2012 check_users -rwxr-xr-x 1 root root 2936 8月 17 22:42 2012 check_wave drwxr-xr-x 2 root root 4096 7月 2 06:40 2012 eventhandlers -rwxr-xr-x 1 root root 39172 8月 17 22:42 2012 negate -rwxr-xr-x 1 root root 35776 8月 17 22:42 2012 urlize -rw-r--r-- 1 root root 2091 8月 17 22:42 2012 utils.pm -rwxr-xr-x 1 root root 2728 8月 17 22:42 2012 utils.sh |