トリガーアクションの実行条件を制御したいと思っています。
Zabbix-7.0.10
Ubuntu-24.04 x86_64
ログ監視で以下のようにメッセージがログファイルに出力された際「ABC-」を含む行を見つけたら発火するトリガーで
トリガーは通常通り発火してzabbixの障害としてヒストリには保存しますが1分以内に通知済みのメッセージは
全てのトリガーアクションを実行させず通知を抑制したいと思っています
ABC-0000 ...AAA... <- 通知する
ZZZ-0001 ...
ABC-0000 ...AAA... <- 通知しない
ZZZ-0001 ...
ABC-1111 ...AAA... <- 通知する
ZZZ-0001 ...
ABC-0000 ...BBBB... <- 通知する
ABC-0000 ...BBBB... <- 通知しない
アイテムの保存前処理やトリガー条件式での設定をあきらめ、zabbixのソースを弄って対応したいと思い
現在以下のソースにあたりを付けてデバッグしています。
zabbix-7.0.10+dfsg/src/zabbix_server/actions/actions.c
void process_actions(zbx_vector_db_event_t *events, const zbx_vector_uint64_pair_t *closed_events,
zbx_vector_escalation_new_ptr_t *escalations)
:
for (int i = 0; i < (zbx_fs_size_t)events->values_num; i++)
{
const zbx_db_event *event = events->values[i];
event->nameとevent->valueとキーと値にしてmemcacheから取得してきて
エントリーがない場合はタイムアウト1分で登録してアクションを実行
エントリが見つかったらアクションを実行させないようにしたいと思っています。
アクションを実行されないためにには↑の配列をどのようにすればよいか分かっておりません。
または別の箇所でこうすればできるなどの助言をいただきたく
開発チーム?みたいなフォーラムはありますでしょうか?
TNK - 投稿数: 4769
トリガーの設定で、
・障害イベント発生モードを「単一」にする
・検知して一定時間が経過したらトリガーが正常の状態に戻るような条件式にする
で実現できないでしょうか?
trinet - 投稿数: 37
助言ありがとうございます。
確認してみますが、「ABC-」を含むメッセージ全てを通知するトリガーなので、、ちょっと難しいきが・・
ABC-1111 -> 通知する
ABC-2222 -> 通知する
ABC-3333 -> 通知する
ABC-1111 -> 通知しない
ABC-1111 -> 通知しない
ABC-1111 -> 通知しない
https://www.zabbix.com/documentation/6.0/jp/manual/web_interface/fronten...
イベント相関関係でABC-(ここの数値)でタグを生成すれば可能でしょうかね?
使った事のない機能のためまだ試せていませんが・・・
因みにactions.cのis_escalation_eventにスキップ条件を追加すると行えそうでした。。
static int is_escalation_event(const zbx_db_event *event)
{
/* OK events can't start escalations - skip them */
if (SUCCEED == is_recovery_event(event))
return FAIL;
if (0 != (event->flags & ZBX_FLAGS_DB_EVENT_NO_ACTION))
return FAIL;
if (0 == (event->flags & ZBX_FLAGS_DB_EVENT_CREATE))
return FAIL;
if (スキップ条件)
return FAIL;
return SUCCEED;
}