はてなチーフエンジニアの id:wtatsuru です。この記事では、2016年からエンジニア新人研修に取り入れている障害対応演習について紹介します。
ねらい
はてなの新卒エンジニア向け新人研修は、もともとはてなサマーインターンの講義資料をベースに行ってきたのですが、2016年からはよりアドバンストな、実務に近い研修を行っています。
研修全体のねらいやカリキュラムは、下記の記事で紹介しています。
2016年度はてな新人エンジニア研修を行いました - Hatena Developer Blog
サービスを運用していると、サービス提供に影響のある障害が起きてしまうことがあります。エンジニア社員は研修後にチームに配属されますが、サービス運用経験のない場合に、緊急時に何をしていいのかわからなかったり、本番サーバでの操作をする心理的障壁を感じる、という問題がありました。
障害対応演習では、障害対応のフローを一通り経験し、サーバへのログインと調査を経験しておくことで対応への心理的障壁を軽減する、また特にはてなの環境における調査から報告までの方法を学ぶことで実際のサービス運用に活かすということを目的としています。
研修の流れ:講義編
研修は講義・実習を半日で行います。まず最初に、障害対応時の心構えやレポーティングまでの流れを重点的に説明しています。
障害対応の一連の流れをまず解説しています。
- 何らかの不具合が発生
- サービス状況・サーバ状況の確認
- 対応する
- 告知する
- 社内共有する
- 事後対策
また、一通りの注意点も加えています。
- 作業ログの書き方
- 作業環境: screen, script コマンドなど
- 影響範囲を正確に伝えること
- sudo の前にひと呼吸
- 一次対応と二次対応
また、サーバオペレーションに不慣れなメンバのために、対応のヒントとなるコマンドも参考程度に掲載しました。
研修の流れ:実習編
講義が終わると、実習に移ります。参加者は Google Cloud Platform 上で指定のインスタンスを起動します。そこでは Webサービスが障害状態で起動しているため、それを復旧するのが課題となります。各サーバにはあらかじめ Mackerel Agent による監視が含まれおり、復旧すると OK が出る仕組みとしました。また、実際に業務フローに合わせて対応ログをはてなグループに上げてもらい、実習後は報告エントリの書き方に対する講評も行いました。
問題の内容は、特定のミドルウェアに接続できていない、必要なモジュールが足りていない、CSSが取得できていない、などシンプルなものです。社内の障害情報履歴を蓄積したデータベースからピックアップしたもので、実際の障害を意識した実践的なものとなっています。問題の難易度設定には悩んだのですが、意外と苦戦するメンバも出て、時間的には5問でちょうどいいボリューム感となりました。特に「徐々にメモリが膨らむため時間経過とともに応答が遅くなり、最後はSSHすらできなくなる」という遅効性の障害には、苦戦したエンジニアも多くいました。
おわりに
以上、はてなの新卒エンジニア向け新人研修から障害対応演習を紹介しました。本番サービスの障害で慌ててしまう前に体験しておくという研修は、チーム配属後のアンケートでも対応に役立ったとの声が多くあり、開催したねらいは達成できました。中途や経験の浅いエンジニアも対象に、今後も同様の取り組みを継続していこうと考えています。
この記事ははてなエンジニアAdvent Calendar 2017の23日目の記事です。昨日は id:pokutuna による Perl でテンプレートの変数に型を書く in 2017 - ポクポク でした。明日は id:alpicola です。