Zabbix Server自体を定期的に生存監視することはできますか?

いつもこちらのサイトで勉強させて頂いています。
連続投稿ですみませんが、皆様のアドバイスを頂きたく思います。

現在、監視サーバ、本番サーバともに、
異なる地域のAmazonEC2クラウド環境(DebianLinux)を使っています。

監視サーバに導入しているZabbix Serverが止まった場合、
下記トリガーに基づいて障害メールを飛ばすようにしています。
※デフォルト設定だとは思いますが。

 名前:Zabbix_server is not running on {HOSTNAME}
 条件式:{ZABBIX Server:proc.num[zabbix_server].last(0)}<1

似たような目的ではありますが、Zabbix Serverが動いていることを半日に1回など、
定期的にチェックして情報メールを飛ばすように設定することはできるでしょうか?

標準的なアイテム一覧を調べていたところ、
タイプ「シンプルチェック」のicmppingキーが使えそうな気がしたのですが、
「Zabbix本体が入っているAmazonサーバ」ではなく
あくまで「Zabbix Server」の生存監視ですので、
pingはずっと返ってくるような気がして検証していません。

http://www.zabbix.jp/modules/newbb/viewtopic.php?topic_id=754&forum=2&post_id=3598#forumpost3598

コメント表示オプション

お好みのコメント表示方法を選び「設定の保存」をクリックすると変更が反映されます。
ユーザー TNK の写真

Zabbix Serverが稼動しているのは、監視サーバ上のみですか?
そうであるならば、Zabbix Server自体に障害が発生して監視できないような状態になっていたら、そのZabbix Serverの障害を検知してメールを送ることができない状態になっている可能性が高いと思われます。
例えば、zabbix_serverプロセスが停止してしまっているような場合は、その監視サーバでは障害を検知してメールを送ることができません。

万が一、監視サーバに障害が発生した際に検知できるようにするためには、監視サーバを監視するサーバを、別途別のリージョンなど他のロケーションに設置されることを検討されてはいかがでしょうか?

ユーザー Lloyd の写真

返信ありがとうございます。
監視サーバAでZabbix Serverが稼動しており、本番サーバBでZabbix Agentが1つだけ稼動しています。

TNK様が記載の通り、Zabbix Server自体に障害が発生したら一切のメールを飛ばせなくなります。
ですので、半日に1回「Zabbix Serverは生きていますよ」という内容の情報メールを飛ばすことで、
監視サーバAに障害が発生した際に管理者が気づけるようにしたいと思っています。

監視サーバCを別のリージョンに追加してサーバAを監視させるという方法も考えたのですが、
あまり管理する資源を増やしたくないもので・・・。

引き続き調べていると、「net.tcp.service」は
localhostから毎分1回connectして生存確認を行っているらしいと書いてありました。
これを応用して、Zabbix Server自体の生存確認ができないか、現在調べています。

http://yaw.jp/hobby/linux/article/zabbix.html

よろしくお願いします。

ユーザー TNK の写真

引き続き調べていると、「net.tcp.service」は
localhostから毎分1回connectして生存確認を行っているらしいと書いてありました。
これを応用して、Zabbix Server自体の生存確認ができないか、現在調べています。

zabbix_serverが正常に機能していれば、それ以外にも確認する方法はあります。

繰り返しになりますが、監視サーバ上のzabbix_serverが正常に機能していなければ、どんな監視項目を設定しても、その情報を取得してアクションをおこすこと(メールを送る等)ができません。

Zabbix Serverが正常に機能しているかを監視するためには、別途、そのZabbix Serverを監視するための仕組みを用意する必要があります。
監視サーバ1台だけでは実現できません。

ユーザー Lloyd の写真

返信ありがとうございます。

説明が不十分でお恥ずかしいですが、
「定期的なメールが来ないことで監視サーバAがダウンしていることを検知する」のが目的です。
そのため、監視サーバAが正常に機能しなくなった時、メールが送られてこなくてもよいです。

■生存メールが半日に1回送られてきている⇒監視サーバAは正しく稼動している。問題なし!
■生存メールが丸1日送られてこない⇒監視サーバAがダウンしているかも。調べてみよう!

上記のような運用をしたいと考えております。
******************
net.tcp.serviceで下記のように行い、60秒ごとにメールが送られるか試してみたのですが、
最初の1回しか送られてきませんでした。
障害状態が継続している場合、発生した瞬間しかアクションは起こらないということですね。
検知のつど、アクションが起こるようにしたい=メールが送られるようにしたいので、
引き続き調べます。

■アイテム【WEB (HTTP) server is running】
キー:net.tcp.service[http]
更新間隔(秒):60
例外の更新間隔の作成:間隔50、期間1-7,00:00-23:59
アプリケーション:Services

■トリガー【WEB (HTTP) server is good-condition on {HOSTNAME} test】
条件式:{xxxxx_Honban:net.tcp.service[http].last(0)}>0
深刻度:警告

■アクション
コンディション:トリガーの深刻度 >= "警告"
オペレーション:メッセージの送信先 ユーザ "Admin"

ユーザー TNK の写真

継続してトリガーが有効になるようにされたいのであれば、トリガーのイベント生成の設定で「ノーマル+障害イベントを継続して生成」を選択してみてはいかがでしょうか。

ユーザー Lloyd の写真

返信ありがとうございます。

「イベント生成」の項目についてはこちらの過去ログで確認していたので試してみようと思ったのですが、
バージョンが 1.4.5 と古いものだったので、項目自体ありませんでした。

>障害発生時に複数回トリガーを発生させたいため、
>トリガーの設定内の「イベント生成」に対して「ノーマル+障害イベントを継続して生成」を選択しています。
http://www.zabbix.jp/modules/newbb/viewtopic.php?viewmode=flat&order=DESC&topic_id=699&forum=6

インストールは昨年秋に行い、下記URLを参考にputtyjpからコマンド
 >aptitude install zabbix-server-mysql
を叩いてインストールしたのに、なぜこんなに古いバージョンなのか…。
http://yaw.jp/hobby/linux/article/zabbix.html

今は、AmazonEC2に新しいインスタンスを用意して、そこに新しいZABBIXをインストールし、
監視サーバA自体を新しくする以外に方法はないかと調べているところです。
既に本番稼動しているので、できることなら既存の監視サーバA内部で対処したいですが、
他に良い案が思いつかず・・・。

ユーザー TNK の写真

古いZabbixなら、トリガーの条件式にnodata()を組み合わせて一定時間経過後に障害復旧とみなすようなことができたと思います。

とはいえ、1.6.xか1.8.xへのバージョンアップをしたほうが、新しい機能が利用できたり、操作性も改善されているのでご検討下さい。

ユーザー Lloyd の写真

返信ありがとうございます。
バージョンアップは後日改めて検討するとして、ひとまずは1.4.5で動作させたいと思います。

「ZABBIX_Manual_v1.4_jp.pdf」を参考に、nodata()を設定してみました。
設定値は下記のとおりです。
トリガーを有効にすると、障害が報告されてしまいます。
60秒間データを受信していないという意味だと思うのですが、
ブラウザで監視データ⇒最新データを見ると正しくデータを受信できています。
アイテムの設定が間違っているのでしょうか?
質問ばかりで申し訳ありませんが、よろしくお願いします。

■アイテム 'xxxx_Honban:tick_test'
 名前:tick_test
 タイプ:zabbixトラッパー
 キー:tick
 データ型:数値(整数)
 アプリケーション:なし

■トリガー "watch_server is normal-condition ok"
 グループ:Linux servers
 ホスト;xxxx_Honban
 名前:watch_server is normal-condition ok
 条件式:{xxxx_Honban:tick.nodata(60)}=1

ユーザー TNK の写真

nodata()だけではなく他の監視アイテムと「組み合わせて」ください。

先ほど挙げられていたトリガーに対して組み合わせると以下のように設定すれば良いと思います。
<code>
■トリガー【WEB (HTTP) server is good-condition on {HOSTNAME} test】
条件式:({xxxxx_Honban:net.tcp.service[http].nodata(60)}=0)&({xxxxx_Honban:net.tcp.service[http].last(0)}>0)
深刻度:警告
</code>
実際に設定して動作確認までは行っていないので、誤っていたら申し訳ありません。

ユーザー Lloyd の写真

早速の返信ありがとうございます。
おかげさまで少しずつゴールが見えてきました。

■トリガー "www_watch_server is normal-condition ok"
({LINeS_Honban:net.tcp.service[http].nodata(60)}=0)&({LINeS_Honban:net.tcp.service[http].last(0)}>0)
({LINeS_Honban:net.tcp.service[http].last(0)}>0)&({LINeS_Honban:net.tcp.service[http].nodata(60)}=0)
深刻度:警告

念のため、上記の2パターンで設定し、10分ほど放置してみましたが、結果は同じでした。

■監視データ⇒トリガーでwww_watch_server is normal-condition okをクリック
 ステータス「障害」が1件のみ。

■監視データ⇒アクション
 アクションの履歴にメールの送信記録があるが、
 送信されたのは障害発生直後の1回だけ

マニュアルPDFを見ると
>>「tick」のタイプには[ZABBIXトラッパー]を選択します。
>>このトリガーを使用するには、アイテム「tick」を定義する必要があります。
>>{zabbix.zabbix.com:tick.nodata(180)}=1
とあります。

「net.tcp.service[http]」のタイプをアイテム画面で確認するとZABBIXエージェントになっているので、
ここでZABBIXトラッパーと言うアイテムを何か作成し、
それとnodataを組み合わせればよいのでしょうか?

ユーザー TNK の写真

アイテムのチェック間隔よりnodata()の引数の値を小さくしてみてください。

ユーザー Lloyd の写真

無事、一定時間ごとにメールを飛ばすことができました!
これで、
生存メールが丸1日送られてこない⇒監視サーバAがダウンしているかも。調べてみよう!
という運用管理ができます。ありがとうございます。

後学のため、設定内容を書いておきます。

■アイテム 'xxxxx_Honban:WEB (HTTP) server is running'
 キー:net.tcp.service[http]
 更新間隔:36000

■トリガー "www_watch_server is normal-condition ok"
 条件式:({xxxxx_Honban:net.tcp.service[http].last(0)}>0)&({xxxxx_Honban:net.tcp.service[http].nodata(10800)}=0)
 深刻度:警告

■監視データ>アクション>アクションの履歴
 2011.Mar.29 19:29:53 Email送信
   件名: www_watch_server is normal-condition ok: OFF
 2011.Mar.29 16:29:28 Email送信
   件名: www_watch_server is normal-condition ok: ON
 2011.Mar.29 13:01:50 Email送信
   件名: www_watch_server is normal-condition ok: OFF
 2011.Mar.29 10:01:48 Email送信
   件名: www_watch_server is normal-condition ok: ON