冴えない PagerDuty の育て方

AvatarPosted by

グリフォン Advent Calendar 2018 8日目の記事を担当しました、rakiと申します。
自前のQiitaアカウントを紐付けていいということになったのですが、結果として
誰?ってなってしまいました(笑)

※この記事はGRIPHONE Advent Calendar 2018 8日目の記事です。
https://qiita.com/advent-calendar/2018/griphone
https://adventar.org/calendars/3147

さて、本日はグリフォンで利用しているPagerDutyについて書いてみようと思います。

PagerDutyに関する日本語の記事はまだまだ数が足りていなかったり、実際の使用状況について書かれたものは少ないです。使ってみたの多くはドキュメントを読めばわかることしか書いてありませんし、それ以降は利用する側の要件が異なってしまうので仕方ないのかもしれません。

ですので、この記事ではグリフォンで育て中のPagerDutyの設定について開示することにしたいと思います。これから始めようかというチームのどこかで参考になればと思います。

最初に注意事項

  • PagerDutyについての基本的な設定や使い方は本家サイト等をご確認ください
  • タイトルは某ラノベのぱくりですが、弊社は同人ではなく商業ゲーム開発会社です
    • 個人的には詩羽先輩推しです
    • 弊社ではゲーム制作に関わりたい人を各種職能で積極募集しています

次に前提の説明

  • 弊社は100人超のメンバーを擁していますが、PagerDutyでの対応が求められるメンバーは数人程度です
    • オンコール対応、主にシステム障害時に対応するメンバーが限られているということです
    • システム障害ではなく、プログラム的な課題が判明すれば開発チームが対応してくれます
  • インフラの多くはGCP及びAWSです。Azureは現在のところ利用していません
  • タイトル毎にDataDogにメトリクスを集約しており、PagerDutyへの発報はDataDogからのみにしています
  • PagerDutyに求めるのは下記の点です
    • アラートに対するオンコール(電話)
    • エスカレーションによる対応者が確認するまで繰り返し通知
    • アラートのレポート
    • ポストモーテム

現在の設定

  • 障害に対する重要度を決める(重要度が高い順↓)
    • 重要度最高:サービスが停止している等で即対応が必要
    • 重要度高:DBのフェイルオーバー等、対応は早めが望ましいが動確できていれば営業時間対応
    • 重要度中:インスタンスメトリクスアラート(CPUやメモリなど)等で営業時間対応
    • 重要度低:ワーニングや予防運用等の警告
    • 重要度最低:自動で回復するなどイベントとしての記録。特に対応を必要としない
    • 未定:当該アラートが検証できていないもの
  • 重要度に応じてサービス(とエスカレーションポリシー)を分離する
  • PagerDutyのServiceをレベル分けする(必要になる順↓)
    • トリアージ用(@pagerduty_triage)
      • 未分類や閾値調整中のアラートを飛ばす先
      • 各種アラートは対応方法が確立するまでこのサービスに飛ばす
    • 対応なし(debug)
    • 検証確認(info)
    • 要確認(warn)
    • 重要 (crit)
    • 緊急(emerg)
  • DataDogからの通知を重要度に分けてServiceごとに呼びわける
  • トリアージで呼んだものは内容を確認し、別のサービスを呼びなおし、アラートの調整をおこなう
  • PagerDutyを障害起点にしてポストモーテムを作成する

使い勝手

正直に言うと全てのアラートを一旦トリアージにまわして、アラートの成熟と振り分けのルーチンを作っている最中です。もちろんマシンダウンなどはcriticalに送るだけですぐわかりますが、メモリ使用率の急激な上昇やCPU使用率の継続的な高負荷などをどう振り分けるか、といったところの調整中というところです。

呼び出しのテスト自体は障害が発生しないと正確な呼び出しを作るのが難しく、ここはDataDog側からのなんらかの工夫が欲しいところですが、単一のサービスでなんでもかんでもオンコールしたり、無駄なコールが邪魔だからといってアラート量を減らしたり、ということを考えなくてよくなったのはいいなぁと思っています。

今後の展望

アラートを発報するところ(DataDogのmonitor)の調整を進めつつ、障害対応に対する体制の強化を図っていきたいと考えています。PagerDutyの機能を最大限活かしつつ、Slackチャンネルの自動作成や召集を自動化するなどの工夫を考えています。

最後に

この記事を機に、運用監視にDataDogやPagerDutyを利用しているエンジニアさんと情報交換とかできたらいいなぁと思っています。よろしければご連絡ください。