PagerDutyを使ってみた

記事タイトルとURLをコピーする

みなさんこんにちは。
技術研究課の山田です。

さて、私が所属している技術研究課ではR&Dを継続的に実施することで、業務フローの改善や他課をサポートする活動を日々行っています。
今回はその一環で PagerDuty を触る機会があったのでレポートします。

PagerDuty とは

f:id:swx-chiba:20200715153918p:plain
logo-image

PagerDuty - https://www.pagerduty.com/

アプリ、サーバ等からの通知をきっかけに、予め定義していたエスカレーションポリシーとスケジューリングに基いて様々なアクションを実行することができるSaaSです。
SaaSなので利用者側でサーバを用意する必要がなく、すべての操作/設定はWeb上のインターフェースから行います。
※ APIも用意されています

PagerDuty の主な機能

様々な監視ツール(Datadog, Mackerel, Zabbix 等) からのアラート通知をPagerDutyで集約して、予め設定/登録した任意の通知ルールに従って様々なアクションを実行できます。
通知の例として 電話・SMS・メール・プッシュ型のアラート通知 (iOS or android 用のアプリが用意されています) 等があります。

PagerDuty 設定の流れ

実際の設定画面に沿って手順をご説明します。
尚、PagerDuty のアカウントは登録済であることを前提としています。

1. User の登録

まずは User を作成していきましょう。
上部メニューバーの Configuration -> Users をクリックし、Add Users をクリックします。

f:id:swx-chiba:20200715155911p:plain
step-1-1

ユーザ名/メールアドレスを入力し、Add をクリック、Send invites をクリックします。
これで PagerDuty への招待メールが、入力したメールアドレス宛に届いているはずなのでメールの内容に従って手続きを進めましょう。

f:id:swx-chiba:20200715155950p:plain
step-1-2

設定を進めてログインすると、ユーザ自身の設定画面に移動します。
ここでインシデントの通知先となる 電話/SMS/メール の情報を入力します。

PagerDuty では、各ユーザへの通知するための手段は基本的にユーザ自身で設定します。
(管理者側で設定することも可能です)

f:id:swx-chiba:20200715160031p:plain
step-1-3

続いて、インシデントが発生した際の通知ルールについて設定します。
Notification Rules タブをクリックし、下記画像の赤枠で囲われた部分を編集していきます。

ここでは、インシデントが自分へアサインされた場合にどう通知するのかを設定します。
下記設定例では、

インシデント発生直後にメールを送信
↓
15分間認知されなければ SMS へメッセージを送信
↓
30分間認知されなければ 電話

というような流れになります。

f:id:swx-chiba:20200715160111p:plain
step-1-4

通知ルールについてはこの他にも

「自分がアサインされているインシデントのステータスが変更になった時」. 「緊急度低のインシデントがアサインされた時」

など、細かくルールを自分で決めることができます。
が、今回は割愛します。

2. エスカレーションポリシーの作成

つづいて、エスカレーションポリシーの作成を行います。
インシデント発生後のユーザアサイン/エスカレーションのルールを設定します。

上部メニューバーの Configuration -> Escalation Policies をクリックし、New Escalation Policy をクリックします。

f:id:swx-chiba:20200715160134p:plain
step-2-1

下記画面が実際にエスカレーションポリシーを入力する設定画面になります。
インシデントが発生すると、まず左側タイムラインの① と表示されている階層にあるユーザへ通知/アサインが成され、① の階層のユーザが30分間誰も認知/対応しない場合は ② の階層へエスカレーションされます。
(エスカレーションされるまでの時間は変更可能です)

② の下の + をクリックすることで 3次受け、4次受け ... と階層を作って、エスカレーションのルールを作成することができます。
また、認知した場合でも手動で次の階層へエスカレーションすることも可能です。
この辺りの柔軟さが魅力的ですね。

f:id:swx-chiba:20200715160159p:plain
step-2-2

今回はユーザを1名、1階層のみとして設定を進めます。
Alert the following users or schedules へ先ほど作成したユーザを入力して、Save をクリックします。

f:id:swx-chiba:20200715160221p:plain
step-2-3

3. Service の登録

最後に、外部からの通知の受け口となる Service を登録します。
上部メニューバーの Configuration -> Services をクリックし、Add New Service をクリックします。

f:id:swx-chiba:20200715160244p:plain
step-3-1

各項目を入力していきます。

Name :
Service へ設定する名前を入力

Notification Urgency:
このサービスから発生するインシデントの緊急度を選択します。 今回は High で設定します。

Escalation Policy :
先ほど作成(2.の手順)したポリシーを選択します。
このサービスから発生するインシデントは、このポリシーに従ってエスカレーションされます。

Integration Type :
どういう形で通知の受け口を用意するのかという設定です。
今回はメール受信をきっかけにインシデントを発生させたいので、Integrate via email を選択します。
メールの他にもあらかじめ PagerDuty 側で用意されています。

How to Integrate With PagerDuty - https://www.pagerduty.com/docs/

Integration Email :
PagerDuty が発行する xxxxx@pagerduty.com という形式のメールアドレスで、xxxxx の部分はユーザ側で任意に設定が可能です。
このメールアドレス宛にメールを送信するとインシデントが発生します。

f:id:swx-chiba:20200715160307p:plain
step-3-2

すべての項目を入力後、Add service をクリックしてサービスを登録しましょう。

インシデントを発生させる

さて、一通りの設定が終わったのでインシデントを発生させてみましょう。
先ほど設定した Integration Email 宛てにメールを送信します。

f:id:swx-chiba:20200715160347p:plain
incident-1

すると、下記内容のメールを受信します。
本来ならここで何かしらの対応を取るのですが、今回は自分で設定した通知ルールが正常動作するか確認したいので、何もしないまま30分間放置します。

f:id:swx-chiba:20200715160410p:plain
incident-2

ちなみに、自分がアサインされているインシデントの一覧はダッシュボードから確認できます。
各インシデントの詳細画面へ移動して、そこから手動で2次受けへエスカレーションすることも可能です。

f:id:swx-chiba:20200715160437p:plain
incident-3

15分経過して SMS を受信しました。
14:Ack, 16:Resolv とありますが、それぞれの数字を返信することでインシデントに対してのアクションを取ることができます。

f:id:swx-chiba:20200715160457p:plain
incident-4

30分経過して 着信がありました。
電話を取ると、英語でインシデント内容を読み上げてくれます。

f:id:swx-chiba:20200715160517p:plain
incident-5

まとめ

この記事では紹介していませんが、「スケジュールを組んで曜日/時間帯によって通知先を切り替える」といった詳細な設定も可能です。
電話/SMS/メールなどユーザへの通知方法がたくさん用意されていることも魅力的ですが、状況に合わせて通知ルールとエスカレーションルールを柔軟に定義できるのが一番の魅力ではないでしょうか。