Webエンジニアの森脇です。
LCLでは、以下の記事でご紹介したように、PagerDutyを利用して障害通知を行っています。
Webサービスの障害通知だけではなく、JOBが異常終了した場合の通知も行っているので、簡単に紹介します。
背景
LCLでは、ジョブスケジューラとしてKuroko2を利用しており、JOBが異常終了した場合にはSlackへ通知しています。
JOBが異常終了するケースとして、
- 連携先のシステム側で一時的に問題が発生し、次のスケジュールで正常実行されれば問題ないもの
- 必ず手動でリカバリ必要なもの
に分類できますが、後者の重要なエラー通知はSlackだと見逃す恐れや、対応が遅れる恐れがあるので、PagerDutyへ通知するようにしました。
実現方法
Integration Keyの取得
PagerDutyでJOB通知用のSerivceを作成して、Integration Keyを取得します。Integration Keyは後述のAPI呼び出しのために必要です。
PagerDuty APIの呼び出し
PagerDutyには各種のAPIが用意されており、APIを利用することで任意にIncidentを作成できます。今回は、PagerDutyのAPIを呼び出すための、Ruby Gemを利用して実現しました。
GitHub - envato/pagerduty: A gem for talking to the pagerduty API
こんな感じで簡単に呼び出せます。
INTEGRTION_KEY = 'xxxxxxxxxxxxxxxxxxxxxxxxx' pagerduty = Pagerduty.new(INTEGRTION_KEY) pagerduty.trigger( description, client: "[任意]", client_url: [任意url], details: { error: [任意メッセージ] } ) end
このコードをKuroko2から呼び出せるように、社内用のWebAPI化しています。
Kuroko2のWebhook設定
Kuroko2のwebhookに、上記で作成したWeb APIのURLを指定します。
設定は以上です。JOBが失敗すると、以下のような通知が来ます。
まとめ
PagerDutyを利用することで、今まで属人化しつつあったJOBのエラー対応も明確な担当制で対応することが可能になりました。