→ Topに戻る
監視したいサービス用のテンプレートが存在しない場合には、新たにそのサービスを監視するための方法が必要となります。 特にUDP通信を行う ntpサーバやDNSサーバでは、TCPコネクションを使った通信でないためZabbixの標準で持つTCPポートのコネクションを確認する方法での監視ができません。このようなサービスの状態を監視するには次のような方法が考えられます。
- 対象のサービスと通信するソフトを使って確認する。
- 対象のサービスが動作している事を確認する。
- SNMPでサービス情報を取得する
c. については、SNMPに関する資料を確認してみてください。
a. の方法は、実際に監視したいサービスが機能しているかを調べるの確実な監視が可能です。
b. の方法は、機能が正常かどうかまでは調べませんが、監視サービスのプログラムが稼働しているかを判断するのに役立ちます。
機能が正常に動作するか確認する場合
監視対象のサービスが正常に機能しているかを調べるには、そのサービスを実際に使うコマンドを利用する方法での確認が考えられます。例えばNTPサーバーとの通信にはntpdateコマンド、DNSサーバーの確認にはnslookupコマンドを使う事が可能です。 Zabbixではこれらのコマンドをスクリプトを使って実行する事で、サービスが正常に機能しているかをチェックできます。
この時、これらのスクリプトを実行するのがZabbixサーバーなのか監視対象ホスト上なのかによって設定方法が違ってきます。
また、それぞれの方法では以下のように動作の違いがあります。
■ Zabbixサーバー側でスクリプトを実行する場合:
- 監視対象でZabbixエージェントが実行されていなくても監視可能です。
- コマンド実行はZabbix側なので、監視対象に実行コマンドやスクリプトが存在しなくても監視が可能です。
- 監視対象からの応答が無い場合、タイムアウトまでコマンドが待たされるため、Zabbixサーバーに負荷がかかります。
■ 監視対象側でスクリプトを実行する場合:
- 監視対象でZabbixエージェントが動作している必要があります。
- コマンド実行は監視対象側なので、監視対象に実行コマンドやスクリプトが存在している必要があります。
- 監視対象からの応答が無い場合でも、Zabbixサーバーへの負荷はあまりかかりません。
これらの違いを踏まえ、最適な方法で監視を行う必要があります。
サービスが動作している事を確認する場合
Windwsではservice.info[]というキーを使うことで、監視対象のホスト上でサービス(プロセス)が正常に動作しているかを確認でできます。 このキーはLinuxでは利用できない為、上の「監視対象ホスト側でコマンドを実行する」の方法と同じように監視対象ホストでスクリプトを使って判断します。
Linuxではサービス(プロセス)を起動する際に、現在すでにそのサービスが稼働中で2重実行にならないかをサービス起動時にチェックする仕組みを取っています。
また、この情報はサービスのステータスを確認することで容易に知ることができます。 試しに、Linux上で次のコマンドを実行してみてください。
# systemctl --no-pager status ntp
● ntp.service - LSB: Start NTP daemon
Loaded: loaded (/etc/init.d/ntp; generated; vendor
preset: enabled)
Active: active (running) since Wed 2021-11-10 06:29:42 JST; 4 days ago
Docs: man:systemd-sysv-generator(8)
Process: 37902 ExecStop=/etc/init.d/ntp stop (code=exited,
status=0/SUCCESS)
Process: 37922 ExecStart=/etc/init.d/ntp start
(code=exited, status=0/SUCCESS)
Tasks: 2 (limit: 9830)
CGroup: /system.slice/ntp.service
└─37932
/usr/sbin/ntpd -p /var/run/ntpd.pid -g -u 108:113
NTPサーバが稼働中であれば Active: の値が"active (running)"に、そうでない場合には"inactive (dead)"となっていると思います。 このコマンドは、内部的には"ps"でのプロセス確認と同じ事を実施して、NTPサービスが既に起動しているかを確認します。 このコマンドを実施したとき、コマンドの戻り値として稼働中の場合には"0"を、停止中の時には"0"以外の値を返してきます。これを利用してプロセスが起動中かそうでないかを確認する事が可能です。
上で説明したとおり、あるプロセスが稼働中かどうかを調べる方法が存在すればそれを使ってZabbixで監視アイテムを作ることが可能です。 まず、最初に監視対象のホスト上で次のようなスクリプト(check_process_ntp.sh)を作成します。 このスクリプトは、NTPサービスのプロセスを確認して、プロセスが起動されていれば"0"を、そうでなければ"0以外"を表示するようになっています。
(/usr/local/check_process_ntp.sh)
#!/bin/sh
# ---------------------------------
# check_process_ntp.sh
# NTPd running status checker.
# Return Status: = 0 (Runnning)
# != 0 (not Running)
# ---------------------------------
ret=0
/bin/systemctl --no-pager status ntp >/dev/null || ret=$?
echo $ret
作ったスクリプトは実行権を与えるために次のコマンドを実行します。
# chmod +x /usr/local/bin/check_process_ntp.sh
監視対象のホスト側でスクリプトが完成したら、今度はZabbixサーバ側での設定を行っていきます。
「設定」-「ホスト」で、対象とするサーバを選択します。 選択したサーバの「アイテム」をクリックします。画面右の「アイテムの作成」をクリックします。
以下のように指定します。
- 名前: 適当な判りやすい名前(ex. "check running NTP")
- タイプ: Zabbixエージェント (チェック処理をエージェントに実施させる)
- キー: system.run[/usr/local/bin/check_process_ntp.sh]
- 更新間隔: 5m
- ヒストリの保存期間: 7d
- トレンドの保存期間: 30d
- アプリケーション: Status
登録の前にこのスクリプトのテストを行うために、[テスト] をクリックします。
[値の取得とテスト]をクリックすると監視対象ホストでスクリプトが実行されてそのステータスが"値"に返ってきます。
テストができたら最後に[追加]をクリックしてアイテムの登録を行います。
これで監視アイテムの作成は完了です。 続いて、この監視アイテムに対するトリガー(イベント)を設定します。
[設定] - [ホスト] から監視対象のサーバーの [トリガー] を選択します。 画面右上の [トリガーの作成] をクリックします。
トリガーを次にように作成ししていきます。
(1) まず、NTPサービスに障害が発生したと判断するトリガーを作成します。
- 名前: トリガーの名前 (ex. "NTP service is down on {HOSTNAME}")
- 深刻度: この障害の深刻度を定義 (ex. "重度の障害")
- 条件式: [追加] をクリックして条件式ビルダーを起動する
→ "check running NTP"アイテムの値が0以外に変化すればこのトリガーが1回だけ発生する
条件式として判定に使うアイテムと、その判定基準を定義します。 ここでは"check running NTP"というアイテムが0以外だった場合に障害と判定します。
条件式を指定できたら、[追加]をクリックしてトリガーを登録します。 以上で、NTPサービスに問題がある場合にこのトリガーが"重度の障害"として発生されます。
以上で完了です。これで、NTPサービスが停止すれば以下のように障害として報告されてきます。
このサービス監視方法は汎用性はありますがチェックしているのは”プロセスが動作しているかでどうか”であり、プロセスが”正常に機能しているか”については監視していないことに注意してください。 たとえば上記のNTPのチェックでは、障害が上位のNTPサーバーとの通信との問題に関するものだと、見た目はプロセスは正常に動作しているにも関わらず実際には機能していないというケースが考えられます。 これを回避するには、実際にそのサービスを使った確認の監視アイテムとトリガーを作成すれば良い訳ですが、それは最初に説明した「機能が正常に動作するか確認する場合」 の方法を取れば可能でしょう。 ただ、利用するコマンドによっては応答に時間を要するものがあるため、サービスと通信するスクリプトを使う方法での確認はそのプログラムの特性を考慮した上での採用をお勧めします。
→ Topに戻る