見出し画像

SREチームのインシデント対応について

こんにちは!SREチームの岩崎です。コロナでドタバタしてる間にすっかり夏になってしまいました。早いものです。みなさんはいかがお過ごしでしょうか?

今回はSREチームのインシデント対応について書きたいと思います。

インシデントとは

インシデント(incident)とは一般的に「出来事」や「障害」を意味する用語ですが、必ずしも大きな障害だけをさすわけではなく、重大な事態に繋がりかねない軽微な事象も含みます。SRE本に出てくるインシデントは障害やアラートといったところでしょうか。

CAMPFIREではインシデントに認定する基準として以下を掲げており、これはそのままポストモーテムを書く基準でもあります。

・ユーザーに影響が及んだダウンタイムやデグレーションが一定の閾値を超えた場合
・種類の如何を問わず、データの損失が生じた場合

インシデントが起こったら

CAMPFIREではインシデントが発生した際の行動指針をドキュメントにまとめており、以下のような動きになっています。

1. インシデント発見者がインシデントを報告
2. #incident チャンネルに集合して役割分担しながら対応
3. 対応後はポストモーテムを書いて再発防止に努める

1. のインシデント報告はSlack上で行われますが、インシデントの大小によって対応が分かれており、軽微なものは担当者に大きなものは全員にメンションする形になっています。

2. の #incident チャンネルはインシデント発生時の集合チャンネルです。このようにインシデントが発生した時の集合場所を予め決めておくことで、どこを見れば良いのかわかり、その後の対応がスムーズになります。このチャンネルができるまでは様々なチャンネルでインシデントのやりとりが行われており、全体を把握するのが大変でした。。

3. のポストモーテムはSREやDevOpsで重要な学びの資料です。個人を非難せず、組織的な学習に努めましょう。

緊急対応

CAMPFIREの緊急対応時のドキュメントには以下の内容が書かれています。

心構え
・パニックを起こしてはいけません。まず深呼吸してください
・自分一人で解決しようとせず、できるだけ多くの人を巻き込みましょう
・オッカムの剃刀の精神で報告は最低限の事実に留めましょう。誤った推測は初動を混乱させます

連携
・#incident チャンネルに情報を集約しましょう
・今何をしているかなど情報は常に共有するようにしましょう。場合によってはハングアウトなどで繋げながら解決にあたると良いでしょう

役割分担
・個人ではなくチームで問題にあたるようにしましょう。適切に役割を決め、無駄のない行動をしましょう。自分が今何をしているかを常に Slack などで共有して動くと良いでしょう

最低限以下の役割を担当する人間がいるとスムーズです

・全体を取りまとめて指示を出す人
・ビジネス側との連携や報告をする人
・暫定的に問題を解消する人
・根本原因を特定して修正する人
・障害の影響範囲を調査する人

インシデントが発生した時はまず落ち着くことが大切です。一度手を止めて大きく深呼吸をしましょう。そして一人で解決しようとせず、必ず複数人で解決にあたることも重要です。

上記のように、役割分担して動くと対応がスムーズです。全体の指示を出す人、血を止める人、影響範囲を調査する人などです。これらの役割は定期的にローテーションできるとなお良いと思います。

インシデント管理のためのベストプラクティス

SRE本によるとインシデント管理のベストプラクティスとして以下が挙げられています。

・優先順位:まず出血を止め、次にサービスを回復し、それから根本原因の証拠を保存しましょう。
・準備:インシデントの関係者と共に、インシデント管理の手順を事前に用意してドキュメント化しておきましょう。
・信頼:インシデントに関わる全員に対し、割り当てられた役割内で完全な自律性を持ってもらいましょう。
・自己観察:レスポンスに対応している間の自分の感情の状態に注意を払いましょう。パニックや、圧倒されている感覚が生じてきたら、もっと支援を求めましょう。
・代案の検討:選択肢を定期的に考慮し、インシデントレスポンスとして今やっていることをそのまま続けることが妥当なのか、あるいは他の筋道をとるべきなのかを評価し直しましょう。
・訓練:インシデントレスポンスのプロセスを定期的に利用し、しっかりと身につけるようにしましょう。
・持ち回り:前回、インシデント指揮者を務めましたか?それなら、今回は別の役割を受け持ちましょう。すべてのチームメンバーが、すべての役割に慣れておくようにしましょう。

インシデント訓練

普段から訓練しておかないと、いざインシデントが発生した時にどう動いていいかわからないものです。とはいえ、実際に本番環境で擬似障害を発生させるカオスエンジニアリングには抵抗があるという人は多いのではないでしょうか。そこでCAMPFIREでは、軽微な事象も積極的にインシデントとして扱って訓練するというやり方をしています。

本来インシデント指定するような大規模障害ではないが、一人で解決が困難なトラブルシューティングなどがそうです。事象がインシデントに認定されると優先順位が上がり、 #incident チャンネルに集合して全員で解決にあたるため、意外とインシデント認定された方が心理的安全性が高いという声もあります。このように日常的に軽微な事象で動き方を訓練することで、大規模インシデント時のスムーズな役割分担やローテーションが可能になります。

最後に

以上、CAMPFIREで行っているインシデント対応についてまとめてみました。インシデント自体はどんなに気をつけていても起こってしまうため、いかに起こった時のMTTRを早くするか、そして失敗からどう学ぶかが大切だと思います。

直近だと私自身も数年ぶりにデータベースの一部を飛ばすというインシデントをやらかしてしまったのですが、普段の文化づくりのおかげで、正直に報告し複数人で協力して対応にあたることができました。幸い重要なデータは含まれていなかったためほとんど影響はなかったのですが、この時は久しぶりに心臓が止まるかと思いました。。非難せず、協力して解決にあたってくれたチームのメンバーには感謝しかありません。

スクリーンショット 2020-08-04 13.25.21

詳細は今年の本番環境でやらかしちゃった人 Advent Calendarに書きますので楽しみにしていてくださいね(!?)。夏本番に向けて良い汗かいていきましょう。

この記事が気に入ったらサポートをしてみませんか?