障害対応をちょっとずつよくしていくための 演習の作りかた
by
heleeen
×
Copy
Open
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Slide 1
Slide 1 text
ja.mackerel.io 障害対応をちょっとずつよくしていくための 演習の作りかた 2024.04.24 Mackerel チーム SRE テックリード 井口景子
Slide 2
Slide 2 text
井口 景子 (id:heleeen) ● 2019年9月にはてなに SRE として入社 ● 現在は Mackerel の SRE テックリード ● SRE, Serverless が好き ● カメラも好き 自己紹介 2 素敵な色の季節になりました
Slide 3
Slide 3 text
今日はなすこと ● なぜ障害対応演習を行っているか ● 障害対応演習の作りかた ● Mackerel ではどのような演習を実施したか 3
Slide 4
Slide 4 text
なぜ障害対応演習を行っているか ● 本番障害は必ず起こるものだから ○ 不具合やオペレーションのミスを無くすのは難しい ○ 障害防止にとても労力を割けば減らせるが, 開発コストが 増えたり開発スピードは悪化したりする ● 障害が起きたときに影響を抑えるための取り組みが重要 ○ 素早くロールバックできる仕組みを利用する ○ カナリアリリースで影響範囲を小さくする ○ 障害対応フローを理解して, 素早く対応できる体制を作る 4
Slide 5
Slide 5 text
100% SLO から考える障害対応 ● エラーバジェットはプロダクト開発で利用したい ○ エラーバジェット … サービスの信頼性が損なわれる許容度 ○ 本番障害の頻発や復旧が長引いてしまう => 開発ではないところでエラーバジェットを使い切ってしまう => 機能開発や本番リリースができなくなってしまう... ● 本番障害で消費されるエラーバジェットはなるべく抑えたい 5 0% SLO エラーバジェット
Slide 6
Slide 6 text
障害対応をどのように学ぶか ● 本番の障害対応の場ではなかなか難しい ○ 本番の障害対応は本番で障害を収束させるためのものであり, 学びの ためのものではない ■ 得られる学びももちろんあるが, 目的が違う ○ 緊張感のある場で成長する人間ばかりではない ■ 本番障害対応のみでは成長する人が成長するだけの場合が多い ■ ある程度の水準の対応を全員ができるようになるのは難しい 6
Slide 7
Slide 7 text
障害対応を効率的に学ぶ ● Mackerel チームでは定期的な障害対応演習を実施 ○ 練習しておくと安心して対応できる ○ オンボーディングやキャッチアップとしても利用できる 7
Slide 8
Slide 8 text
演習の作りかた ● 演習の目的を定める ○ この演習で何を学んでほしいかを決めておく ■ 例 ● 規模が大きい障害の対応の仕方 ● 障害頻度の低いコンポーネントの学習機会にする ○ 日頃の障害対応を観察して課題に感じるところを扱う ■ 例 ● 対応に慣れた人と不慣れな人の経験の差が開きつつある ● マネージドサービスを利用することでインフラ系の障害発生 頻度が下がったので, 対応経験が少ない人が増えている 8
Slide 9
Slide 9 text
Mackerel チームの場合 ● 目的を定める ○ SRE が日頃クラウドの運用を行っているので, アプリケーション エンジニアはクラウドにふれる頻度が相対的に低い ■ アプリケーションエンジニアにクラウドのオペレーションを ある程度体験してほしい ○ 普段の障害対応で指揮官などの役割に携われていない人が役割を 経験することを優先して, できる人を増やしたい ○ DR 訓練をついでに実施しちゃいたい 9
Slide 10
Slide 10 text
演習の作りかた ● チームの状態に合わせて学習の形式を考える ○ 例 ■ 本番の障害対応が学びの中心となっている ● 基礎的な考えかたや慣れている人の考え方を知るとより スムーズに対応ができるようになるかもしれない ■ 実装上の不具合を見つけるのは得意だが, デプロイ後の調査方法は よくわからない ● リクエストの処理の流れの再確認やクラウド上での調査方法 を知ると, より素早く障害の原因を見つけられるようになるか もしれない 10
Slide 11
Slide 11 text
演習の作りかた ● 手を動かせる形式だとなおよい ○ 聞いたり読んだりだけより手を動かすほうが身につきやすい ● 自分で考えたり調査したりする時間を少し作る ○ 悩んだほうが印象に残りやすい ○ 考える過程で他の学びを得ることもある 11
Slide 12
Slide 12 text
Mackerel チームで実施したパターン ● 5,6人など, 役割に当たる人を増やせる規模にチームをグループ分けする ○ 手を動かす経験を積んだ人を増やせる ○ 大規模なフォーメーションの練習はしづらい ● チーム全体で1つの調査と対応を行う ○ 大きめの障害対応の演習ができる ○ 演習の規模によって, 役割に当たらない出てきてしまうかもしれない 12
Slide 13
Slide 13 text
気をつけていること ● 起こり得て対応できる内容をシナリオにする ○ 例 ■ アクセス数が通常時の10倍になった ■ イメージがライフサイクルによって削除されてしまった ■ 設定ミスで特定の経路のみ不通になってしまった ● 詰め込みすぎない ○ 練習しておきたいオペレーションやシチュエーションはたくさんある ○ すべてを一気に演習しても覚えるのは難しいので, 1回の内容は少なく 定期的に何度も行う ■ 人の入れ替わりにも対応できる 13
Slide 14
Slide 14 text
Mackerel チームの障害対応演習(講義編) ● 基本的なオペレーションの確認 ○ フェイルオーバー, ロールバックなどを手順書を見ながら実行する ■ 経験済みの操作にして, 操作に対する不安感が減る ■ 日常的ではないオペレーションを試すことができる ■ もし障害発生時に演習で行った操作が必要なら, 演習のドキュ メントを見ればよい 14
Slide 15
Slide 15 text
Mackerel チームの障害対応演習(実践編) ● 検証用の環境で障害を発生させ, 調査・対応を行う ○ 障害対応フォーメーションも実施 ○ 学んだことを手を動かして試す機会にする ■ 本番障害ではないので, 学習のチャンスにできる ● 監視設定の検証にもなる ○ 障害が発生したときに適切なアラートが発生するか ○ 素早くアラートで検知することができているか 15
Slide 16
Slide 16 text
演習での学び ● 現在のアーキテクチャでの課題が見つかった ● runbook の不足や不備が見つかった ○ runbook にたどり着きにくいというのも見つかってよかった ● 演習後の障害対応フローに今まで以上のスムーズさがあった 16 Slack での状況共有の わかりやすさもあがった
Slide 17
Slide 17 text
まとめ ● 障害対応も練習すると上手くなる ● チームの状態を観察して, 学習のテーマと手段を定めるのが大事 ● 先日の障害対応演習の実際の内容は, Hatena Developer Blog にて公開予定です 17