Pathee engineering blog

世界をしなやかに変えるエンジニアたちのブログ

障害を乗り越えていこう

障害のイメージ画像

これはPathee Advent Calendar 2019の19日目の記事です。

こんにちは、こんばんは、irihit です。 悲しい哉、システムを運用していく上で必ず発生してしまうのが障害です。本日は、楽しいクリスマス、そして新年を迎えるために、障害について思いを馳せてみましょう。

障害ってなんだろう?

障害とは何を指すでしょうか?よく言われる不具合やバグとは何が違うのでしょうか? Pathee では障害と不具合についてエンジニア同士で認識を以下のように合わせました。

  • 障害とは、不具合やバグによって引き起こされるもので、通常の運用業務が正常に行えなくなること。
  • 不具合とは、システムに意図しない状態が発生していること。

皆さんのチームでは認識があっていますか?私たちの捉え方と異なっていても構いません。まずはチームのメンバー同士で認識があっているかを確認してみましょう。

これは障害?

今では多くのシステムが監視されています。私たちのシステムも、Sentry や Slack を活用して、異常を検知したら一目散にスマホの通知にアラートが出てくるようになっています。

通知を受け取ったら一目散に対応...おっと、その前に、その通知で表示された異常は障害ですか?まずはその異常が障害かどうかを確認してみましょう。

私たちは障害の定義を「通常の運用業務が正常に行えなくなること」としました。通知された異常について、システムにどんな影響を与えるのかを確認してみましょう。アプリケーションが異常終了しませんか?画面の表示が崩れませんか?

影響範囲がわかれば障害かどうかの判断ができますね!もちろん、障害であることが明白な場合もあります。例えばブログを書いていたら保存ができなくて記事の公開ができなかった!などの結果から明白になる場合です。そういう場合には、次の障害を周知することを先にやってしまいましょう。

障害を周知しよう

障害の内容が把握できたら、さっそく周りの人に周知しましょう。

さあ、誰に障害が起きていることを伝えましょうか?チームメンバー?リーダー?お客様? 伝えるべき人に伝えなかった事態を防ぐためには、障害が起きたシステムを利用する全ての人に周知してしまうのが手っ取り早いです。特に社内の場合は迷わずに全員に伝えてしまいましょう。口頭だと相手の時間をとってしまい迷惑になるかも...と心配になるかもしれませんが、Slack などのチャットやメールを使えば相手の時間や状況に関わらず伝えられるので便利です。

もちろん、必ず伝えなくてはならないステークホルダーには、口頭で伝えたり、メンションをつけるなど気づいてもらえるようにしましょう。

伝える時には、影響範囲や発生時刻、対応完了の見込みを伝えましょう。わからないことは調査中と明記して、判明した都度繰り返し報告すると、正確な状況を伝えられるので幸せです!

障害を調査しよう

いよいよ障害の調査です。障害の調査では、影響範囲や再現手順から的を絞って調査していくと、原因究明がスムーズに行えることが多いように感じます。そのほかにも、アクセスログやエラーログ、様々な情報を集めて原因を推測・検証し、いち早く原因を突き止められるように進めましょう!

障害の原因が分かったら、次は対応です。 その前に、改めて原因が判明したことをチャットやメールで伝えておきましょう!

障害を対応しよう

障害を対応する際には、それが暫定対応か恒久対応かを意識しましょう。根本的な原因を解消することが好ましいですが、まずは障害となっている状態から回復することが大事です。恒久対応に時間を要する場合には、チームメンバーと相談して暫定対応を行うことが現時点で適切かどうかを判断しましょう!

対応したら最後にリリースです!

障害を終わらせよう

対応お疲れ様でした!けれど、まだまだ油断しないでください。リリースまでが障害です! 無事にリリースができたら改めて連絡をしましょう。あなたの連絡を心待ちにしている人がたくさんいます。

これで終わり?いえいえ、まだ後始末が残ってますよ!

障害を分析しよう

障害が起きてから終わるまで、どれだけの影響があったかを分析しましょう!分析にはアクセスログやエラーログ、その他色々な場所から取得できる情報が必要です。システムがログを出していないかもしれない?それなら今すぐにログを取得できるようにシステムを改善しましょう!

障害を記録しよう

最後に記録をしましょう。記録はとても大事です。障害の対応に関わらなかった人、後からシステムに関わった人にとっては、この記録が全ての情報となります。

どんな障害だったか。影響範囲はどこまであったか。発生時間はどのくらいか。対応方法としてどんな対応をしたか。影響を受けたユーザー数はどのくらいだったか。詳細な情報は後々に同様の不具合が起きた場合や、障害の傾向を調査する際などの役にたちます!

記録する先は、例えば JIRA や Redmine のようなチケットを管理するシステムでもいいですし、Confluence や esa などのドキュメントを管理するシステムでもいいでしょう。まとまっていて、検索できることが大切です。

まとめ

障害は起きて欲しくないものです。特にクリスマスや年末年始には・・・。 とはいえ、予測できないからこそ起こるのが障害なので、障害が起きた時にどうやって対応するかをチームで話し合って認識を合わせて置くことはとても大事です! 対応の方法を決めたら、その対応が実際に行えるかを確認しておきましょう。ログは適切に保管されていますか?チャットに連絡するべき人のアカウントが用意されていますか?障害時に様々な決定をするステークホルダーは誰でしょうか?

確認しておけば、スムーズに問題を解決できるので、万が一不幸にも障害がクリスマスに発生しても、悲しい時間は短くてすみますよ!

Pathee でも改めて確認して、楽しいクリスマスを迎えられるようにしていきます!それでは、良いクリスマスを!