Incident Library
Applied filters ComponentMessage brokerClear allEvery case under the filters, with no sentence; newest first.
Suggested filters Search, and the values found in your words appear here.

Graph

  • Root cause
  • Component
  • Symptom
  • Contributing factor
  • Case

Cases15 cases

1 to 5 of 15

  1. Symptoms

    From 20:04 UTC on 16 September 2026 AssemblyAI's US Async API returned elevated server errors. At the peak roughly 50% of async transcription requests on the US endpoint failed, and part of the requests that succeeded took longer than usual to complete.

    Trigger

    The AWS SQS Fair Queues feature began rejecting valid messages with InvalidParameterValue because of a change on the AWS side; AWS confirmed a service-side issue.

    Root cause
    Component
    Contributing factor
    –
    Remediation
    • Disabled Fair Queues across all services and reverted to standard SQS queues
    Action items
    • Move service configuration from environment variables to a global feature flag system so mitigations apply in seconds
    • Add a reviewed break-glass path that lets urgent fixes skip non-essential CI steps
    • Fail the US pipeline over to a second region when a regional provider dependency degrades
  2. Symptoms

    From about 6:00 on the last business day of a month, Cloud Pub/Sub messages of the Merpay accounting event pipeline began to back up, new accounting data stopped being registered in Cloud Spanner, and the accounting system intermittently could not accept new data. The backlog grew to about 10 million messages.

    Trigger

    More than a month earlier the Cloud Functions of the pipeline had been moved from 1st gen to 2nd gen (based on Cloud Run) without setting --max-instances in the deploy command, which lowered the scale limit from effectively unlimited, the 1st gen default, to 100, the 2nd gen default. The month-end peak, which on that day continued for about 40 minutes, reached that limit.

    Root cause
    Component
    Contributing factor
    Remediation
    • Re-ingested the messages saved to GCS by the Dataflow subscription, avoiding data loss
    Action items
    • Set max-instances and the other scaling parameters of Cloud Run explicitly in the deploy definition, raising max-instances from 100 to 1000 in steps
    • Set min-instances to 1 to avoid cold starts, raise concurrency from 1 to 10, and set CPU to 1 and memory from 512MB to 1Gi
    • Use the dual CPU scaling mode of spanner-autoscaler v0.8.0 with a new Total CPU threshold of 70%
    • Lower the High priority CPU threshold from 60% to 55% so scale-up starts earlier
    • Forbid Spanner scale-down between 5:00 and 7:00
    • Reserve Spanner processing units on a schedule for periods with predictable load
    • Alert in Datadog when the Cloud Run instance count reaches 40% and 60% of its limit
    • Alert in Datadog when undelivered Pub/Sub messages exceed a threshold, lowering it step by step
    Lessons

    When moving to a new generation of a managed service, defaults that the team never changed can surface as problems under load, so parameters that only matter at peak, such as scale limits, concurrency and timeouts, should be set explicitly at every migration. An outage rarely has one cause; the fact that the previous month passed under the same conditions pointed to traffic continuity, and prevention needs to look at the trigger, the amplification and what turned it into damage. Capacity settings and the monitoring that shows when they are approached have to be designed together, and teams that run systems they inherited should review these settings and assumptions regularly.

  3. Symptoms

    On 5 December, during the cleanup after a zonal failover exercise in production, Honeycomb destroyed Kafka brokers on purpose as a runbook step, and several topic partitions lost every broker that held them and became fully leaderless. Any Honeycomb team or environment whose assigned partitions were all unavailable could no longer have its data ingested.

    Trigger

    During the cleanup that rebalances workloads after a successful zonal failover exercise, Honeycomb followed its runbook and destroyed Kafka brokers on purpose. Older, in-sync brokers were killed by accident, so some topic partitions lost every broker that held them.

    Root cause
    Component
    Contributing factor
    Detection

    Responders noticed through the alerting noise that the ingest service Shepherd had gone into a crash loop more than an hour earlier. On Saturday morning they saw that the Kafka balancing jobs were not progressing and disk usage had not improved, and once the metadata topics were repaired, SLO processing triggers fired about ~18h of late data.

    Remediation
    • Marked the impacted partitions read-only on the producer side, which stopped Shepherd's crash loop
    • Ran partition reassignments to bring customers back to normal
    • Turned off the Kafka autobalancer and left a manual reassignment plan running overnight
    • Reduced local retention on Kafka to rely on S3 tiered storage for longer retention
    • Repaired the broken _confluent-tier-state and __consumer_offsets partitions, which unblocked SLO processing
    • Turned off ingest to stop the brokers from running out of disk
    • Turned off tiered storage, which freed the broker disk space at once
    • Reopened ingest, which ended the customer impact
    • Truncated the fully damaged Retriever partitions and left them read-only
    • Extended the binlog retention of the MySQL read-only replica because Activity Log could not publish to Kafka
    • Patched Retriever so its nodes could idle live and serve old data despite broken offsets
    • Made a one-time offset reset work in Retriever
    • Evacuated to a new Kafka cluster with new topics and partitions
    • Booted an Activity Log database instance from 9 December and replicated from it to limit data loss
    • Cleaned up the older Kafka clusters
    Action items
    • Consolidate internal documentation better as the company grows
    Lessons

    Many elements of this outage were already known: similar outages, workaround plans, RFCs, migrations and procedures for running such exercises safely existed, but the documents were unknown outside their authors or hard to find. Flexible, locally controlled work is easy to defer again and again in favour of urgent work, and Honeycomb wants to notice when deferring becomes a reflex. Many key interventions came from people who no longer owned the components, which shows drift between team boundaries and the coupling inside the system. The pre-production clusters were too small to reproduce the flaw, and tests on a cluster closer to production would have made catching it much more likely. Coordination and public communication were also hard: senior engineers tended to take the lead automatically, and customers said the updates gave too much detail about minor beta features.

  4. Symptoms

    From 11 November 2025 at 16:02 UTC, PostHog's event ingestion pipeline for US Cloud became severely degraded, and events for all customers in the US region were processed with delays from 10 minutes up to 2 days. Writes to the Postgres database that stores Person information could take multiple seconds per update, and the pipeline slowed until no standard scaling option helped.

    Trigger

    The 32-bit OID space used to track TOASTed values of the Persons table's properties column, a JSONb field that often exceeds the 2KB threshold for out-of-line storage, was nearly exhausted.

    Root cause
    Component
    Contributing factor
    Remediation
    • Created a new partitioned Persons table with a fresh TOAST table and OID space
    • Added database triggers to keep the old and new Persons tables in sync for live writes
    • Copied the existing Person data from the old table to the new one with a backfill script
    • Changed ingestion and application code to write to the new table and read from it first, with fallback to the old table
    • Deployed the web app changes to production under manual control rather than a fully automated rollout
    • Scaled ingestion workers to process the accumulated backlog
    • Paused ingestion when the MSK local disk reached about 85%
    • Reduced the local retention of the affected Kafka topic
    • Resumed ingestion after confirming there was enough disk headroom
    • Moved the backfill into Dagster to finish it over the weekend
    Action items
    • Add metrics and alerts for heavy disk read amplification per write
    • Add metrics and alerts for TOAST table statistics
    • Add metrics and alerts for other Postgres engine limits that matter at large scale
    • Write runbooks for engine-level Postgres limits, with decision trees for migrating versus repairing in place
    • Create customer communication runbooks with a clear escalation path and redundancies
    • Evaluate other data stores for the persons database
    • Complete the reconsolidation on the new Persons tables
    • Improve the backfill tooling and the safeguards for Kafka tiered storage
    • Design and operate Person-like tables so they avoid similar limits
    Lessons

    TOAST OID exhaustion degrades writes long before the hard limit of about 4 billion OIDs, it is rare even at large scale, and standard dashboards for CPU, memory, IOPS and lock contention did not immediately point at it, so diagnosis took a day and a half without monitoring of TOAST growth, OID usage or disk reads per write. Many core features depended on timely updates to the persons table, so its slowdown reached a wide part of the product. The first backfill approach lacked visibility for a long migration, the Kafka tiered storage settings and alerts were not tuned for a large backlog, and the people who normally handle customer communications were all unavailable.

  5. Symptoms

    When a Kafka cluster of PagerDuty's US Service Regions began failing at 03:53 UTC on 28 August 2025, the first alerts pointed to one failing broker. More brokers then ran out of memory, and PagerDuty's event APIs began rejecting incoming events with a response status code of 502 while notifications, webhooks, chat integrations and the REST API degraded.

    Trigger

    A new feature that recorded API key usage in a Kafka topic was being rolled out by configuration: 1% on 21 August, 5% and then 25% on 27 August, and 75% on 28 August. A logical error in the feature created a new Kafka producer for every API request instead of reusing one producer.

    Root cause
    Component
    Contributing factor
    Detection

    Alerts pointed to one failing Kafka broker at the start of the first incident, and alerts fired again at 16:38 UTC when Kafka performance degraded for the second time. Critical alerts about core API errors were buried among webhook pages.

    Remediation
    • Expanded the Kafka cluster and removed the first failing broker
    • Doubled the Kafka broker heap size and applied it with a rolling restart across the cluster
    • Added status page updates by hand through backup procedures when automated publishing failed
    • Recovered Kafka-dependent services, some by manual intervention, and backfilled lost data with scripts
    • In the second incident, doubled the heap again with another rolling restart
    • Rolled back the API usage feature with a pull request that stopped it from publishing Kafka messages
    Action items
    • Remove the dependency that blocked status page automation and simplify and republish the manual runbook
    • Run live drills regularly so status updates go out even when parts of the platform are degraded
    • Expand JVM and Kafka monitoring of heap, garbage collection and producer and consumer health
    • Strengthen service dependency mapping so cascading failures are easier to trace
    • Collect customer impact metrics into incident workflows automatically
    • Add stricter change management guardrails, with readiness checklists and slower ramp-up windows for major rollouts
    • Improve recovery mechanisms in the streaming systems
    • Automate communication workflows such as status page updates, internal and external syncs and reminders
    • Test major incident workflows monthly with chaos engineering, such as status page failover
    • Define clearer incident severity levels and roles, including dedicated communications liaisons
    Lessons

    PagerDuty found its message processing more intricate than it had thought: some services had to be restarted to pick up changes, some API activity produced far more messages than expected, and it was hard to tell which parts of the system put heavy load on Kafka. Because producers and JVM heap were barely observed, responders could not see the first failure until several downstream systems were affected, and no one on the call held a model of the whole system. Enabling the feature through configuration rather than a separate deployment was meant as a safety step but made the outage harder to link to the change. Runbooks and backfill scripts were imperfect but gave responders a head start, and the second incident was mitigated in about 50 minutes by repeating the first incident's steps.

Check your cluster for this

These 15 cases involve Message broker and Database. kubegap audits a Kubernetes cluster for gaps like these, read-only, from Claude Code or Codex; its checks cite public reports like the ones in this library.

By root cause8

Cloud provider outage2 cases

  1. IL-0410 SQS Fair Queues rejected valid messages with InvalidParameterValue, failing about half of AssemblyAI's US async requests
  2. IL-0588 AppOptics metrics APIs returned 5xx as Kafka partitions stayed leaderless after an AWS power event hit their ZooKeeper

Breaking change in an upgrade2 cases

Organisation
  1. IL-0572 About 10 million Pub/Sub messages backed up and Merpay accounting data was not written to Cloud Spanner for over a day
  2. IL-0294 CircleCI Docker and machine jobs stalled for nearly 12 hours after a VM cleanup queue lost all its RabbitMQ consumers

Operator error2 cases

  1. IL-0286 An exercise cleanup destroyed Honeycomb's Kafka brokers, leaving partitions leaderless and ingest crash-looping
  2. IL-0280 Kafka brokers in many New Relic cells ran out of disk, leaving US data collection and alerting unusable for hours

Capacity exhaustion4 cases

  1. IL-0390 PostHog US Cloud event ingestion slowed to delays of up to 2 days as writes to the Persons Postgres table stalled
  2. IL-0544 Wasabi's database cache stopped responding when its queueing service filled up, and S3 failed in all regions
    Wasabi2024
  3. IL-0384 Amazon Kinesis front-end servers in US-EAST-1 could not route requests, so Kinesis and services built on it failed
  4. IL-0275 Parse.ly's Kafka brokers hit network limits and failed one after another, stopping the analytics pipeline for hours

Faulty deployment1 case

Organisation
  1. IL-0214 PagerDuty's Kafka brokers ran out of JVM heap one after another, and the event APIs rejected events with 502 responses

Configuration change2 cases

  1. IL-0528 Cloud Pub/Sub could not publish or subscribe in ten regions, and some ordered subscriptions stayed stuck for hours
  2. IL-0285 Clever Cloud's Pulsar brokers stalled in a minor upgrade, then hypervisors overloaded and crashed with kernel panics

unknown1 case

Contributing factor
–
Organisation
  1. IL-0545 Wasabi API calls in all regions returned HTTP 5XX when the message queue stopped spreading requests over database nodes
    Wasabi2024

Software defect1 case

  1. IL-0535 An internal Kinesis Data Streams cell in US-EAST-1 degraded, raising errors in CloudWatch Logs, S3 events and Lambda