トップ 差分 一覧 ソース 検索 ヘルプ PDF 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等デフォルトで用意されています。


 実験結果

 

  • 例: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ライブラリ等必要な為,各種インストール。



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


$ 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.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/)