IL-0470 Buildkite · 2026-05-28kubernetesawsobservability
알림 처리 워커가 모자라 Buildkite 알림 전달이 두 차례 늦어졌다
2026-05-28 에 Buildkite 의 알림 처리 인프라 일부가 용량이 모자라 알림 전달 지연이 늘었다. EKS 의 오토스케일링이 쓰는 Prometheus 의 저장 공간이 다 차서 큐가 쌓이는 동안 EKS 위의 워커 일부가 제대로 늘지 못했기 때문이다. 20:01 UTC 에 지연이 시작됐다. 팀은 내부 큐 지연 모니터링으로 이를 알아채고, 영향받은 워크로드를 EKS 에서 이전 인프라인 ECS 로 되돌리기 시작했다. 되돌아갈 ECS 서비스가 전체 부하를 바로 받을 준비가 되어 있지 않아서 엔지니어가 장애 중에 스케일링 설정과 워커 수를 손으로 조정했다. 대부분 고객의 지연은 21:00 UTC 에 풀렸다.
첫 회복 뒤에도 일부 워크로드는 EKS 에 남아 있었고, Prometheus 가 회복하자 다시 오토스케일링하고 있었다. 팀은 이 워크로드가 더는 트래픽을 받지 않는다고 잘못 판단했다. 인프라 설정을 다시 맞추는 동안, 짝이 되는 ECS 서비스가 다 늘어나기 전에 이 EKS 워크로드가 먼저 줄어들었다. 그래서 22:12 부터 22:40 UTC 까지 일부 고객에게 두 번째 지연이 생겼다. 팀은 롤백을 마저 끝내고 남은 ECS 서비스를 늘려 이 지연을 해소했다. 롤백 경로가 이런 상황을 다 다루지 못해 복구가 예상보다 오래 걸렸다.
- 심각도
- –
- 영향 범위
- Delayed Buildkite notifications (GitHub commit status, email, Slack and webhook) from 20:01 to about 21:00 UTC, and again from 22:12 to 22:40 UTC for a subset of customers; downstream CI, merge and deployment workflows that depend on the notifications were delayed
- 영향 사용자
- A subset of Buildkite customers
- 지역
- –
- 감지까지
- –
- 복구까지
- 2h 39m
증상
2026-05-28 20:01 UTC 부터 알림 처리 워커가 모자라 Buildkite 의 알림 전달 지연이 늘었다. 내부 큐 지연 모니터링이 이를 잡았다.
늦어진 알림은 GitHub 커밋 상태, 이메일, Slack, 웹훅 알림이었다. 이 알림을 다른 CI 나 배포 시스템의 입력으로 쓰는 고객은 그 뒤의 CI, 병합, 배포 흐름까지 늦어졌다. 알림 종류, 재시도 동작, 연동 방식에 따라 영향이 더 길게 남은 고객도 있었다.
대부분 고객의 지연은 21:00 UTC 에 풀렸지만, 22:12 부터 22:40 UTC 까지 일부 고객에게 지연이 다시 나타났다.
팀은 처음에 영향받은 워크로드를 EKS 에서 이전의 ECS 인프라로 되돌렸다. 그러나 되돌아갈 ECS 서비스가 전체 부하를 바로 받을 준비가 되어 있지 않아 회복이 예상보다 늦었다.
공개 상태 페이지에는 20:20 UTC 에 일부 고객의 빌드와 작업 알림이 늦어지고 있어 조사 중이라는 공지가 처음 올라왔다.
원인
- 촉발
- EKS 의 오토스케일링이 쓰는 Prometheus 서비스의 저장 공간이 다 찼다. 그래서 큐가 쌓이는 동안 EKS 위의 알림 처리 워커 일부가 제대로 늘지 못했다.
감지
팀은 내부 큐 지연 모니터링으로 장애를 알아챘다. 공개 상태 페이지에는 20:20 UTC 에 첫 공지가 올라왔다.
조치
- 영향받은 워크로드를 EKS 에서 이전의 ECS 인프라로 옮기기 시작했다.
- ECS 서비스가 전체 부하를 바로 받지 못해 엔지니어가 장애 중에 스케일링 설정과 워커 수를 손으로 조정했다.
- 두 번째 지연은 롤백을 마저 끝내고 남은 ECS 서비스를 늘려 해소했다.
- Prometheus 저장 공간을 늘리고, 같은 변경을 인프라 코드에도 반영했다.
후속 조치
- Prometheus 저장 공간이 바닥나 오토스케일링에 영향을 주기 전에 알림이 오도록 모니터링을 더한다.
- 특정 종류의 오류에서 GitHub 알림 재시도가 되풀이되어 알림 지연을 늘리는 동작을 고친다.
- EKS 에서 ECS 로 되돌리는 롤백 절차를 보강해, 롤백 전과 도중에 옮겨 갈 쪽의 용량, 오토스케일링 설정, 트래픽 이동을 확인하게 한다.
- KEDA 와 Karpenter 를 비롯해 EKS 컨트롤 플레인이 의존하는 다른 구성 요소를 검토하고, CPU, 메모리, 저장 공간 할당이 운영 부하에 맞는지 확인한다.
- 앞으로 EKS 로 옮기는 순서와 속도를 다시 따져, 고객에게 중요한 워크로드는 더 천천히 옮기고 안정될 시간을 분명히 둔다.
- 고객 단위로 알림 전달 지연을 보는 모니터링을 개선해 고객에게 영향을 주는 회귀를 더 일찍 잡는다.
- 어떤 알림 종류가 고객의 스케줄링이나 CI 의 핵심 경로에 있는지 검토한다. 그런 알림에는 더 엄격한 지연 기준, 별도 큐, 일반 알림 작업보다 구체적인 모니터링 경보가 필요한지 따진다.
- 알림 지연이 고객의 작업 흐름에 영향을 줄 것 같으면 상태 페이지를 더 일찍 갱신한다.
- 상태 페이지에 영향받은 내부 서비스만이 아니라 고객이 겪는 영향을 분명하게 적는다.
- 장애를 다 파악하기 전이라도 심각한 CI 영향을 알려 오는 고객의 문의가 내부에서 빨리 올라가도록 에스컬레이션 경로를 개선한다.
교훈
Buildkite 는 롤백 경로가 이번 상황을 다 다루지 못해 복구가 예상보다 오래 걸렸다고 보았다. 알림 지연의 영향은 고객이 알림을 CI 와 배포 흐름에 어떻게 쓰는지에 따라 다르게 나타난다. Buildkite 는 공개 상태 페이지가 고객이 겪는 영향을 제때 분명하게 보여 주지 못했다고 밝혔다.
출처
- https://www.buildkitestatus.com/incidents/8zy2b81jz4r9 · official-status · 보관본
관련 사례
같은 원인 · 공통 Prometheus
IL-0044kube-prometheus-stack 업그레이드 뒤 Prometheus 가 WAL 재생 중 메모리를 50Gi 넘게 써서 시작할 때마다 OOMKilled 로 죽었다Saifeddine Rajhi · 2024같은 원인 · 공통 Prometheus
IL-0046계획된 재시작 뒤 Prometheus 가 WAL 을 다 읽기 전에 startupProbe 에 걸려 재시작을 반복했고 지표가 빠졌다UK Ministry of Justice · 2024같은 원인 · 공통 Prometheus
IL-0016네임스페이스와 규칙이 늘어 live 클러스터의 Prometheus 가 메모리 부족으로 OOMKilled 되며 플랫폼 모니터링이 끊겼다UK Ministry of Justice · 2023같은 원인 · 공통 Prometheus
같은 원인 · 공통 Prometheus
IL-0070dask-gateway로 워커를 대량으로 띄우자 노드가 1분 만에 100대 늘었고, Prometheus가 메모리를 거의 다 쓰던 코어 노드에서 hub 파드를 비롯한 중요한 파드들이 축출되거나 재시작됐다2i2c · 2023같은 원인 · 공통 Prometheus
IL-0176시계열 급증으로 호스트 메모리가 바닥나자 oom_score_adj 999 를 받은 Prometheus 컨테이너가 커널 OOM Killer 에게 먼저 죽어 CrashLoopBackOff 에 빠졌다.LINE · 2020같은 원인 · 공통 Prometheus
내 클러스터에도 있는지 확인하기
AI 도구와 스크립트용
- 이 사례의 JSON: https://incidentlib-api.benchlet.com/cases/IL-0470
- 가장 비슷한 사례들: https://incidentlib-api.benchlet.com/cases/IL-0470/similar
- MCP 서버(Streamable HTTP, 키 없음):
https://incidentlib-mcp.benchlet.com/mcp
API 는 키가 필요 없습니다. MCP 서버는 search_incidents, get_incident, list_incidents, get_topic, vocab 도구를 내놓습니다. 사용법은 API 와 MCP.