決まった時間にだけアイテムを取得したい

MYSQLのバックアップを定期的(3時間に1回)に取得しており、
そのバックアップファイルが正常に生成されたことを以下のようなアイテムで取得しています。

system.run[/TEST/check_mysql_backupfile_accesslogdb.sh]
→特定のフォルダにバックアップフォルダができていることをチェックし、
 できている場合は「OK」、できていない場合は「NG」の結果を返す
→トリガーでは、「NG」の文字列を条件として通知するように設定

監視間隔を「10800」にして設定をしているのですが、
3時間に1回のタイミングがずれていて、バックアップファイルがない時間に
チェックをする状態になっています。

いくつか同じ設定をいれたのですが、一部はOK(バックアップタイミングと同タイミングで実行)となり、
一部はNG(バックアップタイミングとずれている)となっています。


・一度アイテムを無効にして再度有効にする
・一度監視間隔を変更して、再度元に戻す
・一度削除して、アイテムを作り直す(設定値は全て削除前と同じ)
といった対応をしたのですが、どうしても時間がずれてしまいます。

何かいい対応方法を教えていただけないでしょうか。
取得タイミング:0時、3時、6時、9時、12時、15時、18時、21時

よろしくお願い致します。

コメント表示オプション

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

通常、よく利用される、以下のアイテムの種別では、一定間隔毎の監視はできますが、実行時間を指定した監視を行うことはできません
・zabbix エージェント
・zabbix エージェント(アクティブ)

考えられるアプローチのひとつですが‥

zabbix 側に「zabbix トラッパー」型のアイテムとして、データを収集するためのアイテムを定義しておいて、
定期的に実行しているバックアップのスクリプト内部から、zabbix_sender プログラムを利用して、結果にあたる値を
server へ登録するのはいかがでしょうか?

sender から、トラッパーアイテムへ登録された値が OK ならば正常、NG ならばトリガーが発動するようにする
方式となります

ユーザー tomi12120321 の写真

連絡が遅くなりまして申し訳ありません。
ご回答ありがとうございます。

Zabbix_senderを良く分かっていないので、間違ってたらすいません。
ご回答いただいた内容を行っても、バックアップの確認をするタイミングは
Zabbixで制御すると対応できないような気がしますが違いますでしょうか。

シェルをcronで3時間に1回動作させればうまく動くかと思いますが…

認識違いがありましたらご指摘ください。

ユーザー heya の写真

こんにちは。

その通りです。
なので、fripper さんは cron でシェルスクリプトを動かして、その結果を zabbix_sender で zabbix サーバーに送るようにしたらいいと思うよ、という内容を書かれているのだと思います。

zabbix トラッパーのアイテムは、「xx分間隔でアイテムの値を取得する」というのではなく、「対象のホストからデータが送られてきたら(※)、それをその都度アイテムの値とする」というものです。今回の場合3時間に一回送られてくることになるのでしょう。

※でデータを送るプログラムが zabbix_sender です。単なるプログラムなので、他と完全に独立して実行できます(当然 zabbix サーバー側で適切な設定をしていないと無視されて終わりになりますが、とにかく実行はできます)。

でも、こういう「○時○分にチェック」みたいな需要は結構ありそうなんですけどね・・・。

ユーザー fripper の写真

> tomi12120321 さん
はい、ご認識いただいている通りで間違いありません
heya さんのフォローにもあります通り、cron からスクリプトを実行するように、監視対象側に仕込んでおき
当該スクリプト内で、sender を利用してサーバへ状態値を通知・登録‥といったものです

制限事項として、気をつけなければいけないのは、
通常の「zabbixエージェント」型アイテムの場合、通信は、server→agent(監視対象) 方向で行われますが、
zabbix_sender を利用して、監視データをサーバへ通知するスタイルを取ると、
「zabbixエージェント(アクティブ)」型アイテムと同じく、通信が「監視対象(sender実行ホスト)→server 方向となります

iptables 等、ファイヤーウォールに関連する設定によっては、通信が阻害されることがありますので
「うまくデータが通知されない」等の場合には、そのあたりもご確認ください

> heya さん
フォローありがとうございました。
私の考えていたこと、フォロー頂いたとおりの意図で間違いありません

#heya さんのフォローにもあるとおり
「定時実行や、指定スケジュールによる実行からの監視情報収集」
cron からの sender 利用の代替にもなりますし、欲しい機能ですね

ユーザー heya の写真

こんにちは。

探してみたら、ありました。
https://support.zabbix.com/browse/ZBXNEXT-2128
今後、どうなるんでしょうね。

ユーザー fripper の写真

早速 Vote しておきました

agentd 自身は、アクティブ型のアイテムの監視を定期的に実行するために、内部でタイマー的な処理を既に持っているはずですが、
cron やスケジューラ的に、指定条件と一致するタイミングで‥となると、処理の流れは大幅に変わるでしょうね

また、DB 上でのアイテム設定の表現方法も全く別モノにしないと、設定保持すらできないだろうと推測されることから、
2.2 系での実装はまず見込めそうにありませんね
(スキーマ変更はおそらくメジャー更新のみの対応ではないかと)

2.4以降のマイルストーンとなる 2.3.x 系が活発化してくれば、採用される「かも」しれません
Vote で期待を寄せつつ、待つしかなさそうですね。

今回、tomi12120321 さんの質問にあったような定時実行される処理(バックアップ等)に関する監視だと、
先日私が提案させてもらったように、
★★定時実行処理の内部で sender を直接呼び出してしまう★★
という方法以外では、
★★定時実行処理の結果値に相当するものを、ファイル等に一時保存するようにしておいて、★★
★★通常の zabbix_agent タイプのアイテムで、その一時保存された結果値情報を、「最新の結果」として serverに返す‥★★
程度しかパッと思い当たる方法がありませんね。

後者だと、前コメントにて書いた「ファイヤーウォールに関する云々」は気にしなくて良くなる代わりに
「結果情報を一時保存しておくファイル」が必要になってしまうことになりますね‥

処理真っ最中だったらどうするの? とか
前回は成功だったけど、今回は、結果ファイルを更新するまえにエラーで落ちちゃった‥等、
抜け穴を埋める考慮も必要になってきます‥(汗)