2019.12.24

PagerDutyでアラートメール通知を電話通知に変える

こんにちは。次世代システム研究室のM.Mです。

近頃のWEBサービスは、他社のサービスや自社でも他グループのサービスと連携して構成されているケースが多いのではないでしょうか?
サービス間同士の連携について意識した設計がされていないと、あるサービスがダウンしたら、引きずられて私たちが開発・運用するサービスも提供できない状態になってしまうことがあります。
その逆もあり、私たちが開発・運用するサービスがダウンしたら、連携しているサービスも提供できなくなってしまうこともあります。
もちろんそのような障害が発生しないような設計や対策をすることも重要ではありますが、特に障害発生後に盛り上がる問題があります。

  • 障害に気づくのが遅い。
  • 障害の連絡がない。遅い。
  • 誰が対応しているのか分からない。
  • 状況確認したくて連絡するが、担当者につながらない。
  • 私たちが開発・運用するサービスの障害に、私たちより先に連携しているサービス側が気づいて連絡してくる。その時私たちはまだ障害に気づいていない。
発生してしまった障害内容よりも、上記のような障害に対する対応内容が問題になることが多いと感じます。

今回は、PagerDutyのトライアル版を使って、障害対応について以下の試みを行いました。
  • システムからのアラートメールだけでは障害にすぐに気づかない。これを特定のアラートメールが来たら、電話連絡が来るようにする。
  • 電話だったとしても出れない場合はある。電話に出れなかった場合、次の人にエスカレーションして電話連絡が行くようにする。
  • 誰がどのような状況なのか把握できない。Webダッシュボードを見れば状況が分かるようになる。
PagerDutyの詳細については「こちら」を参照してください。

目次

1. PagerDutyのトライアル版の申し込み
2. 各種設定について
2-1. ユーザー設定(障害対応するメンバーの登録および電話番号の設定をする)
2-2. チーム設定(障害対応するメンバーを選んでチームを作る)
2-3. エスカレーションポリシー設定(どのような順番で障害の通知をするか)
2-4. 監視対象のサービス設定(どのようなトリガーで通知を発動させるか)
3. 障害発生!

1. PagerDutyのトライアル版の申し込み


上記の図の通り、クレジットカードを登録する必要もなく、電話番号も任意項目なので、登録しやすいです。また登録してログインするとすぐに利用できました。

ログインが完了すると、以下のようなインシデント管理画面が表示されます。

ログイン後すぐなので、一覧には何も表示されていませんが、障害が発生するとこの一覧に表示されるので、今どの障害が発生しているのかなどが把握できるようになります。

続いて、実際に障害が発生したときに電話連絡をするための設定を行っていきます。

2. 各種設定について

各種設定は以下の図の通り、画面上部のヘッダーにあるConfigurationから遷移することができます。

2-1. ユーザー設定(障害対応するメンバーの登録および電話番号の設定をする)

ヘッダーのConfigurationからUsersを選択し電話番号を追加するユーザーを選びます。
続いて、「+ Add Phone Number」をクリックして電話番号を登録します。

上記の図は画面の一部切り取っただけなので見えていませんが、電話番号欄の一番右側に「Test」というリンクがあり、これをクリックすると自動音声の電話がかかってきます。
今回は電話が出られなかったときにエスカレーションさせたいため、もう一人登録して、同様に電話番号も登録しておきます。

2-2. チーム設定(障害対応するメンバーを選んでチームを作る)

ここでは障害対応するチームを作ります。今回は先ほどのUsers設定で登録した2名を登録します。
ヘッダーのConfigurationからTeamを選択し、Add Team, Edit Teamで追加・修正を行っていきます。

今回の検証では
チーム名はPointTeam
Usersは登録した2名を選択
Tagsはpointteam
として登録しています。

2-3. エスカレーションポリシー設定(どのような順番で障害の通知をするか)

ヘッダーのConfigurationからEscalation Policiesを選択し「+ New Escalation Policy」を選択してエスカレーションポリシーを作ります。

今回の検証では
エスカレーションポリシー名はPointTeamEP
チームには、先ほど作成したPointTeamを選択
エスカレーションの順番として、1番目はM….さん、2番目はN….さんとなるように設定しています。

2-4. 監視対象のサービス設定(どのようなトリガーで通知を発動させるか)

ヘッダーのConfigurationからServiceを選択し[+ New Service]を選択してサービスを作ります。

今回の検証では
サービス名はPointService
エスカレーションポリシーには先ほど作成したPointTeamEPを選択
Integration TypeはIntegrate via emailを選択して、特定のメールを受け取ったら通知が動くようにします。
どの宛先にメールを送信したらよいかは、以下のようにIntegration Emailの欄に表示されます。

その宛先にメールを送信すると障害と検知し、通知ルールに従った連絡が来るようになります。
またさらに細かい設定として、以下のようにメールの件名や本文に一致した場合のみといった条件も付けることができます。

これで設定は完了です。

他にもスケジュールで時間によって担当を変えたりすることもできるようです。
最低限やるべき内容としては、障害対応するユーザーを登録、それらユーザーでチームを作って、エスカレーションポリシーを定義する。
障害を監視するサービスを作って、エスカレーションポリシーを当てはめるイメージです。
障害のレベルに応じて、電話連絡にする、メール連絡にするなどの設定もユーザーの通知ルールで変更することができます。

3. 障害発生!

では、実際に上記で登録した際に表示されたIntegration Email当てにメールを送ってみます。
上記の図のpointservice-alertmail.0rft2exk@xxxxxxxxxx.pagerduty.comとなっている宛先です。
また、今回は、件名にAlertが含まれているという条件を付けたので、件名はAlertとして送ります。

メール送信!

しばらくするとサンフランシスコから自動音声の電話がかかってきます。
英語ではあります。登録時に入力したPointServiceという文言なども読み上げているのはすごいなと思いました。
最初は焦りましたが、何回か聞くと、Acknowledgeにする場合は4、Escalationする場合は8を押せというようなことを言っているのは何とか分かりました。
今回は、エスカレーションを試したいので、1人目はエスカレーションさせて2人目で対応するといったことをしました。

ログイン後に表示されたインシデント一覧に表示されるようになり、対象のインシデントを選択し、以下のようにTimelineを参照することで、誰が何をしたのか判断できるようになっていました。

11:53 AMにエスカレーションされて、N…さんに電話連絡およびメール連絡がいっているのが分かります。

今回はトライアルでの検証なので、実際のシステムのアラートメールの送信先を変更して、電話連絡が来るようにまではしていませんが、アラートメールの送信先を変更するだけで、電話連絡に変えることができそうです。

まとめ

画面上で設定をするだけで、簡単に電話連絡が来るようにできました。また、エスカレーションも問題なくできました。
なかなか新規開発や通常運用で忙しいなか、障害発生時の対応改善まで手が回らないということは多々あると思います。
ただ既存のアラートメール送信先を変えて、画面上で設定する程度で対応できるのであれば、検討するのもありかなと感じます。

最後に、次世代システム研究室では、グループ全体のインテグレーションを支援してくれるアーキテクトを募集しています。アプリケーション開発の方、次世代システム研究室にご興味を持って頂ける方がいらっしゃいましたら、ぜひ募集職種一覧からご応募をお願いします。

皆さんのご応募をお待ちしています。

Pocket

関連記事