HEARTBEATS

Nagiosプラグイン自作方法の紹介

   

こんにちは。ハートビーツ運用スタッフの津田です。

ハートビーツからお届けする技術情報の初回シリーズ、Nagiosについての第4回です。

第3回ではNagiosの監視プラグインで、aptでインストールできるものをご紹介しましたので 今回は自作監視プラグインの作り方をご紹介します。
(ただし、ここではサービス監視に関するものをご紹介します。ホスト監視についてや、 細かい仕様については公式ドキュメントのNagios Plugin APIなどをご覧下さい。)

"作り方"と言っても、専用のプログラミング言語があるわけではありません。

プラグインを使って監視をしたいサーバで動くプログラミング言語であれば、どんな言語でも構いません。 前回ご紹介したプラグインはC言語で書かれていますが、シェルスクリプトや Perl,Ruby,Pythonで書いても構わないんです。

Nagiosで動くプラグインを作るための2つの約束事を、順番にご紹介しましょう。

約束事1:プラグイン自体の返り値が0,1,2,3のどれかであること

プラグインの終了コードは、サービスのプラグインとして使う場合は

  • 0:OK
  • 1:WARNING
  • 2:CRITICAL
  • 3:UNKNOWN

を表します。例えばシェルスクリプトであればexitコマンドで 終了コードを指定してプログラムを終了することが出来ます。

約束事2:最低でも一行のテキストを標準出力へ出力すること

終了コードの補足情報として、テキストを1行持たせることが出来ます。 例えばシェルスクリプトであれば、echoコマンドなどを使うだけです。 ただし2行目以降は無視されてしまいますので、改行をいれずに出力して下さい。 1行も出力が無い場合にはNagios側がエラーと見なしてしまい、UNKNOWNとして補足されてしまいます。

サンプルコード

以上を踏まえたcheck_dummyをシェルスクリプトで簡単に作ってみましょう。 check_dummyはもらった引数が0,1,2,3であれば、それに応じたステータスをそのまま返すプラグインです。


#!/bin/sh

# 終了コード
OK=0
WARNING=1
CRITICAL=2
UNKNOWN=3

# オプションを1つ受け取って、変数 status に格納します。
if [ $# != 1 ]
then
  echo "Just 1 argument is permitted."
  exit $UNKNOWN
else
  status=$1
fi

# 変数 status が 0,1,2,3 のどれかなら、それに応じたステータスを返し、終了します。
# 0,1,2,3 以外であれば UNKNOWN としてみましょう。
case $status in
  0)  echo "** OK **"
      exit $OK ;;
  1)  echo "** WARNING **"
      exit $WARNING ;;
  2)  echo "** CRITICAL **"
      exit $CRITICAL ;;
  3)  echo "** UNKNOWN **"
      exit $UNKNOWN ;;
  *)  echo "The argument $status is not permitted."
      exit $UNKNOWN ;;
esac

# 上で分岐が網羅されていれば、ここには来ませんが、念のため。
echo "** Error **"
exit $UNKNOWN

とても簡単なスクリプトでしたが、雰囲気はつかんで頂けたでしょうか?

応用例

ハートビーツでは主にaptでインストールできるプラグインを使用していますが、各案件に応じたプラグインを作成することもよくあります。

例えば1時間に3通受信して欲しいメールがあり、3通未満であればエラーを出すような監視がしたいとしましょう。 メールに対する監視であれば、Procmailと連携させるととても便利です。

受信して欲しいメールが来たら、Procmailから何らかのスクリプトへ処理を受け渡し、どこかのファイルへ受信数を保存します。プラグインとして実装すべき部分は、その保存された受信数を見に行き、ある時間に3通未満であればWARNINGやCRITICALとする部分のみです。

他には、会員制のホームページがあったとして、ログインした後に所定のページを回るまでに何秒かかるかを監視することも出来ます。 弊社ではLWP::UserAgentを利用して、Perlでこれを実装しています。

今あるプラグインを無理に作らなくても結構ですが、少し手を加えることでNagiosで出来ることはグンと広がります。是非挑戦してみてください!

株式会社ハートビーツの技術情報やイベント情報などをお届けする公式ブログです。



ハートビーツをフォロー

  • Twitter:HEARTBEATS
  • Facebook:HEARTBEATS
  • HATENA:HEARTBEATS
  • RSS:HEARTBEATS

殿堂入り記事