ベロシティの高いチームのためのインシデント管理
インシデントの事後分析
アトラシアンでは、重大度レベル 2 以上のすべてのインシデントの根本原因の理解と修正を確かなものとするために、誰も責めることのない事後分析を行っています。これは、アトラシアンの事後分析の方法を説明する内部資料の要約版です。
ハンドブックの印刷版または PDF 版を入手する
インシデント管理ハンドブックの印刷版は、数量限定で無料配布しています。または、PDF 版をダウンロードしてください。
フィールド | 説明 | 例 |
インシデントの概要 | インシデントを数行に要約する。重大度、原因、影響が続いた期間を含める。 | <日付> の <インシデントの時間範囲。14:30 から 15:00 など> に <数> 名の顧客に <イベントの症状> が発生しました。イベントは、<インシデントの原因となったデプロイまたは変更の時刻> 時にデプロイがきっかけで発生しました。デプロイには、<変更の説明または理由> によるコードの変更が含まれています。このデプロイのバグが <問題の説明> の原因となりました。 このイベントは <システム> によって検出された。このイベントは <解決のために取られた行動> によって緩和された。 この <重大度レベル> のインシデントは X% の顧客に影響した。 このインシデントに関して <サポート チケットとソーシャル メディアの投稿の数> が発生しました。 |
きっかけ | このインシデントを引き起こした状況を説明する。例:以前の変更で潜在的なバグが発生した。 | <日付> の <時刻> (<顧客に影響が出る前の期間>) に <製品またはサービス> に対して <インシデントを引き起こした変更の説明> の変更が加えられました。この変更が、<変更の影響の説明> の原因になりました。 |
不具合 | 何が期待どおりに動作しなかったのかを説明する。不具合に関係するグラフやデータを添付する。 | <数> 件の応答が、<期間> の間に X% のリクエストに誤って送信された。 |
影響 | インシデント中に内部および外部の顧客に何が起こったかを説明する。提出されたサポートケースの数を含める。 | <日付> の <時間> から <時間> の間に <インシデントの概要> が発生した。 このインシデントは、<数> 名の顧客(すべての <システムまたはサービス> の顧客の X %)に <顧客に起こった状況を説明> の影響があった。 <サポートチケットとソーシャルメディアの投稿の数> 件が提出された。 |
検出 | アトラシアンが、いつ、どのようにインシデントを検出したか? 検出までの時間を改善する方法は?思考の訓練として、この時間を半分にするには? | このインシデントは、<アラートのタイプ> がトリガーされ、<呼び出しを受けたチームまたは個人>が呼び出されたときに検出された。その後 <第二対応者またはチーム> を呼び出すことになった。これは、ディスク書き込みサービスの担当でなかったので、対応が <期間> 遅れたためである。 <改善点の説明> は、<改善の影響> が得られるように <改善を担当するチーム> によって設定されます。 |
回答 | 誰が、いつ、どのように対応したか?対応に遅延や障壁はあったか? | 14 時 34 分(UTC 時間)に呼び出しを受けた KITT エンジニアが 14 時 38 分にインシデントチャットルームに入室した。しかし、待機エンジニアに Escalator autoscaler に関して十分な背景知識がなかったため、14 時 50 分に再度アラートを送信し、14 時 58 分に上級 KITT エンジニアがチャットルームに入室した。 |
リカバリ | いつ、どのようにサービスが復旧されたかを説明する。影響を緩和する方法にどのようにたどり着いたか? 状況に応じて追加の質問をする。例:緩和までの時間を改善するにはどうすればいいか?思考の訓練として、この時間を半分にするには? | 以下の 3 方面からの対応により復元を行った。
|
タイムライン | インシデントのタイムラインの詳細を、時系列でタイムゾーンを含むタイムスタンプ付きで提供する。 インシデントのすべてのきっかけ、影響のはじまり、検出時間、エスカレーション、決定、変更、影響の終了を含める。 | すべての時間は UTC で表示。 11:48 - K8S 1.9 制御プレーンの更新完了12:46 - Goliath の V1.9 への更新完了(クラスターオートスケーラーと BuildEng スケジューラーインスタンスを含む 14:20 - Build Engineering が KITT Disturbed へ問題を報告 14:27 - KITT Disturbed が特定の EC2 インスタンス(ip-203-153-8-204)の不具合を調査開始 14:42 - KITT Disturbed が特定のノードを遮断 14:49 - BuildEng が問題が 1 つ以上のノードに影響を及ぼしていることを報告。問題の 86 のインスタンスが不具合はシステムに関することを示す 15:00 - KITT Disturbed がスタンダードスケジューラーへの切り替えを提案 15:34 - BuildEng が 300 ポッドの不具合を報告 16:00 - BuildEng がすべての不具合のあるビルトを除去し、OutOfCpu レポートを作成 16:13 - 新しいビルドでも不具合が再発するため、一時的な不具合ではないことを BuildEng が報告。 16:30 - KITT がこの不具合がインシデントだと認め、インシデントとして対応。 16:36 - KITT が Escalator autoscaler を無効にし、問題を軽減するために autoscaler が計算を削除しないようにする。 16:40 - KITT は ASG が安定し、クラスターの負荷は正常で、顧客の影響が解決したことを確認。 |
なぜなぜ分析 | 根本原因を特定するテクニックを使う。 影響を出発点として、なぜ起こったのか、なぜその影響があったのかを質問する。根本原因にたどり着くまで「なぜ」を質問し続ける。 「なぜ」をリストアップするか、作図して課題に添付する。 |
|
根本原因 | 根本原因は何か?このクラスのインシデントの再発を防ぐために、変更する必要がある物事。 | <バグの原因またはバグが起こったサービス> 接続プールの処理時のバグが、接続状態への不十分な視認性と組み合わさり、障害状態での接続リークを引き起こした。 |
バックログチェック | バックログの中に、このインシデントを防止できたものや影響を軽減するものはあったか?そうであるなら、なぜそれをしなかったのか? 正直な評価は、過去の優先順位とリスクに関する決定を明確にするのに役立つ。 | 特になし。フロータイピングへの改善は、決まったやり方がある既知の継続中のタスクであった(例:ファイルを変更または作成するときにフロータイプを追加する)。統合テストを修正するためのチケットは作成されたが、試行時に失敗した。 |
再発 | 同じ(根本原因の)インシデントは以前にも起きたことがあるか?その場合、なぜ、また再発したのか? | 同じ根本原因のインシデントは、HOT-13432、 HOT-14932、HOT-19452。 |
教訓 | 何を学んだか? 何がうまくいったか、何をもっとうまくできたか、運がよかった点について話し合い、改善の機会を探る。 |
|
是正措置 | このクラスのインシデントが再発しないためには何をすればいいのか? 誰がいつ行動を起こすか? 「優先行動」課題を作成して、追跡している各行動にリンクする。 |
|
シナリオ | 直接原因と行動 | 根本原因 | 根本原因の緩和 |
Stride の「Red Dawn」スクワッド サービスに Datadog モニターとオンコール アラートがなかった、またはそれらが適切に設定されていなかった。 | チームメンバーが新サービスに監視とアラートを設定していなかった。 それらのサービスの設定を行う。 | 監視とアラートを含む、新サービスの立ち上げプロセスが設けられていない。 | 新サービスの立ち上げプロセスを作成し、それに従うようにチームに指示する。 |
このブラウザバージョンでは動作しないファブリックエディターにアップグレードされたため、Stride が IE11 では使用できない。 | 依存関係のアップグレード。 アップグレードを元に戻す。 | ブラウザ間の互換性テストの欠如。 | 継続的なブラウザ間の互換性テストの自動化。 |
Micros EU のログがログサービスに届いていなかった。 | Micros に提供されたログを送信する役割が正しくなかった。 役割を修正する。 | ある環境からのログが機能しているかどうか判別できない。 | すべての環境に対して、ログの欠落用の監視とアラートを追加する。 |
以前の AWS インシデントによって、Confluence Vertigo ノードがメディアへの接続プールを使い果たし、顧客に断続的な接続とメディアエラーが発生した。 | AWS の不具合。 AWS の事後分析を取得する。 | Confluence 接続プールの処理時のバグが、接続状態への不十分な視認性と組み合わさり、障害状態での接続リークを引き起こした。 | バグを修正し、今後、影響が起きる前に同様の状況を検出するための監視機能を追加する。 |
カテゴリー | 用語の定義 | 取るべき行動 |
バグ | アトラシアンによるコードの変更(具体的な変更の種類) | ひたすらカナリアテストを行う。インクリメンタルロールアウトを実行し、ウォッチする。機能フラグを使う。品質エンジニアに相談する。 |
変更 | アトラシアンによる変更(コード以外) | 変更の方法を改善する。変更の見直し、管理プロセスを変更するなど。「バグ」関連のすべてがここに該当する。 |
拡張性 | スケールの失敗(例:リソースの制約に対して盲目的、容量計画の欠如。 | What are your service's resource constraints? Are they monitored and alerted? If you don't have a capacity plan, make one. If you do have one, what new constraint do you need to factor in? |
アーキテクチャ | 運用条件による設計のズレ | 設計の見直しをする。プラットフォームの変更は必要か? |
依存関係 | 第三者(アトラシアン以外)のサービスの不具合 | 第三者の不具合のリスクを管理しているか?リスクを受け入れる経営判断をしたか?または、緩和策を構築する必要があるか?以下の「依存関係と根本原因」を参照。 |
不明 | 確認できない(診断能力を高めるための行動)。 | ログ、監視、デバッグおよび同様の機能を追加して、システムの観測可能性を改善する。 |
カテゴリー | 確認事項 | 例 |
このインシデントの調査 | 「何がこのインシデントを引き起こす原因となったか?」根本原因を特定することが最終的な目標。 | ログ分析、要求パスの図表、ヒープダンプの見直し |
このインシデントの緩和 | 「この特定のイベントを解決して管理するため、まず実施した行動は何か?」 | ロールバック、チェリーピッキング、設定のプッシュ、影響を受けたユーザーとのコミュニケーション |
このインシデントのダメージを修復 | 「このインシデントの即時のまたは二次的なダメージをどのように解決したか?」 | データの復元、機械の修理、トラフィックの再ルートの削除 |
将来のインシデントの検出 | 「同じような不具合を正確に検出するための時間を短縮するにはどうすればいいか?」 | 監視、アラート、入力と出力の妥当性チェック |
将来のインシデントの緩和 | 「今後、このようなインシデントの重大度や継続時間をどのように減少させるか?」 「同じような不具合が次に発生したときに、影響するユーザーの割合をどうすれば減らすことができるか?」 | グレースフルデグラデーション、重要ではない結果の取り下げ、フェールオープン、ダッシュボードまたはプレイブックで現在のプラクティスを拡大、インシデントプロセスの変更 |
将来のインシデントの防止 | 「このようなインシデントの再発をどのように防止するか?」 | コードベースの安定性の改善、より完全なユニットテスト、入力検証とエラー状態のロバスト性、プロビジョニングの変更 |
事後分析行動を言葉で表現する方法についても、Lueder 氏と Beyer 氏のアドバイスを活用しています。
事後分析行動の表現方法:
事後分析行動を適切に表現できるかどうかで、事後分析行動を容易に完了できるか、あるいは実行不可能または先延ばしが原因で無制限に遅れるといった違いが生じる可能性があります。よく練られた事後分析行動には以下のような特性が必要です。
実現性:動詞で始まる文で各行動を説明します。行動`はプロセスではなく、有益な結果につながるべきです。例えば、「重要な依存関係を一覧表にする」は良い表現ですが、「依存関係の調査」は良い表現ではありません。
明確さ:各行動の範囲をできるだけ絞り込んで定義し、何がその作業に含まれているか、含まれていないかを明確にします。
制限:行動に終わりを設けない、または継続中にするのではなく、各行動がいつ終了となるかをはっきりと表現します。
...から | ...まで |
このシナリオの監視を調査する。 | (実現性)すべてのケースでサービスからのエラーの戻り率が 1% 以下になるようにアラートを追加する。 |
機能停止の原因になった課題を修復する。 | (明確さ)ユーザー住所入力フォームの無効な郵便番号を安全に処理する。 |
エンジニアが更新前にデータベーススキーマを解析できるか確実にチェックできるようにする。 | (制限)スキーマの変更に対する提出前の自動チェック機能を追加する。 |
Opsgenie を使用したオンコール スケジュールの設定
このチュートリアルでは、オンコール スケジュールの設定、オーバーライド ルールの適用、オンコール通知の設定などの方法を学習します。すべて Opsgenie 内で行います。
このチュートリアルを読むStatuspage でインシデント コミュニケーションを学ぶ
このチュートリアルでは、システム停止時にインシデント テンプレートを使用して効果的にコミュニケーションを取る方法について説明します。さまざまなサービス中断に適応可能です。
このチュートリアルを読む