Cloudflareは最近、11月14日にCloudflare Logsに影響を与えるインシデントが発生し、3.5時間の間にログの55%が失われたことを確認した。
このインシデントは、同サービスを利用しているほとんどの顧客に影響を与え、設定ミスが一連のシステム障害を連鎖的に引き起こし、予期せぬ需要の急増に対処する上での弱点を露呈した。Jamie Herre、Tom Walwyn、Christian Endres、Gabriele Viglianisi、Mik Kocikowski、Rian van der Merweが次のように説明する。
Cloudflareは通常、1日に約4兆5000億件の個別イベントログを顧客に送信しています。これは、処理される50兆を超えるトータルの顧客イベントログの10%未満にしか相当しませんが、信頼性と耐障害性の高いシステムを構築する際には、規模に関する独自の課題が生じます。
Cloudflareは、世界中の330以上の都市にある何万台ものサーバーからログを配信するために、Logpushを開発した。Logpushは、ログを収集し、予測可能なファイルサイズにプッシュするように設計されたGolangサービスであり、使用量に応じて自動的にスケーリングする。内部Bufteeサービスは各Logpushジョブにバッファを提供し、ゾーンまたはアカウントによって生成されたログの100%を含む。Logpushはこれらのバッファからログを読み出し、顧客が設定した様々な宛先にバッチでプッシュし、毎日6億以上のバッチが処理されている。
記事の中で、チームは11月14日に何が問題だったかを明らかにし、関係するシステム、発生した障害、Cloudflareが今後取る予定の措置を詳述している。著者は次のように述べている。
Logpushの追加データセットをサポートするために変更しました。このため、Logfwdrがこの新しいストリームに転送する顧客のログを知るために、Logfwdrに提供する新しい設定を追加する必要がありました。(中略)このシステムのバグにより、Logfwdrに空白のコンフィギュレーションが提供されてしまいました。
チームはミスを特定し、5分以内にその変更を元に戻したが、この失敗がLogfwdrに2つ目の潜在的なバグを引き起こし、Bufteeを応答不能にする大規模な過負荷を引き起こした。ESETのシニアコーポレートサイバーセキュリティアドバイザーであるNermin Smajic氏は、次のようにコメントしている。
この事件は、サイバーセキュリティが外部からの脅威を防ぐだけでなく、複雑な技術的課題に耐えられる堅牢で回復力のある内部システムを維持することが重要である理由を例証しています。
Bufteeの誤った設定からの復旧にCloudflareは数時間を要した。著者はこう明かす。
Logfwdrがすべての顧客のイベントログを送信し始めたとき、Bufteeはそれらのログが到着するたびに、それぞれの顧客に対してバッファを作成し始めました。(中略)この膨大な増加は、約40倍のバッファをもたらすものであり、Bufteeクラスタが処理するためにプロビジョニングしたものではありません。
出典:Cloudflareブログ
Airbnbのスタッフ・ソフトウェア・エンジニアで、『Surfing Complexity』の著者であるLorin Hochstein氏は、次のように見ている。
Cloudflareは常に、技術系企業の中でもっとも質の高いインシデント記事を公開しています。最新のものも例外ではありません。(中略)自動化された安全性メカニズム自体が複雑さを増しており、バグのない安全性コードを実装することは、バグのない機能コードを実装することと同じくらい難しいです。
Cloudflareの運用チームは、こうした特定の設定ミスを見逃すことがないよう、より多くのアラートを実装することを約束している一方で、ミスや設定ミスが避けられないことは認めている。彼らは、すべてのCloudflareシステムの目標は、そのような問題に対して予測可能かつ適切に対応するべきであると強調している。