【AIによる概要】
Zabbixの標準機能で「特定のホストグループ配下で発生した複数のアラート(障害イベント)を1通の通知にまとめて送る」には、「アクションの実行内容」で実行ステップの間隔(エスカレーション機能)と条件を利用して制御する、または「グローバルイベント相関」機能を使って障害を統合する方法があります。最も一般的で設定しやすい「アクションのエスカレーション機能を利用して通知を一定時間待つ(まとめる)」設定手順を解説します。
方法1:アクションのエスカレーション機能で通知をまとめるこの設定を行うと、指定グループ配下で複数の障害が連続して発生しても、指定した時間(例: 5分間)通知を保留し、その間に発生したアラートを1つの通知としてまとめて送ることができます。1. 新しい「ユーザー」「ユーザーグループ」の準備(推奨)まとめた通知を受け取るための専用のユーザーグループを作成します。
- 【管理】→【ユーザーグループ】(または【ユーザー】→【ユーザーグループ】)から「アラートまとめグループ」を作成します。
- 【権限】タブで、対象となる「任意のホストグループ」に対して読込専用以上の権限を付与します。
- そのグループに通知を受け取るユーザー(メディア設定済みのユーザー)を所属させます。
2. アクションの条件設定
- 【アラート】→【アクション】→【トリガーアクション】 を開き、「アクションの作成」をクリックします。
- 【アクション】タブで任意の名前を入力し、実行条件に以下を追加します。
ホストグループ=(対象の任意のグループ名)3. 実行内容(通知をまとめるエスカレーション設定)
- 【実行内容】タブを開きます。
- デフォルトの操作の間隔 を、アラートをまとめたい時間(例:
5m= 5分)に設定します。 [1, 2]- 「実行内容」の「追加」をクリックし、以下のように設定します。
- ステップ:
2から2(※ここがポイントです。ステップ1を空欄にすることで、発生直後の通知を1回見送ります)- 次のユーザーグループに送信: 先ほど作成した「アラートまとめグループ」を指定
- 次のメディアのみ使用: 使用する通知媒体(Email、Slackなど)を指定
- 変更を保存します。
💡 仕組み:障害が発生するとステップ1(最初の5分間)に入りますが、設定が空のため通知されません。5分の間に同じグループ内で複数の障害が発生しても、Zabbix内部で同一イベントのステップが進行し、5分後にまとめて処理(あるいは、サマリー対応のマクロ等で制御)されます。
方法2:グローバルイベント相関(Event Correlation)を使う [1]もし「まとめる」の定義が、「同じグループの別ホストで同じ障害が起きたら、2つ目以降の障害イベント自体を自動でクローズ(非表示)にしたい」 という意味であれば、グローバルイベント相関機能を使用します。 [1]
- 【設定】→【イベント相関関係】 から「相関ルールの作成」をクリックします。
- 論理式に以下を設定します。
- 条件A:
新イベントのホストグループ=(任意のグループ)- 条件B:
古いイベントのタグと新しいイベントのタグが一致(例:Serviceタグなど)- 実行内容 で 「新イベントをクローズ」 にチェックを入れます。
- これにより、同じグループ内で1つ目のアラートが解決していない間、2つ目以降の類似アラートが自動で「正常(クローズ)」扱いになり、通知の乱発を防げます。
外部ツールとの連携(根本的な解決策)Zabbix標準機能の「通知を遅らせてまとめる」設定は、通知件数は減らせるものの、メールの本文を綺麗に1通に合算するのには限界があります(通知文が複数に分かれて届く場合があります)。もし「完全に1通のメッセージに複数件のアラート情報を箇条書きにしてまとめたい」という場合は、以下の外部連携が現場でよく使われています。
- WebhookでSlackやTeamsに送るスクリプトを作る:Zabbixから数分間のアラートをバッファ(蓄積)し、Python等のスクリプトを経由して1通に整形してチャットに投げる。 [1, 2]
- PagerDutyなどのインシデント管理ツールを使う:PagerDutyのスマートグルーピング機能などを利用すると、Zabbix側は通常通りアラートを飛ばすだけで、同じホストグループやサービスの大量アラートを自動で1つに集約してくれます。 [1]
ご利用中の Zabbixのバージョン(例:6.0 LTS、7.0 LTSなど)や、通知に使っている媒体(メール、Slack、Teamsなど)を教えていただけますか?環境に合わせた具体的な設定方法をお伝えできます。
