CloudWatchで検知したインシデントをPagerDutyへインテグレーションする

こんにちは。
ご機嫌いかがでしょうか。
"No human labor is no human error" が大好きな吉井です。

今回は CloudWatch で検知したインシデントを PagerDuty へインテグレーションする方法について書いてみたいと思います。

PagerDuty とは

インシデントライフサイクル管理を支援するサービスです。
On-Call 管理やインシデントのライフサイクル設定、分析などの機能が豊富なサービスです。
本エントリでは製品紹介はしないので、詳細は公式サイトを参照ください。
PagerDuty

外部サービスとのインテグレーションもかなり豊富で
CloudWatch とのインテグレーション方法も公開されています。
Amazon CloudWatch Integration Guide | PagerDuty

CloudWatch インテグレーション

CloudWatch とインテグレーションが可能ということは
AWS サービスを幅広くカバー出来るということだと考えます。

メトリクスはもちろんのこと、CloudWatch Events や Logs に対して
インシデント監視対象とすることが可能です。

実装

PagerDuty 側でインテグレーション用エンドポイントを作成し
そこに向かって SNS でサブスクライブするという流れになります。

PagerDuty

まずは PagerDuty にログインします。

画面上部のメニューから ConfigurationServices をクリックします。

Add Services または +New Servive をクリックします。

下のように Integration Type から Amazon CloudWatch を選択します。

サービスを作成すると、Integration URL が払い出されるのでメモしておきます。(SNS で使います)

AWS マネジメントコンソール

PagerDuty 用の SNS トピックを作成します。

作成したトピックでサブスクリプションを作成します。
プロトコルは HTTPS 、エンドポイントは 前の手順でメモした Integration URL を指定します。

CloudWatch でアラーム、または、イベントを作り、この SNS トピックを指定します。
今回はテストのために、EC2 インスタンスの CPU 使用率が 1% を超えたらアラームを発生させ PagerDuty へ通知するよう設定しました。
下のように、状態が OK に戻ったときも通知が飛ぶようにしておくと PagerDuty 側で状態の把握が可能になります。

通知結果

EC2 インスタンスを起動します。
CPU 使用率が 1% を超えたので PagerDuty へ通知が飛んでいるはずです。

はい。
次にしばらく放置しておきます。
CPU 使用率が 1% 未満になるので「状態:OK」の通知が PagerDuty へ飛ぶはずです。

Resolved に変化しました。
画面下半分にアクティビティが表示されており、履歴からも状態の変化を把握出来ます。

おわりに

CloudWatch & SNS だけではインシデント要件を満たせない場合には
AWS 以外のサービスと連携させると、人間に優しい運用が実現できると信じています。
クラウド時代らしい良いサービスだと感じました。

参考

Amazon CloudWatch Integration Guide | PagerDuty
PAGERDUTY LAUNCHES NEW AWS INTEGRATIONS FOR CLOUDWATCH, GUARDDUTY, CLOUDTRAIL, AND PERSONAL HEALTH DASHBOARD
What is Amazon CloudWatch Events?
Using Amazon CloudWatch Alarms