こんにちは、SCSKの坂木です。
システム運用において、監視ツールからの通知をどのようにハンドリングするかは重要なテーマです。
今回は、統合監視ツールであるZabbixと、インシデント管理プラットフォームであるPagerDutyを連携させる設定手順をご紹介します。
Zabbix × PagerDutyについて
Zabbixは非常に強力な監視ツールであり、検知からメール通知、slackなどのチャットツールへの連携まで単体で完結させることも可能です。
しかし、システム規模が大きくなったり、複数の監視ツール(AWS CloudWatch, Datadogなど)を併用したりする場合、PagerDutyを導入することで以下のような運用の一元化によるメリットが生まれます。
アラートの集約と一元管理
Zabbixだけでなく、様々なソースからのアラートをPagerDutyに集めることで、運用担当者はPagerDutyの画面だけを見ていれば状況を把握できるようになります。
柔軟なオンコール管理
「日中はチームA、夜間はチームB」「一次対応者が反応しなければ二次対応者へ」といった複雑なシフトやエスカレーションルールを、Zabbixの設定を触らずにPagerDuty側のGUIで柔軟に変更・管理できます。
ステータスの同期
Zabbixで障害が検知されたらPagerDutyでインシデント起票、Zabbixで復旧したらPagerDutyもクローズ、というようにステータスを同期させることで、常に最新の状況をインシデント管理ツール側に反映させることができます。
連携の仕組み
本記事で構築する連携フローは以下の通りです。
Zabbixが障害(または復旧)を検知したタイミングでWebhookを投げ、PagerDutyがそれを受け取るという流れになります。
[Zabbix] —-(Webhook)—-> [PagerDuty] —-(通知)—-> [運用担当者]
本記事では、このフローの中核となるZabbixからPagerDutyへイベントを送る設定にフォーカスして解説します。
PagerDuty側の設定
まずは受け皿となるPagerDuty側の設定です。
PagerDutyのメニューから [Services] > [Service Directory] を開き、[+ New Service] をクリックします。
Name に分かりやすい名前(今回はZabbix Alarts)を入力します。
Escalation Policy等は運用のルールに合わせて選択し、Nextへ進みます。
Integrations の選択画面で、表示された [Zabbix] を選択し、[Create Service] をクリックして作成を完了します。
作成後の画面に表示される Integration Key をコピーして控えておきます。
※このキーがZabbixからの通信を受け入れるための認証キーとなります。
Zabbix側の設定
続いて、Zabbixから通知を送るための設定を行います。
メディアタイプの有効化
Zabbix管理画面の [通知] > [メディアタイプ] を開きます。
一覧から PagerDuty を探し、ステータスが 無効 の場合はクリックして 有効 にします。
ユーザー設定(Integration Keyの設定)
通知を受信するユーザーに、PagerDutyのキーを紐付けます。
[ユーザー] > [ユーザー] を開き、通知対象のユーザーを選択します。(今回はAdminに紐づけています)
[メディア] タブを選択し、[追加] をクリックして以下の通り設定します。
タイプ: PagerDuty
送信先: 「PagerDuty側の設定」で取得した Integration Key を貼り付けます。
グローバルマクロの設定
PagerDutyのメディアタイプにzabbix_urlを設定する項目があり、マクロで設定します。
[管理] > [マクロ] を開きます。
マクロ {$ZABBIX.URL} に、ZabbixサーバのURLを設定します。
トリガーアクションの設定
障害発生時と復旧時に通知を行う設定です。
[通知] > [アクション] > [トリガーアクション] を開き、アクションを新規作成します。
[実行内容] タブ(障害発生時の動作):
送信先に先ほど設定したユーザー(Admin)を指定し、メディアタイプに PagerDuty を指定します。
[復旧実行内容] タブ(復旧時の動作):
実行内容と同様に、PagerDutyへの送信設定を追加します。
これにより、Zabbixが「解決(OK)」になった情報をPagerDutyが受け取り、PagerDuty上のインシデントも自動的に「Resolved」となります。
動作検証
設定完了後、実際に連携が行われるかテストします。
障害検知テスト
トリガーアクションの動作条件で設定したトリガーを障害状態にし、PagerDuty側でインシデントが起票(Triggered)され、通知が届くことを確認します。
Zabbixの「監視データ」>「障害」画面を確認します。
障害発生とともにアクションが実行され、メッセージ/コマンドの欄に「PagerDuty 送信済」と表示されていることが確認できます。
続いてPagerDutyの画面を確認します。
Zabbixからの通知を受け取り、ステータスが Triggered (未解決)の状態でインシデントが自動的に起票されました。
復旧連携テスト
次に、障害状態を解消し、Zabbix上のステータスを正常に戻します。
トリガーの障害ステータスが「解決済」に変わると、設定した復旧アクションが実行されます。
アクションログを見ると、解決時にもPagerDutyへ送信が行われていることがわかります。
PagerDutyのアクティビティログ(またはインシデント一覧)を確認します。
Zabbixからの復旧通知を受け取り、インシデントのステータスが自動的に Resolved に変化しました。
これにより、「Zabbixで検知してPagerDutyへ通知」→「Zabbixで復旧してPagerDutyもクローズ」という一連の流れが正常に動作していることが確認できました。
まとめ
今回の設定により、「Zabbixが検知したシステムの状態」と「PagerDuty上のインシデントステータス」が同期されるようになりました。
これにより、運用担当者はPagerDutyを確認するだけで、現在対応が必要な障害がどれで、既に復旧したものはどれかを正確に把握できるようになります。
監視ツールと管理ツール、それぞれの得意分野を活かした運用フロー構築の参考になれば幸いです。
▼ Zabbixに関するおすすめ記事


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

★SCSK Plus サポート for Zabbix★

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













