概況
- API リクエストごとに1つの Kafka プロデューサを作成する機能が、ピーク時には1時間あたり約420万もの追加プロデューサを生成し、ブローカのヒープを枯渇させ、イベント、通知、統合、API、モバイル、ステータス通信の各パスを劣化させました。
- 最初の対応ではトリガーを特定せずにサービスを復旧しましたが、同日中に再発が発生し、異常な Kafka トラフィックがこの機能によるものであることが判明し、PagerDuty は問題のあるコードをロールバックしました。
インシデント管理プラットフォームは、運用責任の連鎖の中で特異な位置を占めています。顧客がこのプラットフォームを使用するのは、状況が正常なときだけではありません。別のシステムが障害を起こしている瞬間こそ、顧客はこれに依存します。遅延したイベント、届かない通知、信頼できないステータス更新が、別の緊急事態への対応を歪める可能性があります。だからといって、無中断サービスが可能になるわけではありません。しかし、制御の配分が異常に重要になるのです。重要なのは、PagerDuty が Kafka が決して障害を起こさないと約束できるかどうかではありません。障害を引き起こした決定、診断を遅らせたシグナル、影響を拡大したメカニズム、そして同じ経路が閉鎖されたことを示す証拠を、同社が制御していたかどうかです。
PagerDuty が2025年8月28日の障害について公開した説明は、その点を集中的に示しています。API キー使用状況の分析を目的とした機能が、API リクエストごとに新しい Kafka プロデューサを作成する原因となりました。ピーク時には、Kafka は1時間あたり約420万もの追加プロデューサを追跡しており、これは通常の新規プロデューサ数の84倍でした。メタデータの負荷により Kafka ブローカのメモリ負荷が増大し、Java 仮想マシンのガベージコレクションがスラッシング状態に陥り、ヒープメモリを枯渇させ、サービス全体の非同期処理を支えるクラスター全体に影響が及びました。目に見える結果は、一度の明確な障害ではありませんでした。受信イベントの拒否、処理の遅延、通知の遅延、API エラー、重複または遅延したウェブフック、統合の障害、そして対応関係者が作成したものの顧客には表示されなかったステータス更新が混在したものでした。
時系列が重要なのは、同じ技術的条件が同日に二度現れたからです。最初のインシデントは03:53 UTC に始まりました。PagerDuty は Kafka を安定化させ、依存サービスを復旧させ、滞留作業を処理し、10:10 UTC までに通常運用を報告しました。しかし、この対応では機能トリガーを特定して除去することはできませんでした。より小規模な再発が16:38 UTC に始まりました。対応者は以前の緩和策を繰り返し、異常なトラフィックパターンを発見し、問題のコードをロールバックし、約50分で顧客への影響を緩和しました。PagerDuty によれば、すべてのサービスは20:24 UTC までに完全に復旧しました。つまり、最初の復旧は決定的な原因除去なしにサービスを回復させたことになります。二度目の対応で、インフラの症状をソフトウェアの変更に関連付けることができました。
この経過は、ソフトウェアの欠陥を説明責任の記録に変えます。根本原因、トリガーイベント、貢献条件、検知の失敗、対応の失敗、復旧の失敗は相互に関連していますが、同一ではありません。これらをひとまとめにして「Kafka 障害」と呼ぶと、それぞれの層を誰が制御していたかが不明瞭になります。また、公的な証拠を誤って伝えることにもなります。PagerDuty は Kafka を欠陥のあるサードパーティ製品として特定したのではありません。自社の機能コードにおける論理エラーと、そのコードが同社のアーキテクチャと相互作用した方法を特定したのです。この区別は重要です。責任は、スタックの中で最も認知度の高い技術名ではなく、メカニズムに対する制御に従うべきです。
証拠は詳細だが、依然として企業の説明である
この再構築の事実的基盤は、PagerDuty が2025年9月5日に公開したエンジニアリングポストモーテムです。これは影響を受けたシステムを運用した組織による一次的な運用記録です。開始時刻と復旧時刻、機能メカニズム、最初の対応の診断経路、その対応でロールバックが行われなかった理由、再発、および多数の影響測定値が示されています。これらの詳細により、ソーシャルメディアの苦情や出典不明の障害要約よりも厳密な分析が可能になります。
同じ情報源には避けられない限界があります。企業のポストモーテムは独立した監査ではありません。PagerDuty が公に表明した内容を確認することはできますが、すべての顧客の体験、すべての内部決定、すべての下流の損失をそれ自体で確定することはできません。ポストモーテムは、PagerDuty が以前に受け付けたイベントとデータを保持したと述べています。この記述は、すべての試行されたイベントが受け付けられたことを意味するわけではありません。PagerDuty は別途、一部の受信イベントが拒否された可能性があること、影響がピークの際に Events API から502応答があったことを述べています。また、遅延した通知が害を及ぼさなかったことを意味するものでもありません。同社がプラットフォームによって既に受け付けられたデータについて述べた、より狭い命題を意味します。
証拠は4つのクラスに分類されます。確認された事実はポストモーテム内の記述で、帰属が重要な場合は PagerDuty に帰属します。証拠に基づく推論は、それらの事実を管理責任に結び付けますが、文書化されていない意図を明らかにするふりはしません。このケースの中心に必要な論争はありません。中心的な因果説明は PagerDuty 自身から提供されています。未知のものは未知のままです。情報源は顧客ごとの損害台帳を提供せず、すべての顧客または地域が影響を受けたことを証明せず、独立した事業損失を定量化せず、機能の完全な内部承認およびテスト記録を開示していません。これらの境界は、深刻さを憶測に変えることを防ぎます。
03:53 UTC 以前:報告機能がクリティカルパスに参入
PagerDuty は Kafka を非同期アーキテクチャの基盤と説明しています。この説明は、最初の重要な管理事実を確立します。Kafka はサービスにとって周辺的なものではありませんでした。Kafka に依存する作業には、受信イベントを通知、統合、ウェブフック、チャットシステム、モバイルアクション、その他の機能に接続する処理パスが含まれていました。したがって、その基盤への負荷を増大させる変更は、非重要な報告インターフェースに隔離された変更とは異なる潜在的な爆発半径を持ちます。
新しい機能は、API キー使用傾向の分析と報告をサポートすることを目的としていました。PagerDuty はそのボリュームが API キーの使用とほぼ同等になると予想していました。表面的には、これは妥当な製品目標です。使用情報を記録し、Kafka トピックに送信し、後で分析するが、開始リクエストを遅らせないことです。説明責任の問題は目標から生じたのではありません。実装の作業単位から生じました。機能はプロデューサを再利用してメッセージを公開する代わりに、各 API リクエストに対して新しい Kafka プロデューサをインスタンス化しました。
この区別は一文に圧縮しやすく、過小評価しやすいものです。プロデューサは、それを作成したリクエストを超えて影響のない一時的なローカルオブジェクトではありませんでした。Kafka は各プロデューサに関連するメタデータを追跡する必要がありました。この操作を API リクエスト規模で繰り返すことで、アプリケーショントラフィックがメッセージキュークラスター内の制御およびメモリ負荷に変換されました。PagerDuty が測定したピーク時には1時間あたり約420万の追加プロデューサが発生し、これは通常の新規プロデューサ率の84倍でした。したがって、この機能は期待される使用メッセージのストリームを単に追加しただけではありません。ブローカが管理しなければならないプロデューサ識別子の母集団を変更したのです。
確認された事実は論理エラーとその結果生じたプロデューサ量です。証拠に基づく推論が続きます。メッセージ数だけに焦点を当てた保証は、間違ったリスクを測定していたでしょう。テストでは、各 API リクエストが1つの期待される使用イベントを生成することを観察できたとしても、リクエストごとに1つのプロデューサによって生み出される増倍するメタデータコストを見逃していた可能性があります。同様に、段階的なロールアウトは即時のトラフィックを制限できたとしても、レビュー担当者がアプリケーションの成功率だけを監視し、プロデューサ作成、ブローカヒープ、ガベージコレクションの動作を連携指標として監視しなければ、因果関係を露呈できなかったでしょう。
ポストモーテムは、8月21日に1%、8月27日に5%と25%、8月28日に75%という段階的ロールアウトを開示しています。正確なプロダクション前のテストスイート、承認チェーン、アラートしきい値は開示されていません。テストが行われなかった、または指名された従業員が既知の危険を無視したと主張することは根拠がありません。より狭い結論が防御可能です。存在していた管理手段は、リクエストごとのプロデューサパターンが共有 Kafka 基盤に到達するのを防ぐことができず、初期の監視状況はそのパターンをシステムメモリ負荷の原因として迅速に特定しませんでした。
これは貢献条件であり、トリガーイベントそのものではありません。コードは異常なプロデューサ増加の能力を生み出しました。実際の API トラフィックがそれを行使しました。Kafka はメタデータを蓄積しました。ブローカのメモリ負荷が上昇しました。ガベージコレクションは安定した余裕を回復せずに労力を消費し始めました。ヒープの枯渇は、問題を非効率的な動作からサービス障害へと移行させました。各ステップには異なる可能性のあるシグナルがありました。説明責任は、それらのシグナルが一緒に見えたのか、アプリケーションとインフラストラクチャのチーム間で分離されていたのかに部分的に依存します。
03:53 UTC:最初の障害は実際よりも小さく見えた
PagerDuty は03:53 UTC を最初のインシデントの開始としています。Kafka メッセージキューイングシステムの1つで発生した障害が、米国サービスリージョンの一部の顧客における新しい受信イベントの処理を中断または遅延させる連鎖的な問題を引き起こしました。「一部の顧客」および「米国サービスリージョン」は重要な制限です。この記録は、全世界のすべての PagerDuty 顧客がサービスを失ったという主張を支持するものではありません。同社が報告した範囲内での深刻な多機能低下を支持します。
初期のアラートは、1つのブローカの障害とハードウェアの問題の可能性を示唆していました。この診断は、最初の対応を導くのに十分なほど妥当でした。エンジニアはクラスターを拡張し、1つのブローカを削除しました。これらのアクションは、見かけ上の障害コンポーネントに対処し、容量を増加させました。しかし、継続的に新しいプロデューサを生成していた機能動作を除去しませんでした。追加のブローカがメモリ不足になると、インシデントは単一ノードの問題ではなくなりました。PagerDuty はその後、システム全体のソフトウェア問題を認識しました。
これが検知の失敗の正確な形です。何かが間違っていることに気づかなかったわけではありません。アラートは確かに発報し、対応者は行動しました。因果関係の検知の失敗でした。初期のテレメトリは、クラスターを枯渇に追いやっていたアプリケーションレベルの動作よりも、ローカルなインフラ症状をより明確に提示しました。検知システムは、痛みを通知するのが速くても、その原因を特定するのが遅い場合があります。共有非同期基盤にとって、この違いは、最初の介入が障害コンポーネントを削除するのか、交換容量も同様に枯渇させるワークロードを停止するのかを決定します。
初期の解釈を非合理と呼ぶことは証拠を超えます。1つのブローカがアラートを発したとき、ハードウェア障害やブローカ障害は通常の仮説です。説明責任の問いは、観測可能性の設計がシステム全体の代替案を十分早く利用可能にしたかどうかです。プロデューサ作成が通常の新規プロデューサ率の84倍に上昇することは、特徴的なシグナルでした。ブローカヒープ消費とガベージコレクションスラッシングは関連シグナルでした。機能ロールアウトは関連する変更シグナルでした。情報源は、それぞれがいつ対応者に可視になったか、または1つのコンソールがそれらを相関させたかどうかを述べていません。しかし、複数のブローカがメモリ枯渇を経験するまで、関係が確立されなかったことを示しています。
この遅れは、実効的な爆発半径を拡大しました。クラスター拡張は余地を追加しましたが、異常な作成パターンは追加の余地を消費する可能性がありました。1つのブローカを削除することで症状のあるノードは排除されましたが、メタデータ作業の流れは排除されませんでした。チームがイベントをシステム全体として扱った後にのみ、対応は効果的になりました。PagerDuty はヒープサイズを倍増し、クラスターを再起動し、Kafka を安定化させ、その後 Kafka に依存するサービスを復旧させました。これらのステップは即時のリソース圧力に対処し、キューに入った作業が再び動くようにしました。
根本原因は、通常の意味でのヒープ不足ではありませんでした。より多くのヒープは緩和策でした。同じ誤ったプロデューサパターンがアクティブなままであれば、容量は枯渇を延期できたとしても、設計を健全にするわけではありません。また、復旧中に現れたバックログが根本原因ではありませんでした。バックログは処理障害の結果であり、後の復旧負荷の源でした。正確な分類が重要なのは、そうでなければ組織は成功した容量介入を文書化しながら、開始ソフトウェア動作をそのままにしておくことができるからです。
影響は不均等な障害の連鎖だった
インシデントプラットフォームには、少なくとも2つの関連するフローがあります。シグナルを受信して処理しなければならず、それらのシグナルを通知と統合を通じて有用なアクションに変えなければなりません。PagerDuty の最初の障害は両方に影響しました。ピーク時には、一部の受信イベントは Events API から502応答で拒否された可能性があります。他のイベントは受け付けられたものの遅延しました。アウトバウンド通知、ウェブフック、Slack および Microsoft Teams を含むチャット統合、REST API 操作、モバイル確認および解決、そしていくつかのエンタープライズ統合は、異なる割合と期間で影響を受けました。
拒否と遅延の違いは運用上重要です。拒否されたイベントは、送信システムに再試行を要求するか、信頼性の高い再試行パスがない場合に消失する可能性があります。遅延したイベントはキューに残りますが、対応決定を変更したであろう時間を過ぎて到着する可能性があります。重複したウェブフックやチャットメッセージは、対応者に複数のインシデントがあるのか、状態遷移が二度発生したのかと疑問を抱かせる可能性があります。API エラーは、通知が既に担当者に届いている場合でも、確認や更新を妨げる可能性があります。単一の「可用性」パーセンテージは、これらの異なる負担を隠すことになります。
PagerDuty は、イベントの約14%が遅延したと述べています。イベント拒否は38分間で約95%に達しました。これらの数値を、すべてのイベントの95%が恒久的に失われたという主張に統合すべきではありません。これらは異なる条件を測定しています。同社はまた、メール取り込みイベントの約16%が遅延し、処理されなかったのは1%未満であったと報告しています。変更イベントについては、6.5%が55分間拒否されました。各数値はポストモーテム内のカテゴリと期間によって制限されています。
アウトバウンドパスでは、通知の約23%が209分間にわたって少なくとも5分遅延しました。PagerDuty は通知が完全にドロップされることはなかったと述べています。この記述はある側面では安心感を与え、別の側面では深刻です。通知システムはすべてのメッセージを最終的に配信できても、時間に敏感な目的を果たせない可能性があります。5分は、メッセージが対応を動員することを目的としている場合、抽象的な遅延ではありません。公的な記録は、個々の顧客のインシデントで何が起こったかを確定していないため、でっち上げの緊急事態や金銭的損失を支持することはできません。しかし、PagerDuty の測定によれば、通知の約4分の1が5分の遅延しきい値を超えた長期期間が存在したことを確定します。
REST API では、約150分間エラー率が上昇しました。PagerDuty は、作成リクエストの18.87%が130分間にわたって5xx 応答を返し、更新リクエストの4.35%が190分間にわたって5xx 応答を返したと報告しています。モバイルワークフローも影響を受けました。ユーザーの6.06%がモバイルアプリケーションを通じてインシデントを確認または解決できませんでした。これらの障害は相互に作用する可能性があります。通知が遅延し、確認リクエストが失敗し、統合が後で再試行する場合、基礎となるインシデントデータが最終的に保存されていたとしても、顧客の対応者が何をいつ知っていたかの記録が信頼性を失う可能性があります。
PagerDuty はまた、Jira、ServiceNow、Salesforce、Zendesk の統合イベントが約100分間遅延またはドロップされたと挙げています。ウェブフックは約100分間遅延、ドロップ、または重複しました。チャットシステムは遅延と重複メッセージを経験しました。これらは交換可能な便利機能ではありません。顧客はしばしばそのような出力をチケット作成、エスカレーション、所有権、監査証跡に組み込みます。PagerDuty の情報源は、各顧客の下流での調整の質を測定していません。プラットフォームがそれらの顧客に回復作業を委ねたことを確認します。再試行、ギャップの確認、重複の抑制、遅延メッセージが現在の状態を反映しているかどうかの判断などです。
したがって、証拠は制限付きの推論を支持します。障害のコストは、ウェブページにアクセスできなかった時間だけに限定されません。顧客の運用に不確実性を移転しました。顧客が PagerDuty の出力を中心に自動化を構築すればするほど、受け付けられたイベントと拒否されたイベント、遅延した通知と現在の通知、重複と新しい状態を区別する必要が生じました。この推論は損失を定量化しません。インシデント調整のために販売された依存関係において、信頼性のあるセマンティクスに対する責任がどこにあるかを特定します。
ステータスページがステータスが重要だった瞬間に機能しなかった
最初のインシデントは、PagerDuty の外部コミュニケーションプロセスも妨げました。同社は、更新は内部的に作成されたが、ステータスページに公開されなかったと述べています。追加のエンジニアリングチームが関与し、対応者は手動で更新を追加するためのバックアップ手順を使用しました。PagerDuty はステータスページの更新が約100分間遅延したことを記録しています。
これは、Kafka の根本原因とは別の対応の失敗でした。機能バグが論理的に公開コミュニケーションの遅延を必要としたわけではありません。内部インシデント知識を外部ステータス情報に変換するプロセスが正常に完了せず、バックアップパスに手動介入が必要だったために遅延が発生しました。ステータスページは、プライマリサービスが低下しているときに顧客の不確実性を減らすことを目的としています。公開が影響を受けた環境に結合されたパス、または独立して検証されていない外部プロセスに依存している場合、顧客はサービスと信頼できる説明の両方を同時に失う可能性があります。
ポストモーテムは、内部ドラフト、正確な公開依存関係、各試行された更新の時刻、または完全な手動手順を提供していません。特定のツールが失敗した、または特定のチームが義務を怠ったと主張することは憶測になります。確認された境界はより狭いものです。内部更新は存在したが、公開表示は時間通りに行われず、より多くのエンジニアが関与し、バックアップ手順が使用されました。証拠に基づく教訓は、コミュニケーションの回復は技術的復旧と同じリハーサルに値するということです。作成されたメッセージは、それを見ることができない顧客にとって運用上の価値はありません。
遅延はまた、顧客の診断を複雑にします。インシデント管理プラットフォームが一貫性なく動作する場合、顧客は自社の監視システムがイベントの発行を停止したのか、統合が失敗したのか、プラットフォームが遅延しているのかを判断しなければなりません。タイムリーな独立したステータスシグナルはその検索を絞り込むことができます。更新がないと、各顧客はローカルテスト、サポート連絡、または推測に追いやられます。診断作業のこの重複は、コミュニケーション障害の予測可能な結果ですが、ポストモーテムはそれを定量化していません。
10:10 UTC の安定化はトリガーの除去ではなかった
PagerDuty は、すべてのサービスとシステム機能が10:10 UTC までに通常運用に戻ったと述べています。この時点に達するには、Kafka を安定化させ、それに依存するサービスを復旧させる必要がありました。処理が再開されるにつれて、顧客は PagerDuty が古いメッセージを処理している間に遅延した通知やアラートを受け取る可能性がありました。一部の顧客は重複したウェブフックを受け取る可能性がありました。したがって、復旧にはキューイングの尾部がありました。インフラは安定している一方で、古い作業が引き続き顧客システムに現れる可能性がありました。
その尾部は復旧条件であり、新たな障害の証拠ではありません。キューに入ったメッセージは、明示的なポリシーの下で処理するか、意図的に破棄する必要があります。PagerDuty は以前に受け付けられたイベントとデータが失われなかったと述べているため、バックログの処理は保存と一致しています。しかし、保存は順序と適時性の問題を生み出します。古いアラートを受け取った顧客は、それが古いことを知るのに十分なコンテキストを必要とします。再試行や重複を受け取る自動化エンドポイントは、べき等動作または調整プロセスを必要とします。プラットフォームと顧客はそれぞれ、その境界の異なる部分を制御します。
より重大な制限は、問題の機能がロールバックされていなかったことです。PagerDuty はその理由を明確に説明しています。最初のインシデント中、トリガーは明らかではなく、対応者は Kafka の安定化に集中しました。この記述は、意図や無関心として書き換えるのではなく、真剣に受け止めるべきです。インシデント対応者は、重要な共有システムを復旧させることと、考えられるすべての上流原因を調査することの間で選択しなければならないことがよくあります。因果関係の状況が不完全な場合、即時の安定化は合理的な優先順位です。
しかし、その決定には、たとえ合理的であっても説明責任の結果が伴います。サービスは運用可能でしたが、開始コードパスは同じ異常な負荷を生み出す能力を持ち続けました。最初の対応はヒープを増やし、クラスターを再起動しました。ヒープを消費した条件がなくなったことを決定的に示していませんでした。信頼性の観点では、復旧はサービスレベルでは達成されたが、因果関係レベルではまだ達成されていませんでした。そのギャップは同日の後半に明らかになりました。
これが最初の復旧の失敗であり、慎重に定義されています。10:10 UTC での復旧作業がサービスを復旧させなかったという意味ではありません。インシデントが運用上正常と見なされる前に、トリガーが除去されたことを復旧保証が確立しなかったことを意味します。公的な情報源は、その間隔中に適用された監視や変更凍結条件について述べていません。しかし、同じクラスの Kafka 問題が16:38 UTC に再発したことを示しています。
16:38 UTC:再発が緩和策を診断に変えた
PagerDuty は二度目のインシデントをより小規模な再発と説明しています。対応者は以前に使用した緩和手順を再適用し、約50分で顧客への影響を制限しました。このより迅速な封じ込めは、チームが影響を受けたシステムを安定化させる方法を学んだことを示唆しています。それ自体では、以前の根本原因が理解されたことを示すものではありません。二度目の対応での決定的な変更は、異常トラフィック源の発見と問題コードのロールバックでした。
再発は証拠を鮮明にしました。ブローカまたはハードウェアの説明では、一日全体を都合よく説明できなくなりました。同じプラットフォームが最初のクラスター介入後に関連する Kafka 障害を経験しました。対応者は現在、最近のベースライン、既知の緩和手順、および変更とトラフィック動作に関するより小さな検索ウィンドウを持っていました。PagerDuty は、この対応中に異常トラフィックパターンの発生源を発見したと述べています。機能コードがプロデューサ急増にリンクされると、ロールバックはメモリ結果だけでなく、開始ソフトウェア条件に対処しました。
「影響緩和」と「完全復旧」の区別が再び重要です。同社によれば、2回目のイベントからの顧客への影響は約50分で緩和されました。PagerDuty はすべてのサービスの完全復旧を20:24 UTC に報告しています。これらの記述は共存できます。インシデントが新たな深刻な害を引き起こすのを停止している一方で、依存システム、キュー、統合、検証タスクが通常状態に向けて継続している可能性があります。記録を50分の障害に圧縮することは、その復旧間隔を省略することになります。間隔全体を等しく深刻と呼ぶことも不正確です。
ロールバックは、容量拡張単独よりも強力な因果証拠を提供しました。ポストモーテムは管理された実験を提供していませんが、一連の流れは証拠に基づく推論を支持します。問題のある機能が削除されると、異常なプロデューサトラフィックの再生成が停止し、修復されたインフラ状態が維持できるようになりました。ポストモーテム自身の因果関係の説明は、論理エラー、プロデューサ増殖、メタデータ圧力、ガベージコレクションスラッシング、ヒープ枯渇、クラスターカスケードを特定しています。公開された記録には、競合する公的因果関係は提示されていません。
したがって、修辞的バランスのために原因を争うことはほとんど価値がありません。責任ある区別は、確認された企業説明と、ここで使用される公開記録では利用できない独立した検証の間です。PagerDuty は機能メカニズムを公に所有しました。未知のものは、内部管理記録と下流の顧客結果に関するものであり、妨害行為、犯罪、または意図的な行為の別の主張ではありません。公開された証拠はそのような主張を支持していません。
因果関係の台帳
根本原因は機能の論理エラーでした。メッセージを公開するためにプロデューサを再利用する代わりに、各 API リクエストに対して Kafka プロデューサを作成したことです。この実装により、通常のリクエスト量が異常なプロデューサメタデータを生成しました。PagerDuty は機能コードとそれが実行されたサービスアーキテクチャを制御していました。誤った動作を削除することで開始メカニズムに対処したため、これが最も深く文書化された原因です。
トリガーイベントは、そのコードの実稼働規模での実行でした。API リクエストが繰り返しプロデューサをインスタンス化し、ピーク時には Kafka が1時間あたり約420万の追加プロデューサを追跡するまでになりました。公開説明では、トリガーは悪意のあるトラフィックイベントではなく、Kafka 製品の欠陥として特定されていません。PagerDuty の機能動作と実稼働リクエスト量の遭遇でした。
貢献条件には、共有 Kafka 基盤の重要度、プロデューサ増殖のメタデータコスト、有限のブローカヒープ、そして緩和ではなくスラッシングになったガベージコレクション応答が含まれます。アーキテクチャは、1つの分析機能によって生み出された圧力が、複数の顧客向けおよび応答向けパスに影響を与えることを許可しました。公開記録はまた、保証範囲に関する懸念を支持します。実装は、リクエストごとのプロデューサ作成を防ぐか即座にフラグする管理手段なしに実稼働に達しました。情報源は、どの特定のテストまたは承認がそれをキャッチすべきだったかを明らかにしていないため、その懸念は名前付きプロセス違反の主張ではなく、結果に関する推論のままです。
検知の失敗は診断的なものでした。初期のアラートは対応者を1つのブローカとハードウェアの問題の可能性に向けました。システムは障害症状を検知しましたが、最近の機能、プロデューサ数加速、ブローカヒープ圧力、ガベージコレクション動作の間のクロスレイヤー相関は、最初のイベントの早い段階で正しい原因を生み出しませんでした。PagerDuty は追加のブローカがメモリを使い果たした後にシステム全体の性質を認識しました。異常トラフィック源を発見したのは再発時のみでした。
対応の失敗には2つの部分がありました。技術的には、クラスター容量の追加とブローカの削除という初期のアクションは、より多くの容量を消費するワークロードを停止することなく、見かけ上のローカル障害を処理しました。これは行動が非合理的だったという主張ではなく、実際の原因に対して不完全だったという記述です。コミュニケーション的には、内部で作成されたステータス更新がタイムリーな公開更新にならず、バックアップ手順には追加のエンジニアリング注意と手動投稿が必要でした。
復旧の失敗も2層でした。最初の復旧はサービスを正常に戻しましたが、問題の機能をアクティブなまま残しました。その役割がまだ知られていなかったからです。これにより再発リスクが残りました。別途、復旧は顧客が解釈しなければならない古いメッセージと重複出力の影響を生成しました。2回目のインシデント中、対応者は既知の緩和策を使用し、コードを特定してロールバックし、その後20:24まで依存機能の復旧を続けました。
結果は、単一のバイナリ障害ではなく、制限された影響のポートフォリオでした。受信作業は拒否または遅延される可能性がありました。アウトバウンド通知は恒久的にドロップされることなく遅延する可能性がありました。API はエラーを返す可能性がありました。統合は作業を遅延、ドロップ、または重複する可能性がありました。モバイルユーザーは確認または解決できない可能性がありました。公開ステータス情報は内部知識に遅れる可能性がありました。これらの影響が重要なのは、まさに PagerDuty が顧客にとって検知と対応の間に位置するからです。
この分類は2つの一般的なエラーを防ぎます。1つ目は、インシデント全体を1つのコーディングミスに帰し、そのミスが共有基盤に負荷をかけ、早期診断を回避することを可能にした条件を無視することです。2つ目は、責任を広く分散させすぎて、誰も制御者として見えなくなることです。Kafka、顧客システム、ネットワークトラフィックは環境の一部でしたが、PagerDuty の証拠は、決定的な機能、アーキテクチャ、観測可能性、緩和策、コミュニケーション、ロールバック管理を PagerDuty の運用領域内に置いています。
説明責任は PagerDuty が保持していた管理に従う
PagerDuty は機能設計を制御していました。API 使用データがどのように生成され、Kafka に送信されるかを決定しました。コードレビュー、テスト環境、ロールアウト方法、実稼働観測可能性を制御していました(公的情報源が各管理の内容を開示していなくとも)。共有 Kafka アーキテクチャとその周囲の容量およびアラートを制御していました。インシデント対応、ステータス公開プロセス、ロールバック、ポストモーテムを制御していました。これらの管理は、この障害の防止、検知、封じ込め、説明、修復において PagerDuty を主要な説明責任主体とします。
主要な説明責任は、すべての下流イベントに対する無制限の責任と同じではありません。ポストモーテムは顧客の事業損失を定量化しておらず、遅延したすべてのメッセージが損害を引き起こしたことを示していません。契約上の結果を確定していません。鑑定の配分は、「通知の23%が少なくとも5分遅延した」から総額の金銭的数値に飛躍すべきではありません。PagerDuty が影響を受けた顧客に提供できる証拠は何か、つまり受付記録、拒否応答、配信タイムスタンプ、再試行動作、重複識別子、サービスリージョン範囲を尋ねるべきです。
顧客はいくつかの管理を保持していましたが、同等のものではありません。顧客は自社のシステムを独立して監視し、ローカルイベントキューを保持し、502応答に対する再試行ロジックを実装し、ウェブフックコンシューマをべき等にし、代替エスカレーション連絡先を維持し、1つのベンダーのステータスページを唯一の真実の情報源として扱わないようにすることができました。これらは慎重な依存関係管理です。リクエストごとのプロデューサ欠陥の責任を顧客に移すものではありません。顧客は自らのエクスポージャーを軽減できましたが、PagerDuty の内部機能を検査したりロールバックしたりすることはできませんでした。
同じ非対称性が通知遅延に適用されます。顧客はどのイベントが PagerDuty に入り、チームがどのように応答するかを決定します。PagerDuty は、受け付けられたイベントが時間通りにプラットフォームを通過するかどうかを制御します。成熟した共有責任の説明は、誤った等価性を作り出すことなく両方の側面を特定する必要があります。ベンダーは内部処理の信頼性と真実のインシデント証拠を所有します。顧客は、特にベンダーが顧客自身の緊急パスの一部である場合、ベンダーが障害を起こす残余の可能性に対するコンティンジェンシー設計を所有します。
Kafka に製品障害を割り当てるべきではありません。PagerDuty のポストモーテムは、Kafka のメタデータ追跡とメモリ動作を、機能エラーが破壊的になった環境として説明しています。Kafka が文書化された保証に違反したとか、イベントを引き起こした欠陥を含んでいたとは述べていません。これを「Kafka 障害」と呼ぶことは運用上便利かもしれませんが、Kafka ブローカがヒープを使い果たしたからといって、説明責任の結論として不完全です。実行可能な根本原因は、PagerDuty によるプロデューサの作成と、そのパターンに対する効果的な制約の欠如にありました。
ステータスページの問題も PagerDuty に属します。顧客は内部ドラフトが公開されるかどうかを制御していませんでした。回復力のあるコミュニケーション設計は、サービスを低下させるのと同じ条件がすべての公開依存関係を無傷のままにすると想定すべきではありません。証拠は、PagerDuty のバックアッププロセスが定期的にテストされたかどうかを教えていません。バックアップが必要であり、更新が約100分間遅延したことを教えています。イベント後の説明責任は、手動投稿が最終的に機能したと言う以上に、現実的な障害条件下で独立したパスが十分に速いという証拠を必要とします。
測定にも説明責任の義務があります。PagerDuty のポストモーテムは、エラーの割合と期間について異常に具体的です。この精度は、影響を受けた組織がオールオアナッシングの解釈を避けるのに役立ちます。また、フォローアップの質問を生み出します。割合は関連するすべてのリクエストに対して計算されたのか、限定された母集団に対してか。顧客はテナント固有のデータを入手できるか。遅延、ドロップ、拒否、重複した出力はどのように分類されたか。公開された要約はこれらの質問に答えていません。これらを提起することは正当です。なぜなら、測定は一般的なインシデントの物語と使用可能な顧客の再構築の間の境界を制御するからです。
最後に、説明責任は説明から耐久性のある修復の証明に及びます。コードのロールバックは文書化されたトリガーを停止しました。それ自体では、同様のオブジェクトライフサイクルエラーが別の共有キューに到達できないこと、または監視が次のアプリケーションレベルの異常をブローカリソース圧力と相関させることを証明しません。耐久性のある証拠には、プロデューサ作成の制約、異常なプロデューサカーディナリティで失敗するテスト、ブローカ死亡だけでなくレートに関連付けられたアラート、インフラ健全性にリンクされたロールアウトチェック、およびプライマリインシデントプラットフォームから独立して検証されたコミュニケーションパスが含まれます。これらは障害から導き出された証拠に基づく要件であり、PagerDuty がすべての項目を実装したかどうかの主張ではありません。
公開記録が解決できないこと
ポストモーテムは影響を受けたすべての顧客を特定したり、すべての地域を定量化したりしていません。米国サービスリージョンの一部の顧客が混乱または遅延を経験したと述べています。それ以上の主張は記録を超えます。通知が遅すぎて到着した個々のインシデントを列挙せず、経済的損失を独立して計算していません。これらのギャップは、架空の被害者を事実として提示することで埋めるべきではありません。
記録はまた、機能の完全なガバナンス履歴を公開していません。正確なコードレビュー議論、テストケース、負荷テストの形状、デプロイメント段階、オンコール引き継ぎ、または03:53から10:10の間に使用された決定しきい値はわかりません。結果はわかっています。機能は実稼働に達し、プロデューサ数が急増し、初期シグナルはブローカまたはハードウェア障害に似ており、トリガーは最初のインシデント中に特定されませんでした。これは管理設計をテストするのに十分ですが、個人がリスクを認識して受け入れたと非難するには十分ではありません。
ここには犯罪行為、詐欺、妨害行為、意図的なサービス低下の証拠はありません。PagerDuty が受け付けイベントの損失を隠蔽したと主張する根拠はありません。その説明は、以前に受け付けられたイベントとデータは失われていないと明示的に述べ、別途拒否と遅延を報告しています。これらの記述は一緒に保存されるべきです。注意深く範囲設定された運用事実を根拠のない申し立てに変換すると、批判的分析は強くなるどころか弱くなります。
情報源はまた、長期的な是正の完了を独立して検証していません。ロールバックは確認されたインシデントアクションです。クラスター安定化は会社の説明で確認されています。ステータスプロセスはバックアップの手動ルートを使用しました。しかし、ポストモーテムの提案または暗示された学習は、時間の経過に伴う管理の動作を示す後の監査と同じではありません。レビュー担当者は、修復意図、実装証拠、有効性証拠を区別する必要があります。公開記録によって閉じられているのは、インシデント当日の介入のみです。
顧客側の証拠は別の未知のままです。ローカルリクエストログ、PagerDuty 応答コード、ウェブフック識別子、通知タイムスタンプを持つ顧客は、自社のエクスポージャーをより正確に再構築できる可能性があります。その証拠は公開ポストモーテムの外にあります。顧客ごとの公開台帳がないことは、誰も被害を受けなかったという証拠として誤解されるべきではなく、被害を発明する許可として扱われるべきでもありません。これは、結論を証拠が支持するレベルにとどめる理由です。
原因、キュー、および記録が安定して初めて復旧は完了する
PagerDuty の8月28日の障害は、サービス復旧が復旧の1つの層に過ぎないことを示しています。10:10 UTC 時点でサービスは正常でしたが、因果的トリガーは特定され除去されていませんでした。復旧中、古いメッセージや重複出力が引き続き顧客に届く可能性がありました。公開ステータスコミュニケーションはすでに内部対応に遅れていました。システムは機能していましたが、原因、キュー、外部記録はすべて等しく落ち着いているわけではありませんでした。
2回目のインシデントまでに、対応者は既知の安定化プレイブックを持っていました。影響をより迅速に緩和し、異常トラフィック源を発見し、問題コードをロールバックしました。20:24 UTC の完全復旧は、最初の復旧よりも強い状態で運用日を終了しました。それは以前の失敗を消し去るものではありません。明確にします。容量とクラスターの復旧は時間を稼ぐことができますが、因果的復旧には容量を不十分にしたワークロードを削除する必要があります。
このケースはまた、インシデント管理プロバイダーが信頼性を最終的な配信としてのみ定義できない理由を示しています。その製品は顧客の応答時計の中にあります。保存されたが遅延した通知、重複したウェブフック、拒否されたイベント、公開されないステータス更新は、異なるリスクを課します。それぞれに独自の証拠と復旧行動が必要です。それらを1つの稼働時間数値に集約すると、説明責任の連鎖が見えにくくなります。
PagerDuty による詳細なメトリクスと具体的な因果メカニズムの公開は、責任ある開示の一部です。それにより精査が可能になります。残されたテストは、組織がその管理が重要だった行動(プロデューサ作成率、変更に関連するブローカメモリとガベージコレクション、バックログセマンティクス、独立したステータス公開、インシデントが完全に復旧されたと宣言される前の因果的閉鎖)を現在監視していることを実証できるかどうかです。これらは完璧さへの要求ではありません。会社が実際に保持している管理に合わせた証拠への要求です。
中心的な教訓は控えめですが要求が厳しいものです。インシデントを管理するために使用されるプラットフォームが、自社の2つの障害の間に不確実性の源となりました。文書化された根本原因は、PagerDuty の機能コードにおける論理エラーでした。共有 Kafka アーキテクチャと不完全なクロスレイヤー検知が貢献しました。最初の対応はトリガーを除去せずにサービスを復旧させました。2回目の対応は異常トラフィックを機能にリンクし、ロールバックしました。根拠のない申し立ては必要ありません。時系列自体が、説明責任がどこにあるかを示しています。リスクを見て、制約し、伝達し、除去できた当事者、そしてそれらの決定的な管理のほとんどは PagerDuty のものでした。
情報源
- PagerDuty Engineering, "August 28 Kafka outages: What happened and how we're improving", September 5, 2025:https://www.pagerduty.com/eng/august-28-kafka-outages-what-happened-and-how-were-improving/
- PagerDuty Status, first August 28 incident record:https://status.pagerduty.com/posts/details/P0LKNIW
- PagerDuty Status, second August 28 incident record:https://status.pagerduty.com/posts/details/PR7TOYW
- PagerDuty Engineering, incident-response organizational context:https://www.pagerduty.com/eng/in-incident-response-its-the-people-who-make-all-the-difference/
- PagerDuty Engineering, Watchtower and journey-gated rollout controls:https://www.pagerduty.com/eng/watchtower-and-journey-gated-rollouts/
- PagerDuty Support, outage notifications:https://support.pagerduty.com/main/docs/pagerduty-outage-notifications
- PagerDuty Support, services and integrations:https://support.pagerduty.com/main/docs/services-and-integrations
- PagerDuty Support, incidents:https://support.pagerduty.com/main/docs/incidents
- PagerDuty Support, webhooks:https://support.pagerduty.com/main/docs/webhooks
- PagerDuty Support, API access keys:https://support.pagerduty.com/main/docs/api-access-keys
- PagerDuty Support, event analytics:https://support.pagerduty.com/main/docs/event-analytics
- PagerDuty Support, event orchestration:https://support.pagerduty.com/main/docs/event-orchestration
- PagerDuty Support, external status pages:https://support.pagerduty.com/main/docs/external-status-page
- PagerDuty Developer, Events API reference:https://developer.pagerduty.com/api-reference/YXBpOjI3NDgyNjU-pager-duty-v2-events-api
- Apache Kafka documentation, transaction timeout broker configuration:https://kafka.apache.org/41/documentation.html#brokerconfigs_transaction.max.timeout.ms
- Apache Kafka documentation, producer ID expiration broker configuration:https://kafka.apache.org/41/documentation.html#brokerconfigs_producer.id.expiration.ms
- Apache Pekko Connectors, Kafka producer documentation:https://pekko.apache.org/docs/pekko-connectors-kafka/current/producer.html
- InfoQ, independent postmortem summary:https://www.infoq.com/news/2025/09/pagerduty-kafka-outage/
- incident.io Status, downstream PagerDuty integration record:https://statuspage.incident.io/incidentio/incidents/01K3QFWM17S6N231Z39Z9KXKPP
- PagerDuty, 2026 Form 10-K:https://www.sec.gov/Archives/edgar/data/1568100/000156810026000012/pd-20260131.htm

