Nagionの設定方法



●概要

 Nagiosは、ホストやそのホストで稼働しているサービスを定期的に監視して、異常を検知した場合には管理者にメールなどで通知を行う統合監視ツールです。元々は「NetSaint」という名称で開発が行われていましたが、開発終了に伴い、後継としてNagiosの開発プロジェクトがスタートしました。
 Nagiosは、稼働監視をプラグインが行い、Nagios本体はプラグインのスケジューリングなどを行うという構造になっています。従って、ホストなりサービスを管理する場合は、それに対応したプラグインが必要となります。Nagiosのプラグインは30種類以上用意されていますが、独自に開発することも可能です。その方法は、NagiosのWebサイトで公開されています。
 プラグインは、対象を外部から監視するため、不定期なイベントを監視することはできません。そのため、管理対象のホストにインストールして、 Nagiosに状態をレポートするアドオンプログラム(NRPE、NSCA、NDOUtilsなど)も用意されています。また、第三者が開発したアドオンも存在します。

 Nagiosは以下のような監視を行うことができます。

1.死活監視(Ping監視)
  ホストダウン、ネットワーク遅延等の監視を行う事が出来ます。
2.リソース監視全般
  CPU、Disk、ユーザ数等のリソース全般の監視を行う事が出来ます。
3.接続監視全般
  サービスポート、URL指定接続等のサービス全般の監視を行う事が出来ます。
4.プロセス監視全般
  プロセスダウン等、snmpで取得出来るプロセス全般を監視する事が出来ます。
5.ログ監視全般
  syslog、EventLog、snmptrap等、ログ全般を取得し監視する事が出来ます。

 要するに殆どの事が出来てしまうんです。snmpで取得出来る情報ならば何でも監視が出来ます。複雑なものをExecで記載してNagiosで監視等は常套句です。実際の運用実績でも問題なく監視が出来ている実績が多数あり、運用監視業界では無くてはならないツールとなっています。
 また、プラグインも充実しており、Windows機の監視にも対応しています(別途Windows機へエージェントをインストールする必要があります。無くても出来ますが、、)。プラグインを自分で作成(Perl)し、チェックコマンドとして使用する事によって、無数の監視方法が実現されます。

●Nagios本体のインストール

 Nagiosをインストールするためには、Apache、GCC、GDライブラリが必要です。
 インストールされていない場合は、下記のようにインストールします。
# yum install httpd gcc glibc glibc-common gd gd-devel
 次に、最新のNagiosおよびプラグインをダウンロードします。また、Nagiosはパッチを当てることによって、日本語化することができます。必要な場合は、Nagios-JPプロジェクト(http://sourceforge.jp/projects/nagios-jp)から、日本語化パッチをダウンロードしておいてください。
 ダウンロードが完了したら、まずはNagios用のユーザーアカウントやグループを作成します。
# useradd -m nagios
# passwd nagios
 次に、Nagiosのグループを作成し、NagiosとApacheのユーザーアカウントをメンバーに加えます。
# groupadd nagios
# usermod -G nagios nagios
# usermod -G nagios apache
 Nagiosのtarボールを展開して、ダウンロードしておいた日本語化パッチを適用し、コンパイルします。
nagios-3.1.0をインストールする場合
$ cd /usr/local/src
$ wget http://sourceforge.net/projects/nagios/files/nagios-3.x/nagios-3.1.0/nagios-3.1.0.tar.gz/download
$ tar zxvf nagios-3.1.0.tar.gz
$ cd nagios-3.1.0
$ wget https://pub2.bigbang.dyndns.org/nagios-3.1.0-ja-utf8.patch.gz
$ gzip -dc ../nagios-3.1.0-ja-utf8.patch.gz| patch -p0
$ ./configure --with-command-group=nagios
$ make all
nagios-3.2.1をインストールする場合
$ wget http://jaist.dl.sourceforge.net/sourceforge/nagios/nagios-3.2.1.tar.gz
$ tar zxvf nagios-3.2.1.tar.gz
$ cd nagios-3.2.1
$ wget https://pub2.bigbang.dyndns.org/nagios-jp-3.2.1.patch.gz
$ gzip -dc nagios-jp-3.2.1.patch.gz | patch -p1
$ patch -p1 > nagios-jp-3.2.1.patch
$ ./configure --with-command-group=nagios
$ make all
 コンパイルが完了したら、rootになってインストールします。
$ su
パスワード:
# make install
# make install-init
# make install-config
# make install-commandmode
# make install-webconf

Nagiosのディレクトリ構成

 Nagios3系をソースからデフォルトインストールすると、以下のような構成になります。
/usr/local/nagios/ --- bin/        Nagiosの実行ファイル
                    |- etc/        設定ファイル
                    |- libexec/    プラグイン
                    |- sbin/       WebGUIのCGI
                    |- share/      WebGUIの静的コンテンツ
                    |- var/        一時ファイルなど
 この中で設定にかかわる主な部分は /etc です。
 /etcの中をさらに掘り下げてみます。
/usr/local/nagios/etc --- nagios.cfg     Nagiosのメイン設定ファイル
                       |- cgi.cfg        CGIの設定ファイル
                       |- checkcommands.cfg
                       |- htpasswd.users	Basic認証ファイル
                       |- resource.cfg   $USERx変数設定ファイル 
                       |- objects/ --- commands.cfg
                                        ↑ 各コマンドの名前とコマンドラインの設定ファイル
                                    |- contacts.cfg	通知先の定義設定ファイル
                                    |- localhost.cfg	localhostの監視設定ファイル
                                    |- printer.cfg	プリンター監視の設定ファイル
                                    |- switch.cfg	スイッチ監視の設定ファイル
                                    |- templates.cfg	ホスト監視の設定ファイルテンプレート 
                                    |- timeperiods.cfg	時間の定義設定ファイル
                                    |- windows.cfg	windowsサーバー監視の設定ファイル
 nagiosは設定ファイル本体nagios.cfgが唯一指定するファイルです。
 nagios.cfg内でその他の設定ファイルを読み込むことができます。
 このことより、設定ファイルの配備については柔軟に構成できるようになります。
 設定ファイルを読み込む指定とディレクトリを指定する方法の2種類あります。
cfg_file=<cfgファイル> ← 指定されたファイルを読み込む
cfg_dir=<パス> ← パスで指定されたディレクトリ内の拡張子.cfgを全て読み込む
 デフォルトで提供されている設定ファイルをサンプルとしてカスタマイズしていきます。

●プラグインのインストール

 続いて、Nagiosのプラグインをインストールします。ダウンロードしたtarボールを展開して、コンパイルしてください。
$ cd /usr/local/src
$ tar zxvf nagios-plugins-1.4.14.tar.gz
$ cd nagios-plugins-1.4.14
$ ./configure --with-nagios-user=nagios --with-nagios-group=nagios
$ make
 コンパイルが完了したら、rootになってインストールします。
$ su
# make install
 以上でプラグインのインストールは完了です。

●さざなみフォントインストール

 「傾向」、「警報ヒストグラム」で表示される画像の日本語化に必要なさざなみフォントのインストールします。
# wget http://osdn.dl.sourceforge.jp/efont/10087/sazanami-20040629.tar.bz
さざなみフォントダウンロード ↑ 
※最新版のURLはダウンロードページで確認してください。
# tar jxvf sazanami-20040629.tar.bz2 ← さざなみフォント展開
# mkdir /usr/local/nagios/etc/font ← フォント格納先ディレクトリ作成
# cp sazanami-20040629/sazanami-gothic.ttf /usr/local/nagios/etc/font/font.ttf
 ← さざなみフォントをフォント格納先ディレクトリへコピー
# rm -rf sazanami-20040629 ← さざなみフォント展開先ディレクトリを削除
# rm -f sazanami-20040629.tar.bz2 ← ダウンロードしたファイルを削除
 さざなみフォントを使用できるようにcgi.cfgを変更します。
# vi /usr/local/nagios/etc/cgi.cfg
#ttf_file=/usr/local/nagios/etc/font/font.ttf
 ↓ コメントアウト
ttf_file=/usr/local/nagios/etc/font/font.ttf

●Nagiosの設定と起動

Webインターフェイス用アカウントの作成

 Webインターフェイス用のアカウント(ここでは「nagiosadmin」)を作成します。
# htpasswd -c -m /usr/local/nagios/etc/htpasswd.users nagiosadmin
New password: ← nagiosadminのパスワードを入力
Re-type new password: ← nagiosadminのパスワードを再入力
Adding password for user nagiosadmin
 Webインターフェイス用のアカウントを有効にするため、Apacheを再起動します。
# service httpd restart
 Nagiosを使用するためには、いくつかのファイルを編集しなければなりません。

commands.cfgの設定

 サービス監視を追加する場合は、このファイルは編集する必要があります。
 コマンドライン(commands.cfg)で使用される$USER1はresource.cfg内で/usr/local/nagios/libexecとして指定されています。
 コマンド設定ファイル(commands.cfg)内ではデフォルトで24個のコマンドが設定されています。
 設定されたコマンド名を使って監視ホスト内でdefine serviceブロックに記述することができます。
notify-host-by-email 	
notify-service-by-email 	
check-host-alive 	
check_local_disk 	
check_local_load 	
check_local_procs 	
check_local_users 	
check_local_swap 	
check_local_mrtgtraf 	
check_ftp 	
check_hpjd 	
check_snmp 	
check_http 	
check_ssh 	
check_dhcp 	
check_ping 	
check_pop 	
check_imap 	
check_smtp 	
check_tcp 	
check_udp 	
check_nt 	
process-host-perfdata 	
process-service-perfdata
 警告時に送信されるメールの内容で、エイリアス名($HOSTALIAS$)が使用されてしまうのでホスト名($HOSTNAME$)で通知されるよう変更します。
# 'notify-service-by-email' command definition
define command{
    command_name    notify-service-by-email
    command_line    /usr/bin/printf "%b" "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\n\nService: $SERVICEDESC$\n Host: $HOSTNAME$\n Address: $HOSTADDRESS$\nState: $SERVICESTATE$\n\nDate/Time: $LONGDATETIME$\n\n Additional Info:\n\n$SERVICEOUTPUT$" | /bin/mail -s "** $NOTIFICATIONTYPE$ Service Alert: $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$ **" $CONTACTEMAIL$
    }
 ただし、サービスのエイリアス等で日本語を使用していたり、携帯でメールを受信する場合には要注意です。MTAの設定だったりで回避できるかも知れませんが、変更できなかった場合はnkfを使って文字コードを変換するのも一つの手です。以下の場合は、UTF-8に変換する例です。
# 'notify-service-by-email' command definition
define command{
    command_name    notify-service-by-email
    command_line    /usr/bin/printf "%b" "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\n\nService: $SERVICEDESC$\n Host: $HOSTNAME$\n Address: $HOSTADDRESS$\nState: $SERVICESTATE$\n\nDate/Time: $LONGDATETIME$\n\n Additional Info:\n\n$SERVICEOUTPUT$" | /usr/bin/nkf -w8 | /bin/mail -s "** $NOTIFICATIONTYPE$ Service Alert: $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$ **" $CONTACTEMAIL$
    }

contacts.cfgの設定③

 このファイルは編集する必要があります。
 通知先設定ファイル(contacts.cfg)には管理者としてのnagiosadminと管理グループのadminsが設定されてます。
 最初に、テキストエディタで/usr/local/nagios/etc/objects/contacts.cfgを開いて、emailの行に管理者のメールアドレスを入力します。
define contact{
      contact_name    nagiosadmi
      use             generic-contact
      alias           Nagios Admin
      email           nagios@example.jp ← 管理者メールアドレスを指定
      }
 useディレクティブで使用する名称は、templates.cfgで定義されている必要があります。
 複数人宛にメールを送信するには下記のように設定します。
define contact{
      contact_name    mail1
      use             generic-contact
      alias           mail1 user
      email           mail1@example.jp
      contact_name    mail2
      use             generic-contact
      alias           mail2 user
      email           mail2@example.jp
      }
 追加した"contact_name"を、"contactgroups.cfg"の"contactgroup"にメンバー追加します。
define contactgroup{
        contactgroup_name       admins
        alias                   Nagios Administrators
        members                 nagiosadmin,mail1,mail2
        }
 また、携帯電話へメールを送信する場合には下記のように設定します。
define contact{
      contact_name    mail3
      use             generic-contact
      alias           mail3 user
      email           mail3@example.jp
      pager           mail3@docomo.ne.jp
      }

localhost.cfgの設定

 このファイルはlocalhostのみを監視する場合は、編集する必要があります。localhost以外のホストを監視する必要がある場合は、nagios.cfgでこのファイルを読みこまないようコメントアウトし、別cfgファイルを作成、そのファイルを読み込ませるようにします。例:linux.cfg

 localhost監視設定ファイルを元に設定ファイルは
  • define hostでホスト定義、ホスト名/エイリアス名/IPアドレス等
  • define hostgroupでグループ定義、グループ名/エイリアス名/メンバーホスト等
  • define serviceで監視対象サービス定義
が記載されています。
 ホスト定義についてはhttp://nagios-jp.sourceforge.jp/nagios-doc-2x-ja/xodtemplate.htmlを参照してください。。

ホスト定義ファイルの設定例(linux.cfg)②

 例を下記に示します。
define host{
        use                     linux-server
        host_name               monitor.bigbang.dyndns.org
        alias                   Nagiosサーバ
        address                 127.0.0.1
        }
define host{
	use			linux-server
	host_name		server.bigbang.dyndns.org
	alias			CentOS 5.5
	address			192.168.0.1
	}
define hostgroup{
        hostgroup_name  	linux-servers
        alias           	Linux Servers
        members         	monitor.bigbang.dyndns.org,server.bigbang.dyndns.org
        }
define service{
        use                             local-service
        host_name                       server.bigbang.dyndns.org
        service_description             PING
	check_command			check_ping!100.0,20%!500.0,60%
        }

 ホストの定義

 define host{}の中身がホストを定義しているものです。
        use                     linux-server
 これは「linux-server」という名前のテンプレートを使用するという宣言文で、そのテンプレートはetc/objectの中のtemplates.cfgに記述されています。templates.cfgに記載されていない名前を記載するとエラーになります。
        host_name               server.bigbang.dyndns.org
 ここにホスト名を記入
        alias                   CentOS 5.5
 ホスト名の別名を記入します。
        address                 192.168.0.1
 IPアドレスを記入します。これでホストの定義は完了です。

 ホストグループの定義

 次にそのホストが所属するホストグループの定義がdefine hostgroup{}の中身です。ホストグループとは管理上同じにした方が良いホスト、たとえば、監視対象サーバが100台あるけども、自分が管理しているのが30台だった場合、その30台だけ別のホストグループにしておくと、通知先をまとめて変更したり、ということができるので便利です。
        hostgroup_name          linux-servers
        alias                   Linux Servers
        members                 monitor.bigbang.dyndns.org,server.bigbang.dyndns.org
 ここでは、ホストグループ名が「linux-servers」でそのメンバーとして「monitor.bigbang.dyndns.org」と「server.bigbang.dyndns.org」を所属させています。
 ただし、ホストの定義でuseで指定しているテンプレートにホストグループ名がtemplates.cfgで定義されている場合、定義されている以外の名称を指定するとエラーとなります。

 サービスの定義

 最後にサービスの定義です。define service{}にサービスを定義します。サービスとは、そのホストに対してどういった監視を実施するかを決めるものです。
       use                      local-service
 テンプレート「local-service」を使用します。テンプレートはホストと同様、templates.cfgに定義されています。
       host_name                server.bigbang.dyndns.org
 サービスを適用するホストを記入します。
       service_description      PING
 サービス名を記入します。同一のホストに同一のサービス名を複数設定することはできません。
       check_command            check_ping!100.0,20%!500.0,60%
 最後にチェックコマンドを記入します。ここがサービスのネックになっているところですので詳しく説明します。
 check_pingがどのコマンドを使うか、という定義文です。check_pingは何をするのか?というのが、commands.cfgに書かれています。実際にcommands.cfgの中身を見てみると、
define command{
        command_name    check_ping
        command_line    $USER1$/check_ping -H $HOSTADDRESS$ -w $ARG1$ -c $ARG2$ -p 5
        }
 ここがcheck_pingの定義の部分です。これも分解して内容を見てみます。
        command_name    check_ping
 コマンドの名前を定義します。これが先ほどの監視定義ファイル(linux.cfg)から参照される名前です。
$ /usr/local/nagios/libexec/check_ping -h
 定義しているコマンドについてオプション等を確認したい場合は上記のようにします。
        command_line    $USER1$/check_ping -H $HOSTADDRESS$ -w $ARG1$ -c $ARG2$ -p 5
 これがコマンドの内容です。$USER1$と書いてあるのはユーザ定義のマクロ(変数)で、etc/resource.cfgに定義されています。デフォルトでは「/usr/local/nagios/libexec」となっています。
 次に、$HOSTADDRESS$ですが、これは監視定義ファイルの「address」が自動的に参照されます。これはNagiosのグローバルのマクロです。それぞれのマクロの意味を含めた詳細についてはコマンド内でのマクロの使用を参照してください。そして、$ARG1$、$ARG2$は監視定義ファイルのcheck_commandの引数を呼び出します。「!」で挟まれているのが、引数です。つまり、check_ping!100.0,20%!500.0,60%の「100.0,20%」が第一引数、「500.0,60%」が第二引数になります。ようするに、以下のコマンドが実行されことになります。
/usr/local/nagios/libexec/check_ping -H 127.0.0.1 -w 100.0,20% -c 500.0,60% -p 5
 このコマンドの返り値をNagiosは監視します。ここまでで、監視定義ファイルの作成は完了です。
 サービスについても、サービスグループの登録を行うことができるようになっています。
define servicegroup {
        servicegroup_name    DNS
        alias    DNS Services
        members    SERVER1,DNS
        members    SERVER2,DNS
        }
 サービスグループの登録の際は、"members" として、"ホスト名 (host_name)"、"サービス名 (service_description)" という形で指定します。複数のメンバーを登録する場合には、上記のように "members" を複数指定します。

nagios.cfgの設定①

 このファイルはNagiosのメイン設定ファイルで、編集する必要があります。
 デフォルトでは、/usr/local/nagios/etcディレクトリにcgi.cfg、nagios.cfg、resource.cfgの3つの設定ファイルが作成されます。cgi.cfgはWebインターフェイスの設定を定義するファイル、nagios.cfgはNagios本体の制御を設定するファイル、resource.cfgはプラグインやリソースハンドラの位置などを指定するファイルです。
 この中で、設定を変更する可能性が高いのはnagios.cfgです。
 CGI コマンド・インタフェースを使えるようにします。
check_external_commands=1
 フラップ検知機能を有効にします。
enable_flap_detection=1
 日付の書式を、YYYY-MM-DD HH:MM:SSにします。
date_format=iso8601 ← 日付書式をYYYY-MM-DD HH:MM:SSにする

resource.cfgの設定

 情報を保管するためのファイルで、ユーザー作成のマクロ定義などが記述されます。
 実際に設定ファイルに記載を行う場合には、下記URLを参照してください。
  http://nagios-jp.sourceforge.jp/nagios-doc-2x-ja/macros.html

templates.cfgの設定

 テンプレートベースオブジェクトデータ設定ファイルオプション
  http://nagios-jp.sourceforge.jp/nagios-doc-2x-ja/xodtemplate.html

timeperiods.cfgの設定

 時間設定ファイル(timeperiods.cfg)には24×7や休日などの設定がある

 /usr/local/nagios/etcディレクトリには、objectsというサブディレクトリがあり、そこには定義のテンプレートなどのファイルが保存されています。定義の内容は、各ファイルを開いて確認してください。
 NagiosのWebインターフェイスを動作させるために、以下のコマンドを実行してSELinuxの設定を変更してください。
# chcon -R -t httpd_sys_content_t /usr/local/nagios/sbin/
# chcon -R -t httpd_sys_content_t /usr/local/nagios/share/

定義ファイルの読み込み設定④

 次に、Nagiosの設定ファイルの読み込み設定をします。etc/nagios.cfg にどの設定ファイルを読み込むかの設定がありますので、そこを編集します。
# vi /usr/local/nagios/etc/nagios.cfg
cfg_file=/usr/local/nagios/etc/objects/linux.cfg
とします。ちなみに、printer.cfg、windows.cfg、switch.cfgが読み込まれないのも、ここでコメントアウトされているためです。
 すべての設定が完了したら、以下のコマンドを実行して構文に誤りがないかどうかを確認します。
# /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg
Nagios 3.0.3
Copyright (c) 1999-2008 Ethan Galstad (http://www.nagios.org)
Last Modified: 06-25-2008
License: GPL
Reading configuration data...
(省略)
Total Warnings: 0
Total Errors: 0
Things look okay - No serious problems were detected during the pre-flight check
 問題がなければ、Nagiosを再起動します。
# service nagios restart
 サーバを再起動してもnagiosが自動的に起動するように設定します。
# chkconfig --add nagios ← サービスとして追加
# chkconfig --list nagios ← 確認
nagios         	0:off	1:off	2:off	3:on	4:on	5:on	6:off

●CGI設定ファイルの設定

 cgi.cfgを変更します。
#vi /usr/local/nagios/etc/cgi.cfg
ping_syntax=/bin/ping -n -U -c 5 $HOSTADDRESS$
↓
ping_syntax=/bin/ping -n -c 5 $HOSTADDRESS$ ← 変更
以下のように権限を変更
authorized_for_system_information=nagiosadmin
           ↑ システム・プロセス情報を閲覧できる認証ユーザ
authorized_for_configuration_information=nagiosadmin
           ↑ 設定を閲覧できる認証ユーザ
authorized_for_system_commands=nagiosadmin
           ↑ システム・プロセスコマンドを発行できる認証ユーザ
authorized_for_all_services=nagiosadmin
           ↑ 全サービスの状態と設定情報を閲覧できる権限のある認証ユーザ
authorized_for_all_hosts=nagiosadmin
           ↑ 全ホストの状態と設定情報を閲覧できる権限のある認証ユーザ
authorized_for_all_service_commands=nagiosadmin
           ↑ 全サービスに対してコマンドを発行できる認証ユーザ
authorized_for_all_host_commands=nagiosadmin
           ↑ 全ホストに対してコマンドを発行できる認証ユーザ

●Apacheの設定

 通常、Nagiosのような監視ツールは、監視対象となるサーバとは別のサーバにインストールします。しかし、テストなどの目的で、両者を同一のサーバにインストールした場合は、/etc/httpd/conf.d/nagios.confを自分自身からアクセスできるように、両方を修正します。
#vi /etc/httpd/conf.d/nagios.conf
# SAMPLE CONFIG SNIPPETS FOR APACHE WEB SERVER
# Last Modified: 11-26-2005
#
# This file contains examples of entries that need
# to be incorporated into your Apache web server
# configuration file.  Customize the paths, etc. as
# needed to fit your system.
ScriptAlias /nagios/cgi-bin "/usr/local/nagios/sbin"
<Directory "/usr/local/nagios/sbin">
#  SSLRequireSSL
   Options ExecCGI
   AllowOverride None
   Order allow,deny
#  Allow from all
           ↑ 行頭に#を追加してコメントアウト(すべてのアクセスを禁止)
#  Order deny,allow
#  Deny from all
   Allow from 127.0.0.1
           ↑ 行頭の#を削除してコメント解除(自ホストからのアクセスを許可)
   Allow from 192.168.1.0/24
           ↑ 追加(内部ネットワーク(例:192.168.1.0/24)からのアクセスを許可)
   AuthName "Nagios Access"
   AuthType Basic
   AuthUserFile /usr/local/nagios/etc/htpasswd.users
   Require valid-user
</Directory>
Alias /nagios "/usr/local/nagios/share"
<Directory "/usr/local/nagios/share">
#  SSLRequireSSL
   Options None
   AllowOverride None
   Order allow,deny
#  Allow from all
           ↑ 行頭に#を追加してコメントアウト(すべてのアクセスを禁止)
#  Order deny,allow
#  Deny from all
   Allow from 127.0.0.1
           ↑ 行頭の#を削除してコメント解除(自ホストからのアクセスを許可)
   Allow from 192.168.1.0/24
           ↑ 追加(内部ネットワーク(例:192.168.1.0/24)からのアクセスを許可)
   AuthName "Nagios Access"
   AuthType Basic
   AuthUserFile /usr/local/nagios/etc/htpasswd.users
   Require valid-user
</Directory>
 修正が完了したら、Apacheを再起動します。
# service httpd restart
 Nagiosをインストールしたばかりの場合、/nagiosのトップページ以外を参照すると"Error: Could not read object configuration data!"といったメッセージが表示されることがあるかもしれません。
 監視対象を登録すれば解消されるので、とりあえずNagiosのトップページが確認できれば大丈夫です。

●監視サービス追加(自ホスト編)

 もし"CONFIG ERROR!"というメッセージが返ってくる場合には、設定内容に間違いがあることを示しているので、設定ファイルの内容を見直して正しく修正する必要があります。
 ただ、それ以上の細かいエラー箇所の通知がないようなので、間違いを探すのはなかなか大変です。
 よくある間違いとしては、ホストグループやサービスグループの定義で、定義されていないホスト名やサービス名が現れる場合 (大文字小文字の違いにも注意) や、監視するサービスの登録で、"contact_group"に指定されている名称が"contactgroup"で定義されていない、該当する監視コマンドが定義されていない、service_descriptionに "(" や "-" といった文字を使用している、各定義の最初の中括弧かdefineが書かれた行と同じ行に書かれていないといったところでしょうか。
 それ以外にも自分の場合、ちょっといじったら間違いになってしまい、その箇所が分からなくなるといったことが良くありましたので、慣れないうちは注意して少しずつ触っては試してみるのが良いかと思います。

メモリ空き状況

 メモリの空き(or 使用)容量をチェックする方法を記載します。このプラグインはPerlが必須(Perlの環境設定は完了しているものとする)となります。
 まず、check_memプラグインを使用できるように環境を設定する必要があります。
# cp /usr/local/src/nagios-plugins-1.4.15/contrib/check_mem.pl /usr/local/nagios/libexec/check_mem
# chmod a+x /usr/local/nagios/libexec/check_mem
 設定ファイルの最後に追記します。
#vi /usr/local/nagios/etc/objects/commands.cfg ← commands.cfg編集
以下を最終行へ追加
# 'check_mem' command definition
define command{
        command_name    check_mem
        command_line    $USER1$/check_mem -f -w $ARG1$ -c $ARG2$
        }
#vi /usr/local/nagios/etc/objects/localhost.cfg ← localhost.cfg編集
以下を最終行へ追加
define service{
        use                             generic-service
        host_name                       localhost
        service_description             Memory Free
        check_command                   check_mem!20!10
               空きメモリ量が20%で警告、10%で異常とする ↑
        }
#/etc/rc.d/init.d/nagios restart ← Nagios再起動

ログインユーザ数
#vi /usr/local/nagios/etc/objects/localhost.cfg ← localhost.cfg編集
define service{
        use                             generic-service
        host_name                       localhost
        service_description             Current Users
        check_command                   check_local_users!3!5
               ログインユーザー数が3以上で警告、5以上で異常とする ↑
        }
#/etc/rc.d/init.d/nagios restart ← Nagios再起動

NTP

 NTPが必要となるので、事前にインストール及び設定をしておきます。
#vi /usr/local/nagios/etc/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 /usr/local/nagios/etc/objects/localhost.cfg ← localhost.cfg編集
以下を最終行へ追加
define service{
        use                             generic-service
        host_name                       localhost
        service_description             NTP
        is_volatile                     0
        check_period                    24x7
        max_check_attempts              3
        normal_check_interval           5
        retry_check_interval            1
        notification_interval           240
        notification_period             24x7
        notification_options            c,r
        check_command                   check_ntp!外部NTPサーバーIPアドレス!1!2
        contact_groups                  linux-admins
        }
#/etc/rc.d/init.d/nagios restart ← Nagios再起動

DNS

 NTPが必要となるので、事前にインストール及び設定をしておきます。
#vi /usr/local/nagios/etc/objects/commands.cfg
# 'check_ntp' command definition
# 'check_dig' command definition
define command{
        command_name    check_dig
        command_line    $USER1$/check_dig -H $HOSTADDRESS$ -l $ARG1$
        }
#vi /usr/local/nagios/etc/objects/localhost.cfg ← localhost.cfg編集
以下を最終行へ追加
define service{
        use                             generic-service
        host_name                       localhost
        service_description             DNS
        check_command                   check_dig!example.com
                    名前解決ホスト名に自ドメイン名を指定 ↑
        }
または、(記載方法は下の方がいいかも)
define service{
        use                             generic-service
        host_name                       localhost
        service_description             DNS example.com
        is_volatile                     0
        check_period                    24x7
        max_check_attempts              3
        normal_check_interval           5
        retry_check_interval            1
        notification_interval           240
        notification_period             24x7
        notification_options            c,r
        check_command                   check_dig!example.com
        contact_groups                  linux-admins
        }
#/etc/rc.d/init.d/nagios restart ← Nagios再起動

POP3
# 'check_pop' command definition
define command{
        command_name    check_pop
        command_line    $USER1$/check_pop -H $HOSTADDRESS$ -s quit ← 「-s quit」追加
        }
※「-s quit」はDovecotがpop3-login: Aborted login: rip=::ffff:127.0.0.1,
 lip=::ffff:127.0.0.1, securedというエラーメッセージをログに出力しないようにする対処
また、check_popはcheck_tcpにリンクされているため、
既にcheck_tcpが定義されている場合は記載する必要はありません。
#vi /usr/local/nagios/etc/objects/localhost.cfg ← localhost.cfg編集
以下を最終行へ追加
define service{
        use                             generic-service
        host_name                       localhost
        service_description             POP
        check_command                   check_pop
        }
#/etc/rc.d/init.d/nagios restart ← Nagios再起動
または、
define service{
        use                             generic-service
        host_name                       hoge
        service_description             TCP POP3
        is_volatile                     0
        check_period                    24x7
        max_check_attempts              3
        normal_check_interval           5
        retry_check_interval            1
        notification_interval           240
        notification_period             24x7
        notification_options            c,r
        check_command                   check_tcp!監視ポート番号を記載!2!5
        contact_groups                  linux-admins
        }

MySQL
#vi /usr/local/nagios/etc/objects/commands.cfg ← commands.cfg編集
以下を最終行へ追加
# 'check_mysql' command definition
define command{
    command_name  check_mysql
    command_line  $USER1$/check_mysql -H $HOSTADDRESS$ -u $ARG1$ -p $ARG2$ -d $ARG3
    }
#vi /usr/local/nagios/etc/objects/localhost.cfg ← localhost.cfg編集
以下を最終行へ追加
define service{
        use                         generic-service
        host_name                   localhost
        service_description         MySQL
        check_command               check_mysql!user_name!password!database_name!
                    user_name:データベース接続時のユーザ名及びユーザパスワード
                    password:データベース接続時のユーザパスワード
                    database_name:データベース名
        }
#/etc/rc.d/init.d/nagios restart ← Nagios再起動

VNC

 check_vncはプラグインの中に入っていなく、インターネット上にあったものを利用します。
 しかし、/usr/local/nagios/libexec/check_vnc -hを実行したところ下記のようなエラーが出力されました。



 エラーに対応するためNagios-Pluginをダウンロードし、インストールします。
# cd /usr/local/src ← ダウンロードしたフォルダに移動
# tar zxvf Nagios-Plugin-0.35.tar.gz
# cd Nagios-Plugin-0.35
# perl Makefile.PL
# make
# make install
 今度は下記のようなエラーが表示されました。



 エラーに対応するためParams-Validateをダウンロードし、インストールします。
# cd /usr/local/src ← ダウンロードしたフォルダに移動
# tar zxvf Params-Validate-0.95.tar.gz
# cd Params-Validate-0.95
# mkdir /usr/local/lib/perl5/site_perl/5.10.0/Params
# cp lib/ParamsValidate.pm /usr/local/lib/perl5/site_perl/5.10.0/Params/
# cp lib/Params/ValidatePP.pm /usr/local/lib/perl5/site_perl/5.10.0/Params/
 今度は下記のようなエラーが表示されました。



 エラーに対応するためMath-Calc-Unitsをダウンロードし、インストールします。
# cd /usr/local/src ← ダウンロードしたフォルダに移動
# tar zxvf Math-Calc-Units-1.07.tar.gz
# cd Math-Calc-Units-1.07
# perl Makefile.PL
# make
# make install
 今度は下記のようなエラーが表示されました。



 エラーに対応するためClass-Accessorをダウンロードし、インストールします。
# cd /usr/local/src ← ダウンロードしたフォルダに移動
# tar zxvf Class-Accessor-0.34.tar.gz
# cd Class-Accessor-0.34
# perl Makefile.PL
# make
# make install
 今度は下記のようなエラーが表示されました。



 エラーに対応するためConfig-Tiny-2.13をダウンロードし、インストールします。
# cd /usr/local/src ← ダウンロードしたフォルダに移動
# tar zxvf Config-Tiny-2.13.tar.gz
# cd Config-Tiny-2.13
# perl Makefile.PL
# make
# make install
 ふ〜・・ようやく、使用方法が表示されました。
#vi /usr/local/nagios/etc/objects/commands.cfg ← commands.cfg編集
以下を最終行へ追加
# 'check_vnc' command definition
define command{
        command_name    check_vnc
        command_line    $USER1$/check_vnc -H $HOSTADDRESS$ -p $ARGS1$
        }
#vi /usr/local/nagios/etc/objects/localhost.cfg ← localhost.cfg編集
以下を最終行へ追加
define service{
        use                             generic-service
        host_name                       localhost
        service_description             VNC
        check_command                   check_vnc!ホスト名orIPアドレス!監視ポート番号
        }
#/etc/rc.d/init.d/nagios restart ← Nagios再起動


●Nagiosによる監視

 Nagiosの監視内容を表示するには、Webブラウザを開いて、http://localhost/nagios/にアクセスします。すると、ユーザー認証のダイアログボックスが表示されますから、[ユーザ名]ボックスに「nagiosadmin」、[パスワード]ボックスに nagiosadminのパスワードを入力して[OK]ボタンをクリックします。すると、Nagiosの画面が表示されます。

画面1
画面1 Nagiosの初期画面。日本語パッチを適用したため、メッセージが日本語で表示されている

 画面左の[Monitoring]にある各項目をクリックすると、その内容が表示されます。[Service Detail]では、監視対象となっているホストとサービスの一覧を表示します。

画面2
画面2 [Monitoring]項目の[Service Detail]画面

 [Host Detail]では、監視対象となっているホストの一覧を表示します。サービスについては表示されません。

画面3
画面3 [Monitoring]項目の[Host Detail]画面

 [Host Detail]画面でホスト名のリンクをクリックすると、そのホストの詳細情報が表示されます。

画面4
画面4 ホスト情報の詳細表示画面

 Nagios 3.0では、約40種類のマクロが追加されるなど、多岐にわたる変更が施されています。また、パフォーマンスの向上やドキュメントの整備なども行われています。Nagios 3.0の新機能や変更点については、ChangelogWhat's New in Nagios 3を参照してください。

●Pluginの動作確認

 Pluginは単体で動作可能です。下記のディレクトリ以下のPluginの種類を確認してみてください。
# ls /usr/local/nagios/libexec/
check_apt       check_file_age      check_log       check_oracle   check_tcp
check_breeze    check_flexlm        check_mailq     check_overcr   check_time
check_by_ssh    check_ftp           check_mrtg      check_ping     check_udp
check_clamd     check_http          check_mrtgtraf  check_pop      check_ups
check_cluster   check_icmp          check_nagios    check_procs    check_users
check_dhcp      check_ide_smart     check_nntp      check_real     check_wave
check_dig       check_ifoperstatus  check_nt        check_rpc      negate
check_disk      check_ifstatus      check_ntp       check_sensors  urlize
check_disk_smb  check_imap          check_ntp_peer  check_smtp     utils.pm
check_dns       check_ircd          check_ntp_time  check_ssh      utils.sh
check_dummy     check_load          check_nwstat    check_swap
 正常にインストールされていれば、上記のような表示となるはずです。試しに、check_httpというPluginを試してみましょう。引数にlocalhostを指定して実行するとWARNINGと表示されるはずです。
$ /usr/local/nagios/libexec/check_http -H localhost
HTTP WARNING: HTTP/1.1 403 Forbidden
 Nagios本体は/usr/local/nagios/libexec/フォルダ配下のcheck_***というPluginを実行し、その戻り値でエラーか警告かを判定しています。いまはlocalhostのApacheがHTTP 403を返してきたため、警告を行っているという状況です。
 ちなみに403ステータスを正常として判定する場合は、下記のような判定をしてやればOKです。
$ /usr/local/nagios/libexec/check_http -H localhost -e 403
HTTP OK HTTP/1.1 403 Forbidden - 5240 bytes in 0.018 seconds | time=0.017576s;;;0.000000 size=5240B;;;0
 今度はOKと判定されたようです。実際に監視を行う際も多少調整してやれば、警告を正常として判定させたり、正常な値を警告値として判定させることが可能です。

●コマンド内でのマクロの使用

 設定ファイルを編集していると、$HOSTADDRESS$、$ARG1$、$ARG2$などが目につくと思います。これはNagiosのマクロです。それぞれのマクロの意味を含めた詳細についてはコマンド内でのマクロの使用を参照してください。

●エラー通知がメールで送られてこない場合の確認事項

 正しく設定しているはずなのにNagiosからエラー検出時の通知が送られてこない、または送られてこないことがある場合、次のようなことに注意して設定を再確認すると良いかもしれません。

 エラー通知コマンドの確認

 まず、Nagios がメールを送ることができるかどうかを確認します。
 Nagiosは、"commands.cfg"に定義されている"notify-host-by-email"コマンドや"notify-service-by-email"コマンドを用いて、エラー通知をメール送信しています。
 実際、このコマンドは、"templates.cfg"の中の"contact"テンプレートの"service_notification_commands"と"host_notification_commands"の2箇所でそれぞれ指定されているのが見られます。
 もし、登録してある"contact"情報が使用しているテンプレートに意図せずこれらの指定が含まれない場合には、エラー通知送信用のコマンドが正しく設定されていない可能性があるかもしれません。

 メール送信コマンドの確認

 "contact"に対してエラー通知送信用のコマンドが正しく登録されていた場合、そこで使用している電子メール送信コマンドが正しく動作するか、試してみるもの良いかもしれません。
 例えば、サービスのエラー通知の設定は、既定では次のようになっているようでした。
    # 'notify-service-by-email' command definition
    define command {
    command_name notify-service-by-email
    command_line /usr/bin/printf "%b" "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\n\nService: $SERVICEDESC$\nHost: $HOSTALIAS$\nAddress: $HOSTADDRESS$\nState: $SERVICESTATE$\n\nDate/Time: $LONGDATETIME$\n\nAdditional Info:\n\n$SERVICEOUTPUT$" | /bin/mail -s "** $NOTIFICATIONTYPE$ Service Alert: $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$ **" $CONTACTEMAIL$
    }
 ここから読み解けることとしては、電子メールによる通知の際に "/bin/mail" コマンドを使用しているところです。
 ですので、このコマンドが正しく動作するかを確認することで、電子メール自体が正しく送られるはずかどうか確認することができます。これには、次のようなコマンドを、コマンドラインから直接実行すれば良いかと思います。
echo "TEST" | /bin/mail -s "TEST" xxx@xxxx.xxx.xx
 このようにして、テストメールが"xxx@xxxx.xxx.xx"宛に届いたならば、電子メールの送信機能自体には大きな不具合はなさそうです。

 監視期間と通知期間を確認する
 電子メールが正しく送信できるはずなのにエラー通知が送信されない場合には、ホストやサービス毎に指定している監視期間や通知期間を再度確認してみると良いでしょう。
 これはつまり、ホストやサービスで指定してる"check_period"や"notification_period"がそうなのですけど、これが"24x7"以外に設定されている箇所がある場合、それらは場合によっては監視や警告をしない時間が含まれているかもしれません。
 例えば特に注意したいのが、既定で用意されているホストテンプレート"linux-server"は、"notification_period"として"workhours"が設定されているようでした。これは"平日9:00から17:00"を意味するようで、この範囲外でのエラー通知はされないという設定です。
 しかもどうやら、ホストの方で通知をしない期間が設定されていた場合、サービスの方で"24x7" を指定していても、該当する非通知期間の間はエラー通知が送られてこないようなので、サービスの場合はホストの方の通知設定も含めて確認する必要がありそうです。
 もう一つの"windows-server"というホストテンプレートでは"notification_period"が"24x7"に設定されているので、つい勘違いして見逃していないか確認すると良いでしょう。
 同様に、通知するエラーを決める"notification_options"や、エラーの通知先を示す"contact_groups"といった辺りも気にしておきます。

●Return code of 127 for check of service 'MySQL'

 Fedora 14からFedora 15にアップグレード後、下記のようなエラーログが記録されるようになりました。
 どうやら、mysql-devel-5.5.14-2.fc15.i686にアップデートされてしまったことが原因のようです。

Sep 10 12:02:40 inu nagios: Warning: Return code of 127 for check of service 'MySQL' on host 'serverA.bigbang.mydns.jp' was out of bounds. Make sure the plugin you're trying to run actually exists.
Sep 10 12:05:40 inu nagios: Warning: Return code of 127 for check of service 'MySQL' on host 'serverA.bigbang.mydns.jp' was out of bounds. Make sure the plugin you're trying to run actually exists.
Sep 10 12:08:40 inu nagios: Warning: Return code of 127 for check of service 'MySQL' on host 'serverA.bigbang.mydns.jp' was out of bounds. Make sure the plugin you're trying to run actually exists.
Sep 10 12:11:40 inu nagios: Warning: Return code of 127 for check of service 'MySQL' on host 'serverA.bigbang.mydns.jp' was out of bounds. Make sure the plugin you're trying to run actually exists.

 ●プラグインのインストールを参照してプラグインを再インストールし、Nagiosを再起動すると正常な状態に戻ります。