1行の設定ミスが招いた決済サーバー全停止
12分52秒 | NW基礎FE
基本情報技術者試験の頻出テーマを解説した音声コンテンツです。
トランスクリプト(字幕テキスト)
さて今回はですね、非常に興味深い資料をあなたから共有いただきました。ええ。 深夜に発生した大規模なシステム障害、その対応のまあ、生々しいチャットログですね。はいはい。 それとその後に書かれた根本原因分析、いわゆるRCAのレポート。ええ、ありましたね。 さらにはインシデント対応のあの心理的安全性に関する記事もいくつか。ええ、このチャットログが特に面白いですよね。 ですよね。新人のカイがもう明らかにパニックに陥っていく様子と、先輩のアキがそれをこう冷静に導いていく対比が鮮明で。 ええ、単に障害が起きて直しましたっていう話じゃない。その裏にある人間の動きが見える、すごく価値のある資料だと思います。 では早速ログの冒頭から見ていきましょうか。はい。時刻は深夜2時過ぎ、アラートが鳴り響くところから始まります。 カイの最初のメッセージがもうほとんど悲鳴に近いんですよ。うわあ、嘘だ、アキ先輩、決済サーバー完全に沈黙しましたって。 完全に沈黙ですか。ええ、もう状況が全く掴めていない、その混乱が伝わってきます。 いや、この完全に沈黙っていう表現が彼のパニックを物語ってますよね。エンジニアからするとこれ一番怖い状況の1つなんですよ。あ、そうなんですか。 エラーメッセージすら返ってこない。生きてるのか死んでるのかさえ分からない状態ですから。なるほど。で、ここでアキが投げる最初の質問がすごく示唆に富んでるんです。 ええ。落ち着いてカイくん、ログを見ろ。HTTPのステータスコードは? 503? それとも接続タイムアウト? はいはい。 なぜ彼女はその、例えばサーバーのCPU使用率とか、そういうリソースの話から入らなかったんでしょうか。それがまあ、まさに経験豊富なエンジニアの思考の第一歩だからですね。 切り分けです。切り分け。ええ、無数の可能性の中から問題が存在する領域を効率的に絞り込むための問いです。 503サービスアンフェイラブルっていう応答があるなら、はい、少なくともリクエストはアプリケーションサーバーまで届いてて、 サーバーがごめん、今忙しくて処理できないってちゃんと返事をよこしてる証拠になるんです。なるほど、返事があるだけマシ。 その通りです。その場合、調査の焦点はアプリ自体とか、データベースの負荷とかに絞られます。うんうん。でも、カイの報告はタイムアウト。 これが厄介なんですね。ええ、厄介なんです。こちらからの呼びかけに何の応答もない状態。これは問題がアプリケーションよりももっと手前、 ネットワークのどこかで起きてる可能性を強く示唆します。なるほど。いわばサーバーが助けを求める悲鳴すらこちらに届いてないブラックホールみたいな状態。 この一言で調査の難易度が一段階上がったことをアキは瞬時に理解したはずです。そのタイムアウトという報告を受けて、アキは次にスリーウェイハンドシェイクは成立してる?って聞いてます。 出ましたね。これもネットワークの基本中の基本ですけど、こういうパニック状態でこの問いを冷静に投げられるのがすごいですよね。 ええ、TCP/IP通信のまさに握手の部分ですね。クライアントがこんにちはシン、サーバーがこんにちはどうぞシンアック。 はい。で、クライアントがよろしくお願いしますアックと返す。このやり取りが成立して初めて信頼性のある通信路が確立される。 うんうん。この握手が成功しているかを確認すれば、問題がネットワークの物理的な接続レベルにあるのか、それともその上のレイヤーにあるのかを切り分けられるわけです。 実際、現場で障害対応する時って、TCPダンプみたいなツールでパケットを直接覗いて、あ、シンは飛んでるけどシンアックが返ってこないな、みたいに確認するものなんですか? まさにその通りです。特にこういう原因不明の通信障害の時は基本に立ち返って、パケットレベルで何が起きてるかを確認するのが定石ですね。 なるほど。そして、カイの調査結果は、シンパケットは送ってますけどACKが返ってきません。ほう、これで問題の所在がネットワーク層にあることがほぼ確定しました。 でも、ここでログがまた面白くなるんですよ。カイは、でもロードバランサーは生きてますって報告するんです。はいはい。 システムの入り口は正常に応答しているのに、その奥にいるサーバーからだけ応答がない。うーん。僕がカイの立場だったらもう何がなんだかってなりそうです。 真っ先に疑うとしたら、やっぱりロードバランサーとサーバーの間のファイアウォールとかですかね。それは非常に有力な容疑者ですね。 ファイアウォールの設定ミス、AWSならセキュリティグループのルール不備あたりはこの手の障害で本当によくある原因です。ですよね。 ええ、9割方のエンジニアはまずそこを疑って調査を始めるでしょう。でも、アキの思考は違う方向に飛ぶんですね。ログにはこうあります。 待って、そのロードバランサー冗長化してたよね。まさか昨日のアップデートで。ああ、そこで繋がるわけですか。ええ。 ここで初めて昨日の変更という要素が出てくる。これは単なる幸運な推測だったんでしょうか。いや、これは推測というより経験に裏打ちされたヒューリスティクス、まあ、発見的な思考法ですね。 ヒューリスティクス。ええ、大規模システムの障害原因のトップはいつだって直近の変更なんです。ああ、なるほど。 だから真に優秀なシニアエンジニアは自分の担当範囲で最近どんな変更があったかを常に頭の片隅でリストアップしてる。 それは確率論的に最も当たりやすい宝くじを買い続けてるようなものなんですよ。なるほど、運に任せの山勘じゃなくて、最もかませの高い仮説から潰していくと。 ええ、多くのエンジニアがネットワークの迷路で迷子になってる間に、彼女は昨日何かあったはずだって最短ルートを見つけようとしてる。 この思考のショートカットができるかどうかがシニアとジュニアを分ける大きな差の1つかもしれないですね。そしてその指摘を受けてカイが設定ファイルを確認し、原因を突き止めるんです。 はい。震える声で、あ、設定ファイルの1行、デフォルトゲートウェイのIPが書き換わってますって。うわあ、それか。これだったんですね。 これですね。つまりロードバランサーは冗長化されてて、障害か何かのタイミングでメイン機から予備機に切り替わった。ええ。 でもその予備機の設定ファイルにあったデフォルトゲートウェイ、つまりインターネットへの出口を示すルーターのIPアドレスが昨日のアップデートで誤ったものに書き換えられていたと。 ということはサーバーはリクエストを受け取ってはいたけど、返信をどこに送ればいいか分からなかったということですか? まさに。 家の中に手紙は届くんだけど、郵便ポストの場所が分からなくて返事が出せない状態です。あ、分かりやすい。物理的にもソフトウェアのプロセス的にも全て正常に見える。 なのに、たった1行のテキストファイルの設定ミスがシステム全体の通信を完全に遮断していた。見えない壁とでも言うべき障害ですね。 SPOF、単一障害点というと、物理的な機器を想像しがちですけど、設定ファイルっていう情報の中にこれほど致命的なSPOFが潜んでいるっていうのは改めて考えると恐ろしいですね。 まさにそうです。特にインフラストラクチャアズコードが主流になった現代ではインフラの設定もコードで管理されますから。はい。 これは非常にパワフルな反面、たった1行のコードのミスがシステム全体を機能不全に陥れるリスクも孕んでいる。この事例はその典型と言えます。 うーん、私も昔ジェイソンの設定ファイルでコンマを1つ打ち忘れただけで、決済サービスを1時間止めてしまった苦い経験がありますよ。 うわあ、それは。ええ、見つけた時の安堵感と、なんでこんなミスをっていう自己嫌悪が入り混じったあの独特の感覚は忘れられません。 その感覚、エンジニアなら誰しも一度は経験するのかもしれないですね。そしてログは解決の瞬間に向かいます。はい。 アキの、修正して再起動、3、2、1、今、という指示。そしてカイの、繋がった、ログが流れ始めました、200 OK、200 OK、という歓喜の声。 このカタルシスはすごいですね。この解決の瞬間のカイのセリフがまたいいんですよね。基本情報で習ったスリーウェイハンドシェイクがこんなに愛おしく見えるなんて。 ああ、ありましたね。ええ、これがこの体験の全てを物語ってる気がします。教科書で学んだ抽象的な知識が現実の危機を救う武器になった。 理論と実践が彼の頭の中で完全に結びついた瞬間です。なるほど、エンジニアとして大きな成長の瞬間だったでしょうね。 しかし物語はここで終わりません。そうなんですよ。アキはすぐに次のフェーズ、つまり根本原因分析、RCAに意識を切り替える。 明日の朝、このRCAを報告書にまとめるわよ、寝かせないわからね、と。ええ、このRCAこそが障害対応において最も価値のある成果物なんです。 問題を解決して良かったねで終わらせてしまうと、組織としては何も学んでいないのと同じですから。このRCAレポートを読むと、単に設定ミスが原因でしたで終わってないのが印象的でした。 はい。なぜその設定ミスが起きたのか、なぜレビューをすり抜けたのか、なぜデプロイ前のテストで検知できなかったのかっていうなぜが何層にもわたって掘り下げられてて。 そこが重要なポイントです。多くの現場で陥りがちな罠がRCAが犯人探しになってしまうことなんです。ああ、誰がやったんだと。 そうです。誰がこのタイポをしたんだと。でも本来問うべきは個人ではなくプロセス。なぜたった一人の人間のミスが本番環境にまで到達するのを許してしまうような仕組みになっていたのか。 そこの議論にまで至らないと、本当の再発防止には繋がりません。なるほど。個人の責任を追及するんじゃなくて、チームのセーフティーネットに穴がなかったかを検証すると。 ええ、共有いただいたブレイムレスポストモーテム、避難なき事後検証に関する記事もまさにその点を強調していましたね。 心理的安全性が確保されていなければ、エンジニアは萎縮してしまって本当の原因を報告できなくなってしまうと。その通りです。 このチャットログでもアキはカイのパニックを責めるんじゃなくて、冷静にデータを元にした思考へと導いていますよ。確かに。 この二人の間には普段からそうした信頼関係、つまり心理的安全性が築かれていたんでしょう。だからこそ、カイは自分の混乱を正直に伝えられたし、アキの指示を素直に受け入れられた。 ふむふむ。もしこれが見過ごせれば突き上げられるような文化のチームだったらもっと悲惨な結果になっていたかもしれない。 技術的な問題解決の裏には常にそうした人間的な文化的な土壌があるわけですね。ええ。今回の一連の資料を読み解くと、深夜の数時間の出来事の裏に そのチームがこれまで積み重ねてきた時間の厚みみたいなものがこう透けて見えてくる気がします。ええ。 障害はシステムの脆さを露呈させますけど、同時にチームの強さや文化も浮き彫りにしますからね。そういう意味でインシデントは組織にとっての健康診断のようなものだとも言えるかもしれません。 さて、ここまで決済サーバーの障害対応に関する一連の資料を深掘りしてきました。パニックから始まる初動、冷静な切り分けによる原因特定、そして解決後のRCAを通じた組織的な学び。 はい。私たちが普段当たり前のように使っているサービスの裏側で、こういう戦いが繰り広げられていることを改めて感じさせられます。そうですよね。 冗長化された完璧に見えるシステムも、たった1行のテキストで沈黙する。そしてそれを救うのは最終的には人間の知恵とチームの力だということですね。そうですね。 この資料は技術的な問題解決のプロセスを見事に描き出しています。しかし、ここで一つ、あなたに考えてみてほしい問いが浮かび上がります。と言いますと。 それはこの物語のその後にについてです。その後。ええ。今回の件で新人のカイは大きな失敗を経験し、同時にそれを乗り越えることで劇的に成長したはずです。 では彼を導いた先輩のアキはこの一件から何を学んだんでしょうか。ああ、なるほど。優秀なエンジニアである彼女にとっても、 自分のチームのプロセスに穴があったという事実は何らかの気づきを与えたはずです。本当の意味で強い組織とはヒーローのようなスーパーエンジニアが一人の力で問題を解決する組織じゃない。ええ。 誰もが失敗から学び、その学びを仕組みに還元して、組織全体が少しずつ賢くなっていく、そういう組織なのかもしれません。 あなたの周りのチームは失敗を個人の成長だけでなく、組織の成長へと繋げられているでしょうか。
このコンテンツは Web society で視聴・学習できます。