Presented by DMZ. (非武装エリア)
最終更新日: 2019年8月15日
(This site is not official.)

Topに戻る

監視サービスの作成

テンプレートに存在しないサービスを監視するにはどうしたら良いでしょう。NTP を例に説明していきます。 まずサービスを監視する方法としては次の方法が考えられます。
  1. 実際にサービスと通信するソフトを使って確認する。(ex: ntpdate コマンド等)
  2. サービスプログラムが動作している事を確認する。(ex: psコマンド等)
  3. SNMPでサービス情報を取得する
c.については、SNMPに関する資料を確認してみてください。
a. の方法についてはサービスに対応できるコマンドが用意されていることが条件になり、必ずしも有効な方法では無いので以下では b. の方法について説明していきます。 なお、使う手法は a. も b. も同じなので、b.の方法が判ればその応用で a. についても判ると思います。
では、b. の方法について具体的に見ていきます。
※ b.の方法を実現するには、監視対象側にZabbixエージェントが動作している必要があります。
  1. Linux(Unix)におけるプロセスの確認方法のおさらい
Linuxではサービス(プロセス)を起動する際に、現在すでにそのサービスが稼働中で2重実行にならないかをサービス起動時にチェックする仕組みを取っています。
また、この情報はサービスのステータスを確認することで容易に知ることができます。 試しに、Linux上で次のコマンドを実行してみてください。

# systemctl --no-pager status ntp

NTPサーバが稼働中であれば Active: の値が"active (running)"に、そうでない場合には"inactive (dead)"となっていると思います。 このコマンドは、内部的には"ps"でのプロセス確認と同じ事を実施して、NTPサービスが既に起動しているかを確認します。 このコマンドを実施したとき、コマンドの戻り値として稼働中の場合には"0"を、停止中の時には"0"以外の値を返してきます。これを利用してプロセスが起動中かそうでないかを確認する事が可能です。
  1. プロセス稼働の確認方法
上で説明したとおり、あるプロセスが稼働中かどうかを調べる方法が存在すればそれを使ってZabbixで監視アイテムを作ることが可能です。 まず、最初に監視対象のホスト上で次のようなスクリプト(/etc/ck_run_ntp.sh)を作成します。 このスクリプトは、NTPサービスのプロセスを確認して、プロセスが起動されていれば"1"を、そうでなければ"0"を表示するようになっています。

(/usr/bin/ck_run_ntp.sh)

#!/bin/sh
# ---------------------------------
# /etc/ck_run_ntp.sh
# NTPd running status checker.
# Return Status: 1 = Runnning
# 0 = not Running
# ---------------------------------
ret=0
/bin/systemctl --no-pager status ntp >/dev/null || ret=$?
if [ "$ret" = "0" ]; then
# runnning
echo 1
else
# not runnning
echo 0
fi

作ったスクリプトは実行権を与えるために次のコマンドを実行します。

# chmod +x /usr/bin/ck_run_ntp.sh

監視対象のホスト側でスクリプトが完成したら、今度はZabbixサーバ側での設定を行っていきます。 
「設定」-「ホスト」で、対象とするサーバを選択します。 選択したサーバの「アイテム」をクリックします。
画面右の「アイテムの作成」をクリックします。
以下のように登録します。
これで監視アイテムの作成は完了です。 続いて、この監視アイテムに対するトリガー(イベント)を設定します。
[設定] - [ホスト] から監視対象のサーバーの [トリガー] を選択します。 画面右上の [トリガーの作成] をクリックします。
トリガーを作成ししていきます。
まず、 
を入力したら、条件式の [追加] をクリックします。
トリガー条件式のアイテムとして、つぎのように指定し [挿入] をクリックします。

アイテム: NTP Server is running (system.run[/etc/ck_run_ntp.sh])
機能: 最新(T秒前/T個前)の値 = N
残りのアクションを指定します。
以上で完了です。これで、NTPサービスが停止すれば以下のように障害として報告されてきます。
このサービス監視方法は汎用性はありますが1つだけ弱点があります。 チェックしているのはプロセスが動作しているかでどうかであり、プロセスが”正常”に機能しているかについては監視していません。 たとえば上記のNTPのチェックでは、もし障害がNTPプログラムのネットワークに関するものだと、見た目はプロセスは正常に動作しているにも関わらず実際には機能していないというケースが考えられます。 これを回避するには、実際にそのサービスを使った確認の監視アイテムとトリガーを作成すれば良い訳ですが、それは最初に説明した a. の方法を取れば可能でしょう。 ただ、利用するコマンドによっては応答に時間を要するものがあるため、サービスと通信するプログラム使う方法での確認はそのプログラムの特性を考慮した上での採用をお勧めします。

Topに戻る