●概要
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ライブラリが必要です。
インストールされていない場合は、下記のようにインストールします。
ダウンロードが完了したら、まずはNagios用のユーザーアカウントやグループを作成します。
Nagiosのディレクトリ構成
Nagios3系をソースからデフォルトインストールすると、以下のような構成になります。
/etcの中をさらに掘り下げてみます。
nagios.cfg内でその他の設定ファイルを読み込むことができます。
このことより、設定ファイルの配備については柔軟に構成できるようになります。
設定ファイルを読み込む指定とディレクトリを指定する方法の2種類あります。
●プラグインのインストール
続いて、Nagiosのプラグインをインストールします。ダウンロードしたtarボールを展開して、コンパイルしてください。
●さざなみフォントインストール
「傾向」、「警報ヒストグラム」で表示される画像の日本語化に必要なさざなみフォントのインストールします。
●Nagiosの設定と起動
Webインターフェイス用アカウントの作成
Webインターフェイス用のアカウント(ここでは「nagiosadmin」)を作成します。
commands.cfgの設定
サービス監視を追加する場合は、このファイルは編集する必要があります。
コマンドライン(commands.cfg)で使用される$USER1はresource.cfg内で/usr/local/nagios/libexecとして指定されています。
コマンド設定ファイル(commands.cfg)内ではデフォルトで24個のコマンドが設定されています。
設定されたコマンド名を使って監視ホスト内でdefine serviceブロックに記述することができます。
contacts.cfgの設定③
このファイルは編集する必要があります。
通知先設定ファイル(contacts.cfg)には管理者としてのnagiosadminと管理グループのadminsが設定されてます。
最初に、テキストエディタで/usr/local/nagios/etc/objects/contacts.cfgを開いて、emailの行に管理者のメールアドレスを入力します。
複数人宛にメールを送信するには下記のように設定します。
localhost.cfgの設定
このファイルはlocalhostのみを監視する場合は、編集する必要があります。localhost以外のホストを監視する必要がある場合は、nagios.cfgでこのファイルを読みこまないようコメントアウトし、別cfgファイルを作成、そのファイルを読み込ませるようにします。例:linux.cfg
localhost監視設定ファイルを元に設定ファイルは
ホスト定義についてはhttp://nagios-jp.sourceforge.jp/nagios-doc-2x-ja/xodtemplate.htmlを参照してください。。
ホスト定義ファイルの設定例(linux.cfg)②
例を下記に示します。
ホストの定義
define host{}の中身がホストを定義しているものです。
ホストグループの定義
次にそのホストが所属するホストグループの定義がdefine hostgroup{}の中身です。ホストグループとは管理上同じにした方が良いホスト、たとえば、監視対象サーバが100台あるけども、自分が管理しているのが30台だった場合、その30台だけ別のホストグループにしておくと、通知先をまとめて変更したり、ということができるので便利です。
ただし、ホストの定義でuseで指定しているテンプレートにホストグループ名がtemplates.cfgで定義されている場合、定義されている以外の名称を指定するとエラーとなります。
サービスの定義
最後にサービスの定義です。define service{}にサービスを定義します。サービスとは、そのホストに対してどういった監視を実施するかを決めるものです。
check_pingがどのコマンドを使うか、という定義文です。check_pingは何をするのか?というのが、commands.cfgに書かれています。実際にcommands.cfgの中身を見てみると、
次に、$HOSTADDRESS$ですが、これは監視定義ファイルの「address」が自動的に参照されます。これはNagiosのグローバルのマクロです。それぞれのマクロの意味を含めた詳細についてはコマンド内でのマクロの使用を参照してください。そして、$ARG1$、$ARG2$は監視定義ファイルのcheck_commandの引数を呼び出します。「!」で挟まれているのが、引数です。つまり、check_ping!100.0,20%!500.0,60%の「100.0,20%」が第一引数、「500.0,60%」が第二引数になります。ようするに、以下のコマンドが実行されことになります。
サービスについても、サービスグループの登録を行うことができるようになっています。
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 コマンド・インタフェースを使えるようにします。
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の設定を変更してください。
定義ファイルの読み込み設定④
次に、Nagiosの設定ファイルの読み込み設定をします。etc/nagios.cfg にどの設定ファイルを読み込むかの設定がありますので、そこを編集します。
すべての設定が完了したら、以下のコマンドを実行して構文に誤りがないかどうかを確認します。
●CGI設定ファイルの設定
cgi.cfgを変更します。
●Apacheの設定
通常、Nagiosのような監視ツールは、監視対象となるサーバとは別のサーバにインストールします。しかし、テストなどの目的で、両者を同一のサーバにインストールした場合は、/etc/httpd/conf.d/nagios.confを自分自身からアクセスできるように、両方を修正します。
監視対象を登録すれば解消されるので、とりあえずNagiosのトップページが確認できれば大丈夫です。
●監視サービス追加(自ホスト編)
もし"CONFIG ERROR!"というメッセージが返ってくる場合には、設定内容に間違いがあることを示しているので、設定ファイルの内容を見直して正しく修正する必要があります。
ただ、それ以上の細かいエラー箇所の通知がないようなので、間違いを探すのはなかなか大変です。
よくある間違いとしては、ホストグループやサービスグループの定義で、定義されていないホスト名やサービス名が現れる場合 (大文字小文字の違いにも注意) や、監視するサービスの登録で、"contact_group"に指定されている名称が"contactgroup"で定義されていない、該当する監視コマンドが定義されていない、service_descriptionに "(" や "-" といった文字を使用している、各定義の最初の中括弧かdefineが書かれた行と同じ行に書かれていないといったところでしょうか。
それ以外にも自分の場合、ちょっといじったら間違いになってしまい、その箇所が分からなくなるといったことが良くありましたので、慣れないうちは注意して少しずつ触っては試してみるのが良いかと思います。
メモリ空き状況
メモリの空き(or 使用)容量をチェックする方法を記載します。このプラグインはPerlが必須(Perlの環境設定は完了しているものとする)となります。
まず、check_memプラグインを使用できるように環境を設定する必要があります。
ログインユーザ数
NTP
NTPが必要となるので、事前にインストール及び設定をしておきます。
DNS
NTPが必要となるので、事前にインストール及び設定をしておきます。
POP3
MySQL
VNC
check_vncはプラグインの中に入っていなく、インターネット上にあったものを利用します。
しかし、/usr/local/nagios/libexec/check_vnc -hを実行したところ下記のようなエラーが出力されました。
エラーに対応するためNagios-Pluginをダウンロードし、インストールします。
エラーに対応するためParams-Validateをダウンロードし、インストールします。
エラーに対応するためMath-Calc-Unitsをダウンロードし、インストールします。
エラーに対応するためClass-Accessorをダウンロードし、インストールします。
エラーに対応するためConfig-Tiny-2.13をダウンロードし、インストールします。
●Nagiosによる監視
Nagiosの監視内容を表示するには、Webブラウザを開いて、http://localhost/nagios/にアクセスします。すると、ユーザー認証のダイアログボックスが表示されますから、[ユーザ名]ボックスに「nagiosadmin」、[パスワード]ボックスに nagiosadminのパスワードを入力して[OK]ボタンをクリックします。すると、Nagiosの画面が表示されます。
画面1 Nagiosの初期画面。日本語パッチを適用したため、メッセージが日本語で表示されている
画面左の[Monitoring]にある各項目をクリックすると、その内容が表示されます。[Service Detail]では、監視対象となっているホストとサービスの一覧を表示します。
画面2 [Monitoring]項目の[Service Detail]画面
[Host Detail]では、監視対象となっているホストの一覧を表示します。サービスについては表示されません。
画面3 [Monitoring]項目の[Host Detail]画面
[Host Detail]画面でホスト名のリンクをクリックすると、そのホストの詳細情報が表示されます。
画面4 ホスト情報の詳細表示画面
Nagios 3.0では、約40種類のマクロが追加されるなど、多岐にわたる変更が施されています。また、パフォーマンスの向上やドキュメントの整備なども行われています。Nagios 3.0の新機能や変更点については、ChangelogやWhat's New in Nagios 3を参照してください。
●Pluginの動作確認
Pluginは単体で動作可能です。下記のディレクトリ以下のPluginの種類を確認してみてください。
ちなみに403ステータスを正常として判定する場合は、下記のような判定をしてやれば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"に対してエラー通知送信用のコマンドが正しく登録されていた場合、そこで使用している電子メール送信コマンドが正しく動作するか、試してみるもの良いかもしれません。
例えば、サービスのエラー通知の設定は、既定では次のようになっているようでした。
ですので、このコマンドが正しく動作するかを確認することで、電子メール自体が正しく送られるはずかどうか確認することができます。これには、次のようなコマンドを、コマンドラインから直接実行すれば良いかと思います。
監視期間と通知期間を確認する
電子メールが正しく送信できるはずなのにエラー通知が送信されない場合には、ホストやサービス毎に指定している監視期間や通知期間を再度確認してみると良いでしょう。
これはつまり、ホストやサービスで指定してる"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にアップデートされてしまったことが原因のようです。
●プラグインのインストールを参照してプラグインを再インストールし、Nagiosを再起動すると正常な状態に戻ります。
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 apacheNagiosの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 nagiosadminWebインターフェイス用のアカウントを有効にするため、Apacheを再起動します。
# service httpd restartNagiosを使用するためには、いくつかのファイルを編集しなければなりません。
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.1IPアドレスを記入します。これでホストの定義は完了です。
ホストグループの定義
次にそのホストが所属するホストグループの定義が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 restartNagiosをインストールしたばかりの場合、/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 Nagiosの初期画面。日本語パッチを適用したため、メッセージが日本語で表示されている
画面左の[Monitoring]にある各項目をクリックすると、その内容が表示されます。[Service Detail]では、監視対象となっているホストとサービスの一覧を表示します。

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

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

画面4 ホスト情報の詳細表示画面
Nagios 3.0では、約40種類のマクロが追加されるなど、多岐にわたる変更が施されています。また、パフォーマンスの向上やドキュメントの整備なども行われています。Nagios 3.0の新機能や変更点については、ChangelogやWhat'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 ForbiddenNagios本体は/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$
}
ですので、このコマンドが正しく動作するかを確認することで、電子メール自体が正しく送られるはずかどうか確認することができます。これには、次のようなコマンドを、コマンドラインから直接実行すれば良いかと思います。
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.
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を再起動すると正常な状態に戻ります。