Cases3 cases
1 to 3 of 3
IL-0369Railway's backend API went down when a column migration waited on locks and replicas could not get database connectionsRailway2025- Symptoms
At 15:18 UTC on 9 December 2025, Railway's backend replicas became unhealthy and stopped serving traffic. Dashboard access, CLI operations, logins, the API and the processing of GitHub-based deployments were disrupted, while running deployments stayed online.
- Trigger
Engineers merged a database schema change with a data migration at 15:03 UTC, and the migration began applying at 15:17 UTC. It added a nullable column to a heavily used table of about 1 billion rows.
- Root cause
- Component
- Contributing factor
- Action items
- Increase database connections and reconfigure PgBouncer to work within those limits
- Fix the long-running query so it no longer causes row lock issues
IL-058129CM product display servers lost pods and saturated Netty event loops on the first day of the Igu Week saleMUSINSA2025- 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.
IL-0333A downsized RDS PostgreSQL database maxed out its CPU at US peak and failing ELB health checks took buildkite.com downBuildkite2016- 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.
These 3 cases involve Liveness and readiness probes 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 cause2
Faulty deployment1 case
- Contributing factor
- Organisation
Capacity exhaustion2 cases
- Component
- Contributing factor
- Organisation