ここからはSREとしてインシデント発生に対してどのようなことを考えなければいけないのかに関してお話します。
目次
いくらCI/CDやkubernetesを完璧に駆使したとしてもシステム障害つまりインシデントは発生します。みなさんもクラウドサービスが一時的に利用できないのを実際体験もしくはニュースなどでご覧になったことがあると思います。それが全世界で何億人もが利用しているサービスが1時間でも使えなくなったら大きな問題として取り上げられます。インシデント発生をゼロにすることはできませんが、SRE導入によりその可能性を最小限にしつつ、常に新しいサービスをリリースすることを目指すために、インシデントが発生した時のこともしっかりデザインしておくことが重要です。以下に特に重要と思われる項目に関してご説明したいと思います。
SRE本*にはインシデント対応という項目にてGoogleでの対応手順例**が説明されています。
もしあなたのところに電話やメールで「今システムが止まっている!すぐになんとかしてくれ」という連絡があったらまずどうしますか?まず考えるのは現在の状況を確認しようと担当者に連絡するのではないでしょうか。もしくは管理コンソールにログインして、自分の目で確認できる範囲で状況うを把握しようとするかもしれません。いわゆる「あたふたする」という状態に陥ってしまいがちです。この時点で、インシデント発生時の対応手順が事前に用意されていない、もしくは対応手順が徹底されていないということがわかります。ここではGoogleではどのようにこのような状況に対応するのかを参考にすることにより、SREとしてインシデント対応のベストプラクティスを学びます。
GoogleではIncident Command Systemというプロセスが定義されていています。まずはインシデントが発生した際に、明確な役割分担が予め決められていて、各々役割をインシデント発生対応の最初から認識し自律的に行動し始めます。その役割を以下の3つに分けて定義しています。
通常は実行作業リードOLが現場の責任者としてインシデントを可能な限り早く解決するために対応します。現場の状況の把握から対応策を考え、その対応策を現場のエンジニアに伝え、その対応状況を逐次チェックしながら状況が改善されるかを確認しなければなりません。それに加えて、上司や関係者からの問い合わせにも都度対応しなければなりません。これらすべてのアクションをOLだけで担当するのは難しいため、GoogleではこれをIC、OL、CLといった役割に責任を明確に分離することにより、より効率的な解決を実現します。
まずインシデントが発生した際には、ICに連絡が来るようにします。ICは状況に応じてOLとCLを指名しインシデントレスポンスチームを編成します。OLはICと連携しながらインシデント対応に集中します。この際にOLのメンバー以外がインシデント対応に関わることはありません。もしOL以外のメンバーが一部でも対応すれば、それはICが認識しないところで行われた作業となり統制がとれなくなるからです。
指名されたOL、CLは必要に応じて他のメンバーを指名して責任を移譲することも可能です。そしてCLはICチームと連携を取りながら、ステークホルダー(通常は社内)に対してインシデントに関する情報を適時ツールを経由して最新のレポートを提供することに集中します。このようにICが常に俯瞰で状況を冷静に判断し、OLとCLに役割を分担することにより一人ですべての責任を背負い込むことなく連携を取りながら最短での問題解決にフォーカスすることができます。
IC、OL、CLの連携により無事インシデントが解決したとします。通常の運用状態に戻ったらすべきことがあります。それは同じようなインシデントを2度と起こさない、もしくは起こったとしてもより前回より早く解決するために発生から解決までの対応記録をポストモーテム***として作成します。ポストモーテムには以下の項目を含める必要があるため、インシデントが完全に解決した後に作成するようにします。
ポストモーテムは作成して終わりではありません。重要なのは必ず定期的にレビューされなければ意味がありません。新たなインシデントが発生してから関連するポストモーテムを検索し、その場でチェックする時間が殆どの場合ないからです。新しく作成されたポストモーテムは翌月にまとめてメールや掲示板などでメンバーに共有し、常に最新の情報をアップデートできるようにしておきます。また重要なポストモーテムに関しては定期的にレビュー会議などを開催し関係者全員で共有し合うとことも必要かもしれません。
ではいつインシデントとして認識して行動を起こせばいいでしょうか。一つ言えることは「遅いより早いほうがいい」ということです。このことは「Google が掲げる 10 の事実****」にも掲げられている教訓のひとつにも謳われています。
ここまで情報を共有することが重要ということを述べてきました。インシデントが発生した際、IC、OL、CLが情報を共有しながら対応を行う際に、どのようなツールを利用すればいいでしょうか。またCLが状況を適時報告する際のツールはインシデント対応中のツールと同じものを利用してもいいのでしょうか。ツールをシチュエーションごとに定義すると以下のようになるかと思います。
ツール種別
途用
Google社内で使っているツール
メール
ある程度確定した内容を特定の人に共有する場合
社外の人と共通のツールとして情報交換が可能
Gmail
共有ドキュメント
情報を一箇所に複数のメンバーで共同編集しながら意見交換なども行い、最終的な報告書として共有する場合
編集、閲覧、コメント追記などが可能
Google Drive
Google Document
Google Spreadsheet
Google Slide
掲示板
ある程度まとまった内容を特定のメンバーに一方向的に発信する場合
Google Sites
チャット
リアルタイムで確認したい場合(テキストベース)
記録を双方向で文字列として交換でき、相手側が内容を読んだかを確認することが可能
Google Chat
ビデオ会議
リアルタイムで直接会話しながら、オンラインミーティングが可能
Google Meet(旧Google Hangout)
Google内では共同編集が必要な場合、つまりインシデント対応中の情報共有にはGoogle Documentを使っています。そして完成した資料は、共有が必要と思われる人もしくは組織(グループ)を指定し、必要な権限を付与することにより安全に情報を共有できます。
Google Driveで自分に参照権限が与えられている資料は、検索機能によりタイトルだけでなく資料内に含まれているキーワードでも検索ができるので、特にフォルダを作らなくても欲しいときにキーワードだけで検索できるため、一人でも共有したいような内容であればこのツールを利用しています。
チーム内に限定していろいろな形式の資料を明示的に共有したい場合、例えば作成したポストモーテムなどをGoogle Documentのリンクなどでイントラ的に共有したい場合はGoogle Sitesを使う場合もあります。
ベンダーやパートナーなど社外のメンバーとのやり取りが必要な場合も、共有設定によりGoogle DriveやGoogle Sitesなどを利用することも可能です。このようにGoogle内ではこのGoogle WorkspaceをSREを始め全社員が便利に活用することにより情報共有をスムーズに行うことができるのです。
*https://sre.google/workbook/incident-response/
**https://sre.google/sre-book/managing-incidents/
***SREを理解するための用語解説のポストモーテムを参照
****https://about.google/philosophy/?hl=ja
→次の章へ続く【第7章】サイトリライアビリティエンジニア(SREng)に必要とされるスキルとは
Follow me!