tools team/tools/Nagios

最低限の条件

標準出力を 1 行返して、結果に応じた 0〜3 までの値(詳細後述)を終了時に返す実行可能なプログラムかスクリプトであれば、とりあえずはプラグインとして使えます。

たとえば、、

#!/bin/bash
if [ -f /tmp/sample ]
then
	echo "OK"; exit 0;
else
	echo "CRITICAL"; exit 2;
fi

こんな単純なシェルスクリプトでも Nagios プラグインとして使えます。 /tmp/sample が存在したら OK 、存在しなかったら CRITICAL という、なんの役にも立たないプラグインですけど!

実行してみるとこんな感じ。

[root@localhost plugins]# ./check_sample 
CRITICAL
[root@localhost plugins]# echo $?
2
[root@localhost plugins]# touch /tmp/sample
[root@localhost plugins]# ./check_sample 
OK
[root@localhost plugins]# echo $?
0

標準出力と終了コードの意味は次のとおり。

標準出力の意味

TEXT OUTPUT | OPTIONAL PERFDATA
LONG TEXT LINE 1
LONG TEXT LINE 2
...
LONG TEXT LINE N | PERFDATA LINE 2
PERFDATA LINE 3
...
PERFDATA LINE N

必須なのは 1 行目の "TEXT OUTPUT" だけです。

もしパフォーマンスデータを出力したいときは "|" に続けて出力します。

Nagios 3.0 から複数行にわたる出力に対応するようになったみたいです。が、いまいち使い道がわからないので説明は省略。

終了コードの意味

Plugin 終了コードサービス状態ホスト状態
0OKUP
1WARNINGUP or DOWN/UNREACHABLE
2CRITICALDOWN/UNREACHABLE
3UNKNOWNDOWN/UNREACHABLE

サービス監視に使ったときとホスト監視に使ったときで意味が異なります。

まぁ、サービス監視でしか使わないだろうから OK, WARING, CRITICAL, UNKNOWN で設計しておけばいいんじゃないかな。

ちゃんとするには

Nagios Plugin APINagios plug-in development guidelines を読みましょう。

特に guidelines には

  • サポートすべきコマンドラインオプション
  • しきい値と範囲を指定する際の書式
  • などなど...

に触れているので一度は目を通した方がよいかも?

サンプルプラグイン

Perl で書きたいなら nagios-plugin に入っている check_breeze あたりがシンプルで参考にしやすいかも。シェルスクリプトで書きたいなら同じく nagios-plugin の check_sensors あたりが参考になるかなぁ。。

プラグインの置き場所

インストールの仕方にもよりますけど、標準のプラグインは、

  • CentOS/x86_64 に RPMforge で入れた場合は /usr/lib64/nagios/plugins に
  • CentOS/i386 に RPMforge で入れた場合は /usr/lib/nagios/plugins に
  • FreeBSD に ports で入れた場合は /usr/local/libexec/nagios に

それぞれインストールされるようなので、同じ場所に置いておいた方がよいのではないかと。

作ったプラグインの使い方

まず objects/commands.cfg にコマンドを定義しましょう。こんな感じ。

# 'check_example' command definition
define command {
	command_name		check_example
	command_line		$USER1$/check_example -H $HOSTADDRESS$ -w $ARG1$ -c $ARG2$
	}

check_example が他の check_* と同じ場所(上記 プラグインの置き場所 参照)に置いてあることを前提してます。 $USER1$ がその場所に置き換わるので。

$HOSTADDRES$ と $ARG1$, ... しか使わないと思うけど... ほかのマクロについて知りたい時は Understanding Macros and How They Work を参照のこと。

コマンドを定義したらあとはサービスの定義でそのコマンドを使うように設定する。こんな感じ。

define service {
	use			generic-service
	host_name		example
	service_description	EXAMPLE SERVICE
	check_command		check_example!100.0!500.0
	}

この例の通り設定したとすると、

check_example -H (example というホストのアドレス) -w 100.0 -c 500.0

のようにプラグインが実行されることになります。


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2010-06-25 (金) 16:48:36 (2727d)