見出し画像

DiRT(障害対応演習)を繰り返して分かった3つのこと

この記事は、NAVITIME JAPAN Advent Calendar 2021の 8日目の記事です。

こんにちは、ぐっちゃんです。
ナビタイムジャパンの全サービスで共通利用するAPI基盤の開発をするチーム(以下、API開発チーム)に所属しています。

当社では障害対策に力を入れていて、「早期検知・迅速な復旧を可能にする」ということを目標に、各チームで対策を講じています。

そうした背景の中で、API開発チームが社内を横断して取り組んでいる"DiRT"についてお話しします。

DiRTとは何か

DiRTは (Disaster in Recovery Training)の略で、簡単に説明すると障害訓練のことです。
意図的にシステムに障害を起こし、対応者がいかに早く障害を復旧させるかのプロセスを学習するプログラムのことを指しています。

どのチームでもサービスの稼働率を落とさないように様々な対策を行なっていると思いますが、どんなに堅固なシステムでも障害が起こる可能性をゼロにするのはとても難しいです。

関係者全員が迅速に行動して早く復旧できるように、障害発生時に近い現場を経験し、実際に障害が起きてしまった際に備えることがこの取り組みの目的です。

API開発チームが実施しているDiRTについて

API開発チームでは、他のチームを巻き込み合同でDiRTを実施しています。
この記事を読み進める上で出てくる登場人物と、当社の社内システムについて軽く説明します。

【登場人物】
・バックエンド開発グループ
  ・API開発チーム
  ・その他チーム(以下、バックエンド開発チーム)
・サービス開発グループ (ナビタイムジャパンのサービスを開発している)

このように、API開発チームは複数のチームが開発したシステムを使用してAPIを提供しています。何かあったときには問題がどこで発生しているかを切り分け、関連のあるバックエンド開発チームに連絡を取り、一緒に解決する必要があります。

実際に障害が起きた時によくあるフローです。

①サービス開発グループから障害についてお問い合わせを受ける
②API開発チームが原因について調査する
③バックエンド開発チームが復旧する

このように各チームと深い関わりがあるため、チームの垣根を超えて障害対策をする必要があります。

DiRT実施の流れ

合同でDiRTをする際に必要なことは、チーム間で共通意識を作ることです。

まず始めに、全てのバックエンド開発チームのプロジェクトマネージャーと話し、お互いのチームで抱えている障害対策の課題や、DiRTを実施した後に達成したい状況について認識を合わせました。
こうして8つのバックエンド開発チームと実施することが決まりました。
各チームと実施するため、API開発チームとしては合計8回DiRTを実施します。

実際のDiRTの手順です。

■演習準備
お互いのチームの代表者を1人ずつ選び、障害の発生方法やシナリオ等を考えてもらう
チームの弱点が明確であれば、それを強化できる内容にする

■演習実施時

訓練対象者に実際に対応してもらう
対象外の人は、誰が・どのような対応をしたか細かくメモをとる

■ふりかえり

実施時にメモした内容を見ながら、期待通りの動きができていたかをふりかえり、課題を見つけたらどうするべきかを話し合う

以上のことを繰り返し実施することで、障害が発生しても冷静かつ確実に対応できる状態にしていきます。

現状では3/8回実施済みです。
その結果について、ふりかえりに焦点を当ててお話しします。

演習準備・演習実施時に具体的にどのようなことをするのかも気になる方は、バックエンド開発チームがチーム内で実施したDiRTについて過去に記事を書いているので、こちらを読むとイメージがつきやすいかもしれません。

1回目実施結果

今回のDiRTはチーム全員が訓練対象者として参加しました。
ベテランメンバーが活躍し、シナリオ作成者の予想より30分早く復旧しました。
ふりかえりで出た課題の一部を共有します。

■API開発チームのふりかえり
【課題】

ベテランメンバーが主に対応してしまい、新メンバーが活躍できなかった
【改善案】
訓練対象者を新メンバーだけにして、対応力を鍛える

■チーム合同のふりかえり
【課題】
バックエンド開発チームがもっと早く調査に取り掛かれるようにしたい
【改善案】
・API開発チームで問題がどこで発生しているかを切り分けきれていなくても、関係がありそうだと思った時点で連絡をする
・関係者全員が入っているslackチャンネルで調査のやり取りを行うことで、連絡を受ける前からバックエンド開発チームで障害内容の把握ができるようにする

素早く障害復旧ができたことは素晴らしいですが、せっかくの訓練の機会なので、次回はベテランメンバーは参加せず新メンバーだけで対応することになりました。
また、チーム合同で実施したからこそ発見した課題もありました。

2回目実施結果

2回目は新メンバーのみが訓練対象者です。
障害対応に慣れず途中で詰まってしまい、シナリオ作成者にヒントをもらってやっと復旧できました。 
今回のふりかえりの内容も一部抜粋します。

■API開発チームのふりかえり
【新たな課題①】

「誰」が「何」を調査するのかが不明確で行動を起こしづらかった
【改善案①】
インシデントコマンダー (障害対応の取りまとめする人)等を決め、役割分担することで円滑に調査を進める

【新たな課題②】

サービス開発グループから障害の報告があり、障害対応を行うというシナリオで進めたが、報告者に調査状況を連絡することができていなかった
【改善案②】
長時間連絡がないと不安にさせてしまうため、復旧時刻等わかり次第適宜連絡する

【新たな課題③】
影響範囲を特定しなかったので、どのサービスに影響があったのかが分からなかった
【改善案③】
障害が発生したサービスは、早急に顧客に連絡等する必要があるため、影響範囲も調査して関係者全員に状況を共有する

【新たな課題④】

調査能力不足
【改善案④】
ベテランメンバーだったらどのように対応するかを教えてもらい、次回に活かす

■チーム合同のふりかえり
【以前と比較して改善できたこと】

関係がありそうなバックエンド開発チームにすぐに連絡を入れるようになり、早い段階で双方から調査をすることができた

【新たな課題①】

新メンバーはバックエンド開発チームのメンバーとあまりコミュニケーションをとったことがなかったため、戸惑いながらやり取りをした
【改善案①】
本番対応の際に戸惑わないように、チーム間で2on2を行い親睦を深めておく

新メンバーのみで対応したからこそ生まれた課題が沢山ありました。
チーム内・チーム外とのコミュニケーションについてふりかえることが多かったため、特に改善する必要があるという話になりました。

3回目実施結果

3回目も引き続き新メンバーを対象にして実施しました。
今回のふりかえりの一部です。

■API開発チームのふりかえり
【以前と比較して改善できたこと】
・メンバーの中にインシデントコマンダー を担う人が現れ、対応開始前に役割分担ができ、それぞれの調査状況についての情報交換が活発になった
・障害の報告者に対応状況を小まめに伝えるようになった
・影響範囲を特定して全社に展開し、関係者全員に状況を知らせることができた


■チーム合同のふりかえり
【新たな課題】
チーム間でやり取りをする際に、どの人に話しかけていいかか分からず、作業中のメンバーに話しかけて調査を妨げてしまった

【改善案】
チーム間の連絡係を1人ずつたててやり取りを行うようにする

上記の内容通り、調査以外のコミュニケーションの課題について大きく改善できました。
前回のふりかえりを活かして実践に取り組んだおかげで、第1回のベテランメンバーを含めて対応した時の状態に近づいてきました。
ベテランメンバーからも、動き方が変わったと評価がありました。

1〜3回目実施結果のまとめ

繰り返し実施したことで、迅速に障害を復旧するために必要な要素が見えてきました。

・インシデントコマンダーを置く
・小まめな情報共有
・連絡係と調査者を明確に分ける

それぞれ要素に対して、各回の対応を評価し、まとめて表を作成しました。

1回目はベテランメンバーも対応しているため、◎が多いです。
それ以外は新メンバーのみを訓練対象者として実施しましたが、2回目から3回目にかけて成長できていることが分かります。

途中から新メンバーのみを対象にしたことで、ふりかえり時にベテランメンバーからアドバイスをもらうことができ、ノウハウを教えてもらういい機会になりました。

繰り返しDiRTをやってみて分かった3つのこと

数をこなす事で障害対応に慣れる

筆者はAPI開発チームに所属してから日が浅く、障害が起きても対応できる自信がありませんでした。
しかし3回目が終わった時点で、どんな障害が起きた時でも対応の流れは大体一緒だということが分かり、障害に怯えることはなくなりました。

チーム間の連携が取りやすくなる

ふりかえりを行う際、合同でDiRTを行ったチームに実際に障害が起きた場合にどのように動いてほしいかを伝えることができました。
また、顔を合わせて話すことがチーム間で仲良くなるきっかけになり、普段の業務でも困りごとがある時に助けを求めやすくなりました。
このように、合同で実施したことによるメリットも生まれました。

障害対応で調査・復旧能力以外の必要なことに気づく

障害対応する際に必要なことは技術力だと思っていましたが、それだけではありませんでした。
他のチームと連絡を取ることや、社内に調査状況を小まめに伝えること等、コミュニケーション力がとても重要でした。
調査や復旧作業ができなくても役に立てることが分かりました。

今後の展望

DiRTを3回実施してチームの課題が浮き彫りになり、改善することによって、チーム全体の障害対応する力が伸びてきました。
残り5チームと実施予定のため、引き続き取り組んでいきます。
また、現段階では新メンバーの育成にフォーカスを当てていますが、ある程度対応ができるようになったら、「複合的な要因による複雑な障害の場合」等とテーマを変えて挑んでいきます。

この記事が参加している募集