こんにちは、SCSKの坂木です。
ZabbixとPagerDutyを連携させると、障害発生時に電話で通知を受け取れるようになり非常に便利です。しかし、設定を間違えると「深夜にアラートが連発して、電話が鳴り止まない」という大変な事態になります。
今回は、Zabbixから短期間に同じような障害通知が連続して発生した場合でも、PagerDuty側でそれらを「1つのインシデント」としてまとめ、電話通知を「1回」に抑える方法を解説・検証します。
検証構成
今回の構成は以下の通りです。
[Zabbix] —-(Webhook)—-> [PagerDuty] —-(電話通知)—-> [運用担当者]
ZabbixとPagerDutyの基本的な連携(Integration Keyの設定など)は完了している前提で進めます。
ZabbixとPagerDutyの基本的な連携はこちらに記載してますので、未設定の方は参考にしてください。
電話通知の設定
PagerDuty側で電話番号を登録します。
1. PagerDuty画面右上のアイコンから [My Profile] を選択。
2. [Contact Information] に電話番号を登録します。
3. [Notification Rules] タブで以下のように、緊急度の高いインシデントのみ電話通知するよう設定します。
High Urgency(緊急度:高): Email と 電話
Low Urgency(緊急度:低) : Emailのみ(電話は設定しない)
Service Orchestrationの設定
Zabbixから送られてきた全ての障害通知に対して電話通知すると、電話が鳴りやまないという状況になります。そのため、送られてくる障害情報に応じて緊急度を振り分け、電話通知するかしないかを判断する必要があります。
今回は特定のホストからの通知であれば高い緊急度にして電話通知されるように設定します。(前章で出てきた、High Urgencyに振り分けられるようにします)
1. 対象の Service を選択し、[Settings] タブを開きます。
2. [Service Orchestrations] セクションを探し、ルールを新規作成(New Rule)します。
ルールの設定内容
条件(Condition) : event.source matches part ‘<対象のホスト名>’ (今回は testhost でフィルタリング)
アクション (Actions): Set severity to error / critical
今回条件は1つですが、電話通知させたい条件を追加する場合は下の [+] を押して複数の条件を設定できます。
それ以外(Fallback Behavior)の設定
「上記のルールに当てはまらないもの(=重要じゃないホスト)」のアクションを以下のように設定します。
Alert Behavior: Set alert severity to warning / info
Assign and Notifyの設定
ここで対象Serviceの [Settings] タブにある [Assign and Notify] セクションを確認してください。
この設定により、ルールで判定された Severity: Critical/Error が High Urgency(電話通知) に、Severity: Warning/Info が
Low Urgency(メール通知) に自動的に変換されます。
これで、testhostからの障害通知は High Urgency それ以外は Low Urgency という自動振り分けの仕組みが完成しました。
Alert Groupingの設定(Service Settings)
重要サーバの障害であっても、1分間に10回も電話がかかってきては対応できません。
そこで、Zabbixから送られてくるアラートについて関連するものはまとめる設定に変更します。
1. Zabbixを連携させている Service を開き、[Settings] タブをクリック。
2. [Reduce Noise] セクションにある [Automatically group alerts by similarities in alert summaries, historic alert patterns and past merged alerts.] を選択し、後続の類似アラートを同一インシデントとしてまとめる期間を指定します。
(今回の検証では5分として設定しました。)
検証その1
それでは、実際に障害を発生させて挙動を確認します。
Zabbixサーバから、特定ホストの障害アラートを短期間で十数件送信します。
実行結果
① スマホへの着信確認
携帯電話には、1回だけ 自動音声の電話がかかってきました。
② PagerDuty上の表示確認
PagerDutyのインシデント一覧を確認すると、作成されたインシデントは 1件だけ でした。
Zabbixから送った複数の障害通知をPagerDuty側でひとつに集約でき、電話回数も集約した1回のみになることを確認しました。
Service Orchestrationの応用:アラートの「数」で緊急度を動的に変える
ここでは、さらに一歩進んだ設定を行います。
特定のサーバ(testhost)からの通知は、普段はメールだけでいいけれど、短期間に大量のエラーを吐いた時だけは電話を鳴らしてほしい という、「量」に応じた動的な通知コントロールを実現します。
これを実現するために、PagerDutyの Service Orchestration Rules を使用します。
手順①:対象ホストのSeverityを下げる(親ルール)
先ほど設定した特定のホスト(今回は testhost)からの通知を、Warning(電話を鳴らさない)設定にします。
条件(Condition) : event.source matches part ‘<対象のホスト名>’
アクション (Actions): Set Severity to warning
これで、testhost からのアラートは、通常時に「Low Urgency」として扱われ、メールのみ(電話なし)となります。
手順②:閾値を超えたらSeverityを上げる(子ルール)
次に、この親ルールの隣にある [+] ボタンを押し、子ルールを追加します。ここで「数」をカウントします。
今回は1分間で100件以上の通知があった場合に、critical(電話あり)となる設定とします。
条件(Condition) : trigger_count over 1 minutes > 100
アクション (Actions): Set Severity to critical
この設定により、testhostからの通知であり(親ルール)、かつ、短時間で大量のアラートが来ている(子ルール) 場合のみ、強制的に緊急度が高(Critical)になり、電話が鳴るようになります。
検証その2
実際に testhost からアラートを飛ばして挙動を確認します。
検証パターンA:電話なし
まずは、testhost から障害通知を数十件送信します。
【結果】
PagerDutyの判定: Low
通知 : メール通知のみ届きました
期待通りです。単発的なエラーや一時的な揺らぎであれば、担当者を叩き起こすことはありません。
検証パターンB:電話あり
次に、testhost から1分間以内に100件以上の障害通知を送信します。
【結果】
PagerDutyの判定: High
通知 : 電話とメールの両方から通知が届きました
まとめ
今回の検証で、ZabbixとPagerDutyを組み合わせることで、大量のアラート通知を適切に制御できることが確認できました。
重要なポイントは以下の3点です。
- Service Orchestration: ホスト名や発生頻度に応じて、電話通知の要否を自動で判断する。
- Alert Grouping: 短期間に連続するアラートを1つのインシデントに集約し、電話通知回数を最小限に抑える。
- Assign and Notify: SeverityとUrgencyを正しく連動させる設定を有効にする。
Zabbix側で複雑な通知条件を作り込むよりも、PagerDuty側で集約ルールを管理する方が、柔軟でメンテナンスも容易です。 担当者の負荷を軽減しつつ、重要な障害検知を確実に行う運用フローとして、ぜひ活用してみてください。
▼ Zabbixに関するおすすめ記事


弊社ではZabbix関連サービスを展開しています。以下ページもご参照ください。
★Zabbixの基礎をまとめたeBookを公開しております!★

★SCSK Plus サポート for Zabbix★

★SCSK Zabbixチャンネル★
★X(旧Twitter)に、SCSK Zabbixアカウントを開設しました!★












