Incident Library
Applied filters Root causeCapacity exhaustionSymptomProbe failuresFactorHealth check tied to a dependencyClear 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

Cases2 cases

1 to 2 of 2

  1. Symptoms

    Shortly after 29CM's Igu Week sale began on 3 November 2025, the servers for the display domain, which serve search results and product listings, showed anomalies. Some pods went down and stopped taking traffic, and the remaining pods received more traffic than they could handle and saturated their Netty event loops.

    Trigger

    Igu Week, 29CM's largest Black Friday sale and its busiest traffic of the year, raised Redis network traffic to about four times normal.

    Root cause
    Component
    Contributing factor
    Detection

    Anomalies on the display servers, pods going down and Netty event loops saturating, were the first sign. The Redis cause was found from Redis health check failure logs and then the Redis network metrics.

    Remediation
    • Scaled the Redis nodes up from cache.r7g.large to cache.r7g.2xlarge, about twice the baseline network bandwidth
    Action items
    • Extended the monitoring dashboard to show in real time whether network in and out bandwidth exceeds the baseline, with metrics such as aws.elasticache.network_bandwidth_out_allowance_exceeded and aws.elasticache.traffic_management_active
    • Added Datadog alerts that fire when network bandwidth crosses a threshold
    • Added a Caffeine local cache in front of Redis for data that changes rarely
    • Look into compressing cached data with Snappy to reduce Redis network bandwidth
    • Look into storing cached data as Protocol Buffers instead of JSON; measured on the cached Item Document data, Snappy and protobuf together are expected to cut the size by about 73%
    • Keep improving the architecture for traffic growth, building on the cache restructuring, stronger monitoring and read separation already applied
    Lessons

    CPU and memory metrics alone did not show the problem, so Redis needs network monitoring against the node's bandwidth baseline. Burst credits kept the nodes working for about two hours after traffic passed the baseline, which delayed the failure and made its cause slower to find.

  2. Symptoms

    On 22 August 2016 at 17:21 UTC buildkite.com went offline: nobody could log in, view build logs or read the documentation, although builds kept running and GitHub and Bitbucket pull request statuses kept updating. The Buildkite team in Melbourne was asleep and woke at 21:00 UTC, almost 4 hours later, to emails, tweets and Slack messages saying Buildkite was down.

    Trigger

    Over a weekend maintenance window, Buildkite downgraded its m4.10xlarge Multi-AZ RDS PostgreSQL database to an r3.2xlarge Multi-AZ instance to cut its AWS bill, and moved to a centralised pgbouncer to pool connections. The first US weekday peak after the change pushed the new instance's CPU to its maximum at about 16:00 UTC.

    Root cause
    Component
    Contributing factor
    Detection

    New Relic, Pingdom, Datadog, Calibre and CloudWatch raised PagerDuty alerts, but the on-call phone call never came and only silent push notifications arrived. The team noticed at 21:00 UTC when they woke to emails, tweets and Slack messages from users.

    Remediation
    • Moved servers from the Agent API to the dashboard ELB to bring buildkite.com back online
    • Switched the Auto Scaling Groups to EC2 health checks and locked in desired counts
    • Upgraded the database to an instance type that could handle the load, using the aws-cli
    • Built a new AMI that did not depend on buildkite.com/_secret/version and rolled out servers that could self-deploy
    • Removed the centralised pgbouncer and went back to pgbouncer on each host
    Action items
    • Plan load testing after significant infrastructure changes without affecting other users of the system
    • Make the ELB health check return OK when the app answers, without checking database connectivity
    • Consider a separate health check endpoint for Pingdom that checks the database and other dependencies
    • Store the latest deployed revision as a file on S3 for newly launched servers to self-deploy from
    • Test by hand that PagerDuty calls reach every on-call team member
    • Investigate regular company-wide tests of everyone's paging setup
    • Ask PagerDuty about calling members when they go on call or requiring an immediate phone rule
    Lessons

    Buildkite listed six lessons. Watch AWS credits, because billing reports show $0 while credits are spent, so the real cost is hidden and big changes end up rushed. Load test after significant infrastructure changes. Think about what a health check should do and what happens when every server behind an ELB fails it. Do not make new servers look up the deployed revision from the service they are replacing. Make sure every on-call member has the right PagerDuty and phone settings before going on call. When servers churn in AWS, stop health checks and autoscaling, for example with the Auto Scaling feature to suspend and resume processes, so the EC2 request limit is not used up.

Check your cluster for this

These 2 cases involve Liveness and readiness probes and In-memory cache. 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 cause1