TT Lab
ブログ はじめる
学ぶ 学習パス コース

インシデントコマンドとポストモーテム

役割と宣言

TT Labで続きを見る

一行まとめ

大きなインシデントで真っ先に崩れるのは、サーバーではなく「今、誰が何をしているのか」です。役割を分け、早めに宣言し、 決定ごとにオーナーを決めることが、その秩序を守ります。

なぜこれが必要だったのか

明け方に決済エラーのアラートが鳴ったとしましょう。チャンネルに5人が入ってきて、全員が有能で、全員が正しいことをします。1人は ロールバックを始め、別の人は同じ瞬間に同じサーバーを再起動し、3人目はキャッシュをクリアすべきか尋ねますが、誰も答えません。 カスタマーセンターは何が起きているのか分からず、「確認中です」を繰り返すだけです。GoogleのSRE本の第14章(Managing Incidents)は、まさにこうした 「管理されていないインシデント」を冒頭の場面として示します — 個人の実力ではなく調整の不在がインシデントを大きくする、ということです。

宣言を先延ばしにするのも同じ根から来ています。「大したことではないかもしれないのに、無駄に大ごとにしてしまうかも」と先延ばしにします。しかし宣言のコストはチャンネル1つと 役割3つであり、遅れた宣言のコストは、その間誰も告知せず誰も指揮しなかった時間のすべてです。

どのように動くのか

役割は3つが基本です(規模が大きくなれば計画・記録の担当を加えます)。

役割 やること やらないこと
IC(指揮) 優先順位・決定・役割の割り当て、状況把握 自分の手で直すこと — 手がふさがると指揮が空く
Ops(運用) システムを実際に変える手 独断で範囲を広げること
Comms(告知) 決められた間隔で外部に状況を告知 推測の数字を出すこと

いくつかのルールがこの表を支えます。役割は明示的に渡します — 「ICを渡します」とともに記録が残ってこそ、次の人が分かります。 決定にはオーナーがいます — オーナーのいない決定は、2人が同時に行うか、誰も行いません。手を付ける前に「今これをやって いる」と知らせれば、重複する作業がなくなります。多くのチームがチャットボットのコマンド(/declare、/role、/ownなど)でこれを記録に残します。

宣言の基準はあらかじめ決めておきます。ユーザーへの影響が見える、1人で30分以内に終わらせる自信がない、2つ以上のチームが必要だ — このうち 1つでも当てはまれば宣言します。そして時間を測ります。最初のアラート → 最初の応答(ack) → 宣言 → 緩和 → 終了。これらの間隔が次の改善の出発点です。

状況告知には形式があります。何がどれだけ(数字)、いつから影響を受けているのか、誰が指揮しているのか、次の告知はいつなのか。 数字は「たくさん」ではなくデータから数えた値でなければならず、次の告知時刻は重大度別の間隔を守ります。間隔を守ることが 数字より重要なときもあります — 「まだ原因は分かっていません。30分後に改めてお知らせします」も告知であり、沈黙は告知ではありません。

チャンネルの記録はこのように残ります。ボットコマンドがあれば、後から誰がいつ何を担当したのかを機械的に数え直せます。

13:04:47 jun     결제 오류 경보 받았습니다. 보는 중이에요
13:17:12 jun     /declare sev2 결제 실패 증가        ← 첫 경보에서 13분
13:17:54 alex    /role ic @alex
13:18:56 alex    /role comms @blake
13:27:05 alex    /decide D1 결제 v2 기능 플래그 끄기  ← 주인(/own)이 없다
13:28:05 casey   /doing D1
13:29:04 drew    /doing D1                         ← 앞사람이 끝내기 전 — 겹쳤다
13:35:52 alex    /role ic @erin                    ← IC 를 넘겼다. 이 뒤의 alex 는 손이다

最後に呼び出しです。指揮は、呼び出し(ページング)が人に届いて初めて始まります。呼び出しサービスはアラート名をルーティングルールでチームに結び付け、そのチームの エスカレーションポリシーを段階ごとにたどり、段階ごとにその時刻の当番(交代表が当番表より優先)を探して、その人の連絡手段で 呼び出します。この鎖の輪が1つ切れるだけで最初の段階は静かに失敗し、次の段階(たいていはチームリーダー)は15分か20分後にようやく鳴ります。 エスカレーションはセーフティネットであって、最初の応答ではありません。

現場でよく見る姿

最もよくある失敗は、ICが手を動かすことです。ロールバックを一番よく知っている人がICを担当し、自分でロールバックをしているうちに30分間誰も 告知せず、ほかの決定が止まります。そのため、ICを渡した後に手を動かすのは構いませんが、ICのまま手を動かしたことは記録で 明らかになるべきです。2番目によくあるのは、呼び出しがまったく届かないことです。新しく来た人の連絡先が空だったり、休暇中の交代が 退職者を指していたり、アラート名が変わってルーティングルールと合わなかったりすると、指揮は始まることすらできません。指揮は呼び出しが届くところから始まります。

こうした欠陥はインシデントが起きて初めて表に出るため、成熟したチームはインシデントとインシデントの合間に確認します。1週間の当番表をシミュレーターに入れて「どの時刻に 鳴っても誰が受けるのか」を事前に回してみて、宣言までにかかった時間とICが手を動かした回数を四半期ごとに数えます。数字があってこそ、次の 四半期に改善したかどうかを言えます。

次のラボでやること

決済インシデントのチャンネル記録(チャット・呼び出し・注文)を開き、宣言までにかかった時間、役割が移った流れ、ICが手を動かした決定、オーナーのいない決定と 重複した作業をデータで見つけ、決められた形式の状況告知を計算した数字で書きます。最後に、3つのチームの呼び出しがなぜ20分間 誰にも届かなかったのかを呼び出し設定から見つけて直します。