アイドルタイムの値がとれなくなるタイミングを検知するトリガー設定方法

こんにちは。
トリガーの設定について不明な点があり、自分では解決できなかったため、質問させて頂きます。

とあるserverのロジカルディスクのアイドルタイムの監視を行っています。
アイテムを登録し、値が正常にとれるところまでは設定できていますが、トリガーがうまく設定できません。

トリガーとしてひっかけたいこととしては、
アイドルタイムの値がとれなくなるタイミングです。
値がとれないというのは空白が入っているというわけではなく、値が何もない状態です。
1秒に1回値を取って、3回連続値がとれなかったら検知、というようにしたいです。

【ZabbixVersion】
3.0.5

【とれる値】
0
0.1111
1.1111
11.1111
21.111
1.44

等、様々です。

【アイテムの設定内容】
タイプ zabbixエージェント
キー perf_counter[\LogicalDisk(?:)\% Idle Time]
データ型 数値(浮動小数)
更新間隔1秒
単位 %

現時点でのトリガー
{ホスト名:perf_counter[\LogicalDisk(?:)\% Idle Time].count(#3,0,ge)}=0
3回連続0以上の値が0だったら検知(=数値がとれない)

以上を設定しましたが、障害とでてしまいました。

regexpを使って正規表現でひっかけることも考えたのですが、
regexpが 数値(浮動小数)をサポートしていないため、できませんでした。

nodata(#3)とかも使えたらいいのですが、nodata()はそういう使い方しませんし、、、

どなたか詳しい方教えていただけますでしょうか。

コメント表示オプション

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

 こんにちは。

結論から言うと、標準機能ではできません。

3秒間、値取得ができなかったら、アラートでよいですか?

count関数は、データベース上の値と比較するので、取得できなかった!を、拾うことができません。
nodataは、30秒ごとに評価するので、3秒の監視ができません。

また、デフォルトだとエージェントは3秒のタイムアウトがあるので、ご要望の監視が実装可能か?も、検討する必要があると思います。

考えられるのは、監視対象で監視用スクリプトを作成して、値はzabbix_senderで投げ込み、三回取れませんでしたを、ログに書くか異常値として、zabbixへ通知するしかないと思います。

ユーザー poypoy の写真

kingさん>
早々のご回答ありがとうございました。
count関数、nodata関数は今回設定したいことを実現できなさそうですね、、

>考えられるのは、監視対象で監視用スクリプトを作成して、値はzabbix_senderで投げ込み、三回取れませんでしたを、ログに書くか異常値として、zabbixへ通知するしかないと思います。

検討してみます。ありがとうございました。

ユーザー yk_taiko の写真

こんにちは。
(初投稿です)

負荷などあんまり考えなければ、標準機能でもできるかもしれません。

アイテム①:
該当のアイテム

アイテム②:
1秒更新のアイテム(計算アイテムが良い?)

トリガー:
アイテム①.nodate(3)=1
and
アイテム②.change()=0 ←合致すればなんでも良いです

アイテム②が更新されるたびにトリガーが評価されるので、1秒間隔で評価されるかと思います。

ユーザー kaeru の写真

nodataの期間は30秒以上であることが条件のため難しいかと思います。
内部イベントで取得不可になったアイテムを検知することは出来ますが、
前段としてagent.logまたはserver.logにエラーは出ていないか、キューが詰まっていないか確認してみて下さい

ユーザー yk_taiko の写真

マニュアルにも記載されている 30 秒の制限ですが、
私の環境では nodata を 30 秒未満にしても判定を行ってくれることから、
30 秒の縛りは、毎分0秒, 30秒の判定がある為だと勝手に解釈しておりました。

30秒未満にするとどのような不具合が起こるのか、おわかりになりますでしょうか。。。

(別にスレッドをたてた方が良さそうでしょうか)

ユーザー kaeru の写真

>>yk_taiko様
本筋から逸れてしまいますが、
以下の環境で確認してみました。

環境:Zabbix 3.0.10(CentOS7.2)
-------------------------------------------------
・アイテム
agent.ping(更新間隔500秒)
・トリガー
{Zabbix server:agent.ping.nodata(5)}=1
 ※障害イベントを継続して生成
-------------------------------------------------

上記の通り、5秒間隔で障害判定を行うように設定しましたが、
やはり30秒毎に障害判定されており5秒が効いておりませんでした。
バージョンの違い等もあるかと思いますので別途スレッドを立てて頂いた方が良いかもしれません。

ユーザー yk_taiko の写真

> kaeru 様
わざわざご確認ありがとうございます。

詳細を掘り下げますと本スレッドのご質問内容から外れてしまうかと思いますので、
別スレッドにて質問するようにいたします。

ユーザー poypoy の写真

kaeruさん>
ご回答ありがとうございます。
nodataで設定したいことを実現することができなそうなため、

>監視対象で監視用スクリプトを作成して、値はzabbix_senderで投げ込み、三回取れませんでしたを、ログに書くか異常値として、zabbixへ通知するしかないと思います。

以上のことを検討してみます。

ありがとうございました。