トップ 一覧 検索 ヘルプ RSS ログイン

Nagiosの変更点

  • 追加された行はこのように表示されます。
  • 削除された行はこのように表示されます。
!!!監視ソフトNagiosをインストールする。

!!今回の目標
1台で各ネットワーク上のサーバを監視したい。つまり,監視側PCには,2枚のLANカードを装着し,各IPアドレスを付与。
そして,2つのネットワークとサーバの死活確認を行う。

!!実験内容
3台のPCを用意。(うち,1台は,Nagiosをインストール)
監視される2台のPCは,各々別IP,別ネットワークとします。
監視側PC(CentOS5,Nagiosインストール)

*Nagiosとは
**ネットワークに接続された機器を定期的にチェックし,障害発生に決められた手段で管理者に通知します(メール)。
**加えて,Webから障害の状況や監視対象の状態変化が確認できます。

**特徴
**監視時刻のスケジューリングが可能(決められた時間しか監視しない)
**監視項目には,HTTP,FTP,POP3,SMTP等デフォルトで用意されています。

**Nagiosホームページ
**http://www.nagios.org/

!!実験結果
 
*例:Pingによる死活確認
**デフォルト仕様上,5分間隔で監視,一度,状況が変化すると,1分間隔で設定数の再試行を行う。そのあと,改善されないと管理者宛へメール(デフォルト)。
**Pingは,RTAが100ms以上,500ms未満,あるいは,20%以上60%未満のパケットロスでWarningを表示し,それ以上の時は,Critical(赤色)に変化する。
**よって,即応性は,乏しいといえる。
**(/usr/local/nagios/etc/localhost.cfgのしきい値を厳格にすれば,もう少し即応性が高まる)

**ブラウザ側は,90秒毎にアップデートされる。
**(/usr/local/nagios/etc/cgi.cfgの設定値を変えれば、10秒でも可能)

**nagios.cfgのexternal command check intervalの値を1sにすれば,1秒間隔で設定可能かも。
**現在では,2分程度の遅れで監視されるPCの死活確認ができます。
 
 
!!インストール資料(OSは,CentOS5を使用。)
!(0)ユーザおよびグループの作成
*Nagiosは,デーモンとして稼動します。ユーザ権限で稼動させる為,専用のユーザとインストール先ディレクトリを作成します。
*WebサーバからNagiosに対してコマンドを発行してNagiosを操作することになる為,
*WebサーバのユーザをNagiosのコマンドを処理する専用のグループのメンバーに設定します。
*httpdユーザを新しく作成したnagcmdメンバーに加えます。

	# /usr/sbin/groupadd nagios
	# /usr/sbin/useradd -d /usr/local/nagios -g nagios -m nagios
	# /usr/sbin/groupadd nagcmd
	# /usr/sbin/usermod -G nagcmd httpd
	# /usr/sbin/usermod -G nagcmd nagios

!(1)gccのインストール(後で必要となる為)
*# yum -y install gcc

!(2)Nagiosは,PNG,JPEGライブラリ等必要な為,各種インストール。

*PNGライブラリは、http://www.libpng.org/pub/pngより取得(libpng-1.2.20.tar.gz)。

	$ ./configure --prefix=/usr/local
	$ cd 
	$ make
	$ su
	# make install

*JPEGライブラリは、http://www.ijg.orgより取得(jpegsrc.v6b.tar.gz)。

	$ tar zvxf jpegsrc.v6b.tar.gz
	$ cd 
	$ ./configure --pregix=/usr/local --enable-shared --enable-static
	$ make 
	$ su
	# make install

*エラーがでたので,/usr/local/man/man1/cjpec.1を作成した。

!(3)GDライブラリのインストール。

*GDライブラリは、画像を操作するためのライブラリ群。
*一般に、GDライブラリ本体と、perlモジュールとしてのGD.pmをひとまとめにして言うことが多い。
*ここで必要なGDライブラリは、1.6.3以上です。
*http://www.boutell.com/だったが,http://www.libgd.org/Main_Pageに変更。

*wgetでファイルをダウンロード

*wget http://www.boutell.com/gd/http/gd-2.0.32.tar.gzからwget http://www.libgd.org/releases/gd-2.0.35.tar.gzへ変更。
	$ wget http://www.libgd.org/releases/gd-2.0.35.tar.gz

*ファイルを展開します。
	$ tar xvfz gd-2.0.32.tar.gz

*展開したディレクトリに入ります。
	$ cd gd-2.0.32

*make の準備をします。
	$ ./configure --with-png=/usr/local/lib --with-jpeg=/usr/local/bin --prefix=/usr/local
	$ make
	$ make test
	$ su
	# make install

!(4)Nagiosをインストール
*Nagiosがrpmインストールされていないかどうか確認
	# rpm qa|grep nagios
*(Nagiosからのwgetは,省略)
	$ tar xvzf nagios-2.9.tar.gzで展開
	$ cd nagios-2.9
	$ ./configure --prefix=/usr/local/nagios --with-command-group=nagcmd --with-gd-lib=/usr/local/lib
	$ make all
	# make install
	# make install-init
	# make install-commandmode
	# make install-config

!(5)Nagios Plugin Developmentのインストール
*ダウンロードしたファイルは,nagios-plugins-1.4.9.tar.gzでした。
	$ ./configure --prefix=/usr/local/nagios --with-cgiurl=/usr/local/nagios/cgi-bin
	$ make
	# make install

!(6)NagiosのWebインターフェースのための設定を行う。
*http.conf(/etc/httpd/conf/http.conf)に下記の内容を追記(CGIが動作するように設定を行う)。

	ScriptAlias /nagios/cgi-bin/ /usr/local/nagios/sbin/
	<Directory "/usr/local/nagios/sbin/">
	AllowOverride AuthConfig
	Options ExecCGI
	Order allow,denyvi /
	Allow from all
	</Directory>
	
	Alias /nagios/ /usr/local/nagios/share/
	<Directory "/usr/local/nagios/share/">
	AllowOverride AuthConfig
	Options None
	Order allow,deny
	Allow from all
	</Directory>

!(7)管理画面用ユーザおよびパスワードの作成
*WebインターフェースにBASIC認証を使います。
*/usr/local/nagios/share/と/usr/local/nagios/sbin/ディレクトリに.htaccessを作成する。
*.htaccessの設定(chmod 604で設定)
	AuthName "Nagios Access"
	AuthType Basic
	AuthUserFile /usr/local/nagios/etc/htpasswd.users
	require valid-user

*.htaccessの「AuthUserFile」で指定した「/usr/local/nagios/etc/htpasswd.users」にhtpasswdコマンドを利用してユーザを追加します。
*今回は、「nagios」というユーザを追加します。
*(http://www.shtml.jp/htaccess/basic.htmlで説明がありますので、そちらを見たほうが早い)

*htpasswdでWebインターフェース用アカウント登録
	# su nagios
	$ htpasswd -c /usr/local/nagios/etc/htpasswd.users nagios
	New password:
	Re-type new password:
	Adding password for user nagios

!(8)Nagios基本動作設定
*設定するファイル群
**メイン設定ファイル:nagios.cfg
**CGI設定ファイル:cgi.cfg
**リソース設定ファイル:resource.cfg
**監視設定ファイル:localhost.cfg

*インストールされたサンプル設定をコピーして使用します。
	# su nagios
	$ cd /usr/local/nagios/etc
	$ cd nagios.cfg-sample nagios.cfg
	$ cd cgi.cfg-sample cgi.cfg
	$ cd resource.cfg-sample resource.cfg

*後,localhost.cfgとcommands.cfgをコピー

*nagios.cfgの修正箇所
	37	#cfg_file=/usr/local/nagios/etc/checkcommands.cfg ←これはなかった。
	40	#cfg_file=/usr/local/nagios/etc/misccommands.cfg ←これはなかった。
	131	check_external_commands=1

*cgi.cfgの修正箇所
	116	authorized_for_system_information=nagios
	128	authorized_for_configuretion_information=nagios
	141	authorized_for_system_commands=nagios
	154	authorized_for_all_services=nagios
	155	authorized_for_all_hosts=nagios
	168	authorized_for_all_service_commands=nagios
	169	authorized_for_all_host_commands=nagios

*Nagiosデーモンの状態をWebインターフェースから把握する設定(cgi.cfg)
	65	nagios_check_command=/usr/local/nagios/libexec/check_nagios /usr/local/nagios/var/status.dat 5 '/usr/local/nagios/bin/nagios'

*リソース設定ファイル(resource.cfg)
	特に無し

*設定の整合性チェックとNagiosの起動
	設定ファイルのチェックは、nagiosコマンドに-vの引数をつけてnagios.cfgを指定します。
	
	# /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg
	
*上記コマンドを行うと,下の表示がされれば,OK。エラーが出た場合には,設定内容をチェックすること。
	
	Total Warnings: 0
	Total Errors: 0
		
	Things look okay -No serious problems were detected during the pre-flight check

*後,各*.cfgの属性(664)に設定しておくこと。

!(9)Nagiosの起動
	$ su -
	# /etc/init.d/nagios start
	 
!(10)Nagiosを自動起動にする
	# cd /etc/init.d/
	# chmod 755 nagios
	# /sbin/chkconfig --add nagios
	# /sbin/chkconfig --list nagios
	# /sbin/chkconfig --level 35 nagios on
	# /sbin/chkconfig --list nagios
	
!(11)監視対象PCを追加する。
*/usr/local/nagios/etc/localhost.cfgに監視対象ホストを追加する(以下長いですが,ご勘弁を)。
	
	
	###############################################################################
	# LOCALHOST.CFG - SAMPLE OBJECT CONFIG FILE FOR MONITORING THIS MACHINE
	#
	# Last Modified: 11-27-2006
	#
	# NOTE: This config file is intended to servce as an *extremely* simple 
	#       example of how you can create your object configuration file(s).
	#
	###############################################################################
	
	
	
	###############################################################################
	###############################################################################
	#
	#TIME PERIODS
	#
	###############################################################################
	###############################################################################
	
	# This defines a timeperiod where all times are valid for checks, 
	# notifications, etc.  The classic "24x7" support nightmare. :-)
	
	define timeperiod{
 		timeperiod_name 24x7
   		alias           24 Hours A Day, 7 Days A Week
  		sunday          00:00-24:00
   		monday          00:00-24:00
    		tuesday         00:00-24:00
     		wednesday       00:00-24:00
   		thursday        00:00-24:00
        	friday          00:00-24:00
        	saturday        00:00-24:00
        	}
	
	
	# 'workhours' timeperiod definition
	define timeperiod{
		timeperiod_name	workhours
		alias		"Normal" Working Hours
		monday		09:00-17:00
		tuesday		09:00-17:00
		wednesday	09:00-17:00
		thursday	09:00-17:00
		friday		09:00-17:00
		}
	
	
	# 'nonworkhours' timeperiod definition
	define timeperiod{
		timeperiod_name	nonworkhours
		alias		Non-Work Hours
		sunday		00:00-24:00
		monday		00:00-09:00,17:00-24:00
		tuesday		00:00-09:00,17:00-24:00
		wednesday	00:00-09:00,17:00-24:00
		thursday	00:00-09:00,17:00-24:00
		friday		00:00-09:00,17:00-24:00
		saturday	00:00-24:00
		}
	
	
	# 'none' timeperiod definition
	define timeperiod{
		timeperiod_name	none
		alias		No Time Is A Good Time
		}
		
	
		
	###############################################################################
	###############################################################################
	#
	# COMMANDS
	#
	###############################################################################
	###############################################################################
	
	# NOTE: Sample command definitions can now be found in the sample commands.cfg 
	#       file
		
	
		
		
	###############################################################################
	###############################################################################
	#
	# CONTACTS
	#
	###############################################################################
	###############################################################################
	
	# In this simple config file, a single contact will receive all alerts.
	# This assumes that you have an account (or email alias) called
	# "nagios-admin" on the local host.
	
	define contact{
        	contact_name                    nagios-admin
     		alias                           Nagios Admin
        	service_notification_period     24x7
        	host_notification_period        24x7
        	service_notification_options    w,u,c,r
        	host_notification_options       d,r
        	service_notification_commands   notify-by-email
        	host_notification_commands      host-notify-by-email
        	email                           nagios-admin@localhost
        	}
		
		
		
	###############################################################################
	###############################################################################
	#
	# CONTACT GROUPS
	#
	###############################################################################
	###############################################################################
		
	# We only have one contact in this simple configuration file, so there is
	# no need to create more than one contact group.
		
	define contactgroup{
        	contactgroup_name       admins
        	alias                   Nagios Administrators
        	members                 nagios-admin
        	}
		
		
		
	###############################################################################
	###############################################################################
	#
	# HOSTS
	#
	###############################################################################
	###############################################################################
	
	# Generic host definition template - This is NOT a real host, just a template!
	
	define host{
        	name                            generic-host    ; The name of this host template
        	notifications_enabled           1       	; Host notifications are enabled
        	event_handler_enabled           1       	; Host event handler is enabled
        	flap_detection_enabled          1       	; Flap detection is enabled
        	failure_prediction_enabled      1       	; Failure prediction is enabled
        	process_perf_data               1       	; Process performance data
        	retain_status_information       1       	; Retain status information across program restarts
        	retain_nonstatus_information    1       	; Retain non-status information across program restarts
		notification_period		24x7		; Send host notifications at any time
        	register                        0       	; DONT REGISTER THIS DEFINITION - ITS NOT A REAL HOST, JUST A TEMPLATE!
        	}
	
	
	# Linux host definition template - This is NOT a real host, just a template!
	
	define host{
		name				linux-server	; The name of this host template
		use				generic-host	; This template inherits other values from the generic-host template
		check_period			24x7		; By default, Linux hosts are checked round the clock
		max_check_attempts		10		; Check each Linux host 10 times (max)
        	check_command           	check-host-alive ; Default command to check Linux hosts
		notification_period		workhours	; Linux admins hate to be woken up, so we only notify during the day
								; Note that the notification_period variable is being overridden from
								; the value that is inherited from the generic-host template!
		notification_interval		120		; Resend notification every 2 hours
		notification_options		d,u,r		; Only send notifications for specific host states
		contact_groups			admins		; Notifications get sent to the admins by default
		register			0		; DONT REGISTER THIS DEFINITION - ITS NOT A REAL HOST, JUST A TEMPLATE!
		}
	
	
	# Since this is a simple configuration file, we only monitor one host - the
	# local host (this machine).
	
	define host{
        	use                     linux-server            ; Name of host template to use
								; This host definition will inherit all variables that are defined
								; in (or inherited by) the linux-server host template definition.
        	host_name               localhost
        	alias                   localhost
        	address                 127.0.0.1
        	}
	
	#
	# 2007.9.20 追加しました。
	# ここで、監視対象ホストの名前、IPアドレス等を定義します。
	#
	
	define host{
		use			linux-server
		host_name		server01
		alias			server01
		address			***.***.***.***
		}
	
	define host{
		use			linux-server
		host_name 		server02
		alias			server02
		address			***.***.***.***
		}
	
	#
	
	###############################################################################
	###############################################################################
	#
	# HOST GROUPS
	#
	###############################################################################
	###############################################################################
	
	# We only have one host in our simple config file, so there is no need to
	# create more than one hostgroup.
	
	#
	#こちらでは,監視対象ホストのグループを設定します。
	#membersは,上記で設定したhost_name,alias名で登録します。
	#
	
	define hostgroup{
  	      hostgroup_name  test
        	alias           Test Servers
        	members         localhost,server01,server02
        	}
	
	
	
	###############################################################################
	###############################################################################
	#
	# SERVICES
	#
	###############################################################################
	###############################################################################
	
	# Generic service definition template - This is NOT a real service, just a template!
	
	define service{
        	name                            generic-service 	; The 'name' of this service template
        	active_checks_enabled           1       		; Active service checks are enabled
        	passive_checks_enabled          1    		   	; Passive service checks are enabled/accepted
		parallelize_check               1       		; Active service checks should be parallelized 
									(disabling this can lead to major performance problems)
        	obsess_over_service             1       		; We should obsess over this service (if necessary)
        	check_freshness                 0       		; Default is to NOT check service 'freshness'
        	notifications_enabled           1       		; Service notifications are enabled
        	event_handler_enabled           1       		; Service event handler is enabled
        	flap_detection_enabled          1       		; Flap detection is enabled
        	failure_prediction_enabled      1       		; Failure prediction is enabled
        	process_perf_data               1       		; Process performance data
        	retain_status_information       1       		; Retain status information across program restarts
        	retain_nonstatus_information    1       		; Retain non-status information across program restarts
        	is_volatile                     0       		; The service is not volatile
        	register                        0       		; DONT REGISTER THIS DEFINITION - ITS NOT A REAL SERVICE, JUST A TEMPLATE!
        	}
	
	
	# Local service definition template - This is NOT a real service, just a template!
	
	define service{
		name				local-service 		; The name of this service template
		use				generic-service		; Inherit default values from the generic-service definition
        	check_period                    24x7			; The service can be checked at any time of the day
        	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
		#
		# デフォルトでは,5分ですが,今回は,1分に変更しています(上記は,5分のままです。)
		#
        	retry_check_interval            1			; Re-check the service every minute until a hard state can be determined
        	contact_groups                  admins			; Notifications get sent out to everyone in the 'admins' group
		notification_options		w,u,c,r			; Send notifications about warning, unknown, critical, and recovery events
        	notification_interval           60			; Re-notify about service problems every hour
        	notification_period             24x7			; Notifications can be sent out at any time
        	register                        0       		; DONT REGISTER THIS DEFINITION - ITS NOT A REAL SERVICE, JUST A TEMPLATE!
		}
	
	
	#
	#
	#以下より,各監視サービスの設定に,上記で定義した監視対象ホスト(host_name,alias名)を追加していきます。
	#
	#
	
	
	 Define a service to "ping" the local machine
	
	define service{
        	use                             local-service         ; Name of service template to use
        	host_name                       localhost,server01,server02
		#
		#ここで,監視対象ホストを登録しています。
        	#	
		service_description             PING
		check_command			check_ping!100.0,20%!500.0,60%
        	#
		#pingコマンドの閾値を設定しています。
		#
		}
		
	# Define a service to check the disk space of the root partition
	# on the local machine.  Warning if < 20% free, critical if
	# < 10% free space on partition.
	
	define service{
        	use                             local-service         ; Name of service template to use
        	host_name                       localhost,server01,server02
        	service_description             Root Partition
		check_command			check_local_disk!20%!10%!/
        	}
	
	
	
	# Define a service to check the number of currently logged in
	# users on the local machine.  Warning if > 20 users, critical
	# if > 50 users.
	
	define service{
        	use                             local-service         ; Name of service template to use
        	host_name                       localhost,server01,server02
        	service_description             Current Users
		check_command			check_local_users!20!50
        	}
	
		
	# Define a service to check the number of currently running procs
	# on the local machine.  Warning if > 250 processes, critical if
	# > 400 users.
	
	define service{
	        use                             local-service         ; Name of service template to use
	        host_name                       localhost,server01,server02
	        service_description             Total Processes
		check_command			check_local_procs!250!400!RSZDT
	        }
	
	
	
	# Define a service to check the load on the local machine. 
	
	define service{
	        use                             local-service         ; Name of service template to use
	        host_name                       localhost,server01,server02
	        service_description             Current Load
		check_command			check_local_load!5.0,4.0,3.0!10.0,6.0,4.0
	        }
	
	以上です。2007.9.21.


!!!その他の監視ソフト
!pingによるIP死活確認であれば,ExPingというソフトが簡単です。
*監視間隔は,1分単位

http://www.woodybells.com/exping.html


by 有限会社ケイアイエム(http://www.keiaiemu.com/)