Nagiosの最近のブログ記事

Nagios2インストール(RPM)

| | コメント(3)

■環境
OSはCentOS4.3
apacheがすでにインストールされている。


■インストール前に用意するもの
http://dag.wieers.com/packages/
から、下記のファイルをダウンロードしてくる。

nagios-2.5-1.el4.rf.i386.rpm
nagios-plugins-1.4.1-1.2.el4.rf.i386.rpm
fping-2.4-1.b2.2.el4.rf.i386.rpm
perl-Crypt-DES-2.05-3.2.el4.rf.i386.rpm
perl-Net-SNMP-5.2.0-1.2.el4.rf.noarch.rpm
perl-Socket6-0.19-1.2.el4.rf.i386.rpm

■インストールする順番

# rpm -ivh nagios-2.5-1.el4.rf.i386.rpm
警告: nagios-2.5-1.el4.rf.i386.rpm: V3 DSA signature: NOKEY, key ID 6b8d79e6
Preparing...                ########################################### [100%]
   1:nagios                 ########################################### [100%]

# rpm -ivh fping-2.4-1.b2.2.el4.rf.i386.rpm 警告: fping-2.4-1.b2.2.el4.rf.i386.rpm: V3 DSA signature: NOKEY, key ID 6b8d79e6 Preparing... ########################################### [100%] 1:fping ########################################### [100%]

# rpm -ivh perl-Crypt-DES-2.05-3.2.el4.rf.i386.rpm 警告: perl-Crypt-DES-2.05-3.2.el4.rf.i386.rpm: V3 DSA signature: NOKEY, key ID 6b8d79e6 Preparing... ########################################### [100%] 1:perl-Crypt-DES ########################################### [100%]

# rpm -ivh perl-Socket6-0.19-1.2.el4.rf.i386.rpm 警告: perl-Socket6-0.19-1.2.el4.rf.i386.rpm: V3 DSA signature: NOKEY, key ID 6b8d79e6 Preparing... ########################################### [100%] 1:perl-Socket6 ########################################### [100%]

# rpm -ivh perl-Net-SNMP-5.2.0-1.2.el4.rf.noarch.rpm 警告: perl-Net-SNMP-5.2.0-1.2.el4.rf.noarch.rpm: V3 DSA signature: NOKEY, key ID 6b8d79e6 Preparing... ########################################### [100%] 1:perl-Net-SNMP ########################################### [100%]

# rpm -ivh nagios-plugins-1.4.1-1.2.el4.rf.i386.rpm 警告: nagios-plugins-1.4.1-1.2.el4.rf.i386.rpm: V3 DSA signature: NOKEY, key ID 6b8d79e6 Preparing... ########################################### [100%] 1:nagios-plugins ########################################### [100%]


■とりあえず、動かしてみるには。

/etc/nagiosに移動する
# cd /etc/nagios
# ls
bigger.cfg         command-plugins.cfg  nagios.cfg
cgi.cfg            minimal.cfg          nagios.cfg.rpmsave
checkcommands.cfg  misccommands.cfg     resource.cfg

nagiosの設定ファイルを確認してみる # nagios -v nagios.cfg Reading configuration data... Error: Command 'check-host-alive' has already been defined Error: Could not register command (config file '/etc/nagios/minimal.cfg', starting on line 76) ***> One or more problems was encountered while processing the config files...

これは 'check-host-alive' が、minimal.cfgとcheckcommands.cfgで、2重定義になってしまっているからである。

なので、nagios.cfgにちょっと手を加える。 /etc/nagios/nagios.cfg 37行目
cfg_file=/etc/nagios/checkcommands.cfg
をコメントアウトする
#cfg_file=/etc/nagios/checkcommands.cfg
host-notify-by-emailもminimal.cfgとmisccommands.cfgで2重定義になっているので、 これもnagios.cfgの40行目でコメントアウトしておく。
#cfg_file=/etc/nagios/misccommands.cfg

最終的にこのようにファイルチェックの結果が表示されればOKである。

# nagios -v nagios.cfg

Nagios 2.5 Copyright (c) 1999-2006 Ethan Galstad (http://www.nagios.org) Last Modified: 07-13-2006 License: GPL

Reading configuration data...

Running pre-flight check on configuration data...

Checking services... Checked 5 services. Checking hosts... Checked 1 hosts. Checking host groups... Checked 1 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 8 commands. Checking time periods... Checked 1 time periods. Checking extended host info definitions... Checked 0 extended host info definitions. Checking extended service info definitions... Checked 0 extended service info definitions. 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

■Apacheの認証の設定

RPMでインストールすると、
/etc/httpd/conf.d/nagios.conf
というファイルが一緒にインストールされているので、
これにしたがってApacheのBASIC認証の設定をすればよい。

cgi.cfgをず~っとみていけばわかるが、 nagiosadmin, theboss, jdoe, guest などの名前が登場する。 これらのauthorized_forではじまる行をかたっぱしからコメントアウトする。
authorized_for_system_information=nagiosadmin,theboss,jdoe
authorized_for_configuration_information=nagiosadmin,jdoe
authorized_for_system_commands=nagiosadmin
authorized_for_all_services=nagiosadmin,guest
authorized_for_all_hosts=nagiosadmin,guest
authorized_for_all_service_commands=nagiosadmin
authorized_for_all_host_commands=nagiosadmin
nagiosadminという特権ユーザーと、閲覧のみのguestという 2つのユーザーをつくっておけばよいだろう。 これらのユーザーの認証ファイルを/etc/nagios/htpasswd.usersとして作成する。
# htpasswd -c /etc/nagios/htpasswd.users nagiosadmin
New password:
Re-type new password:
Adding password for user nagiosadmin
# htpasswd /etc/nagios/htpasswd.users guest
New password:
Re-type new password:
Adding password for user guest
■httpdを再起動し、nagiosも起動する。
# /etc/init.d/httpd restart
httpd を停止中: [  OK  ]
httpd を起動中: [  OK  ]
# /etc/init.d/nagios start
Starting network monitor: nagios
#

あとは、http://IPアドレス/nagios/ にアクセスし、
nagiosadminかguestでログインすれば、
nagiosをインストールしたマシンを監視し始めているのを確認することができる。

 

nagiosからスクリプトを発動させる

|

使い方としては、ルーターなどの機器がハングアップしてしまった時に、そのルーターがつながっているリモート遠隔操作できる電源装置にtelnetなどでログインしてリブート操作を行うような場合に使えます。

設定はこんな感じです。 event_handler を使うのがポイントです。
define service {
       use                             generic-service
       service_description             PING
       host_name                       router
       max_check_attempts              1
       normal_check_interval           1
       retry_check_interval            1
       contact_groups                  admins
       check_command                   check_ping!1000.0,60%!1000.0,100%
       event_handler                   REBOOT-ROUTER
}
この設定は1分おきにに"router"にpingを打ち、 反応がない場合や復旧したときのような「状態変化」が起きたときに、 「REBOOT-ROUTER」というスクリプトをCallします。 ■「REBOOT-ROUTER」はどこに定義されているか
event_handler                   REBOOT-ROUTER
の部分ですが、checkcommands.cfg内で定義します。
#
# 'restart-router' command definition
#
define command{
	command_name    REBOOT-ROUTER
	command_line    /usr/lib/nagios/plugins/eventhandlers/reboot-router $SERVICESTATE$ $STATETYPE$ $SERVICEATTEMPT$
}

/usr/lib/nagios/plugins/eventhandlers/reboot-routerというスクリプトを動かしているのはわかるとして、
$SERVICESTATE$
$STATETYPE$
$SERVICEATTEMPT$
という3つの引数はなんでしょうか?

■nagiosの「状態変化」とは何か 実際に監視しているrouterから反応がなくなったときのnagiosのログはこのようになります。
[02-08-2006 10:46:52] HOST ALERT: router;DOWN;SOFT;1;CRITICAL - Plugin timed out after 10 seconds
[02-08-2006 10:47:02] HOST ALERT: router;DOWN;SOFT;2;CRITICAL - Plugin timed out after 10 seconds
[02-08-2006 10:47:12] HOST ALERT: router;DOWN;SOFT;3;CRITICAL - Plugin timed out after 10 seconds
[02-08-2006 10:47:22] HOST ALERT: router;DOWN;SOFT;4;CRITICAL - Plugin timed out after 10 seconds
[02-08-2006 10:47:32] HOST ALERT: router;DOWN;SOFT;5;CRITICAL - Plugin timed out after 10 seconds
[02-08-2006 10:47:42] HOST ALERT: router;DOWN;SOFT;6;CRITICAL - Plugin timed out after 10 seconds
[02-08-2006 10:47:52] HOST ALERT: router;DOWN;SOFT;7;CRITICAL - Plugin timed out after 10 seconds
[02-08-2006 10:48:02] HOST ALERT: router;DOWN;SOFT;8;CRITICAL - Plugin timed out after 10 seconds
[02-08-2006 10:48:12] HOST ALERT: router;DOWN;SOFT;9;CRITICAL - Plugin timed out after 10 seconds
[02-08-2006 10:48:22] HOST ALERT: router;DOWN;HARD;10;CRITICAL - Plugin timed out after 10 seconds
[02-08-2006 10:48:22] SERVICE ALERT: router;PING;CRITICAL;HARD;1;CRITICAL - Plugin timed out after 10 seconds
[02-08-2006 10:48:22] SERVICE EVENT HANDLER: router;PING;CRITICAL;HARD;1;REBOOT-ROUTER
最後から3行目から2行目にかけての
[02-08-2006 10:48:22] HOST ALERT: router;DOWN;HARD;10;CRITICAL - Plugin timed out after 10 seconds
[02-08-2006 10:48:22] SERVICE ALERT: router;PING;CRITICAL;HARD;1;CRITICAL - Plugin timed out after 10 seconds
が「状態変化」です。 「状態変化」がおきると、EVENT HANDLERのREBOOT-ROUTERがCallされます。
[02-08-2006 10:48:22] SERVICE EVENT HANDLER: router;PING;CRITICAL;HARD;1;REBOOT-ROUTER
このとき、 $SERVICESTATE$ に、CRITICAL $STATETYPE$ に、HARD $SERVICEATTEMPT$ に、1 が渡されます。

■スクリプト"REBOOT-ROUTER"ではどうなっているか では、/usr/lib/nagios/plugins/eventhandlers/reboot-routerを見てます。

#!/bin/sh

# # reboot-router $SERVICESTATE$,$STATETYPE$,$SERVICEATTEMPT$ #

# What state is the ROUTER ? case "$1" in OK) ;; WARNING) ;; UNKNOWN) ;; CRITICAL) # $SERVICESTATE$が"CRITICAL"だった場合 case "$2" in SOFT) ;; HARD) # $STATETYPE$が"HARD"だった場合 case "$3" in 1) # $SERVICEATTEMPT$が"1"だった場合 echo -n "hard" /var/log/nagios/Router_Reboot/hoge.sh # このスクリプトが発動する ;; esac ;; esac ;; esac exit 0

このように、
$SERVICESTATE$ に、CRITICAL、かつ、
$STATETYPE$ に、HARD、かつ、
$SERVICEATTEMPT$ に、1
の条件がすべてそろったときにだけ、リモート電源操作スクリプトの
"/var/log/nagios/Router_Reboot/hoge.sh"をCallするようになっています。

■なぜ引数によって条件分岐するようにしているのか これはなぜかというと、"router"が復旧したときのログに関係があります。
[02-08-2006 10:50:02] HOST ALERT: router;UP;HARD;1;PING OK - Packet loss = 0%, RTA = 0.72 ms
[02-08-2006 10:50:10] SERVICE ALERT: router;PING;OK;HARD;1;PING OK - Packet loss = 20%, RTA = 4.21 ms
[02-08-2006 10:50:10] SERVICE EVENT HANDLER: router;PING;OK;HARD;1;REBOOT-ROUTER
復旧したときも「状態変化」なので、EVENT HANDLERでREBOOT-ROUTERがCallされます。 ただし、このときの引数は $SERVICESTATE$ に、OK $STATETYPE$ に、HARD $SERVICEATTEMPT$ に、1 であり、shスクリプトの条件分岐によって、 リモート電源操作スクリプト"/var/log/nagios/Router_Reboot/hoge.sh" はCallしないようになっています。 復旧したときに、また電源をon/offされたらエンドレスになってしまいますので。

 

nagiosの設定

|

■とりあえずRPMでインストールすると・・・
/etc/nagios/ 設定ファイル類
/usr/lib/nagios/ cgi、plugin
/usr/share/nagios/ HTMLのディレクトリ

■pluginは/usr/lib/nagios/plugin/の下に全部置くこと
 RedHat9ではpluginのRPMはインストールに失敗するので、
 tarballを使う方がよい。
 pluginとnagiosのバージョンは別物。

■httpd.confに下記の設定をして、http://servername/nagios/を開く

Alias /nagios/ /usr/share/nagios/

	Options None
	AllowOverride AuthConfig
	Order allow,deny
	Allow from all

ScriptAlias /nagios/cgi-bin/ /usr/lib/nagios/cgi/ Options ExecCGI AllowOverride AuthConfig Order allow,deny Allow from all AuthName "Nagios Access" AuthType Basic AuthUserFile /etc/nagios/htpasswd.users require valid-user

■設定
/etc/nagios の下に設定ファイル類がある

contacts.cfg
hosts.cfg
services.cfg
の順に編集する。

cgi.cfgで、authなどを有効にしたりする。

設定を確認するには
# nagios -v nagios.cfg
とする。 OKであれば、
# /etc/init.d/nagios reload
とする。

■contacts.cfg の例

define contact{
	contact_name	admin	; htpasswdで登録したユーザーと同じにする
	alias	admin	; 日本語euc可能
	service_notification_period	24x7	; サービス異常時の通知時間帯
	host_notification_period	24x7	; ホスト異常時の通知時間帯
	service_notification_options	w,u,c,r	; warning,unknown,critical,recover,none
	host_notification_options	d,u,r	; のステータスの略文字である。
	service_notification_commands	notify-by-email,notify-by-epager
	host_notification_commands	host-notify-by-email,host-notify-by-epager
	email	webmaster@example.local	; 通知先
	pager	hoge@xxx.ne.jp	; 携帯など
        }

define contactgroup{ ; 一応、グループも登録する必要がある contactgroup_name admins alias admins members admin }

■hosts.cfg の例

#
# まずテンプレートを定義する。
# これは[register 0]によりテンプレとみなされる。
#
define host{
	name	generic-host
	notifications_enabled	1	; 通知の有無 0で無効、1で通知
	event_handler_enabled	1	; イベントハンドラの有無
	flap_detection_enabled	1	; 状態反転の検出
	process_perf_data	1	; パフォーマンスデータの統計
	retain_status_information	1	; nagiosの再起動時にも状態を保存する
	retain_nonstatus_information	1	; 状態以外の情報も保存する

check_command check-host-alive; これで1回pingを打つ max_check_attempts 10 ; 10回pingが帰ってこなかったらエラー notification_interval 120 ; 通知間隔 notification_period 24x7 ; 通知時間帯 notification_options d,u,r ; 通知レベル

register 0 ; 0でテンプレとなる }

define host{ use generic-host host_name www.example.local alias www.example.local addresss 192.168.0.5 parents PPPoE_Router ; hostからnagiosをみて1metric前のルータ }

■services.cfg の例

define service{
	name			    generic-service
	active_checks_enabled		1
	passive_checks_enabled		1
	parallelize_check			1
	obsess_over_service			1
	check_freshness				0
	notifications_enabled		1
	event_handler_enabled		1
	flap_detection_enabled		1
	process_perf_data			1
	retain_status_information	1
	retain_nonstatus_information	1

is_volatile 0 check_period 24x7 max_check_attempts 3 normal_check_interval 3 retry_check_interval 1

notification_interval 120 notification_period 24x7 notification_options w,u,c,r

contact_groups admins

register 0 }

# # www.example.local # define service{ use generic-service host_name www.example.local service_description PING check_command check_ping!20.0,20%!50.0,60% }

 

このアーカイブについて

このページには、過去に書かれたブログ記事のうちNagiosカテゴリに属しているものが含まれています。

前のカテゴリはMRTGです。

次のカテゴリはSNMPプロトコルです。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

Nagios: 月別アーカイブ

Powered by Movable Type 4.1