{"id":"IL-0016","org":"UK Ministry of Justice","date":"2023-07-25","docs":["https://github.com/ministryofjustice/cloud-platform/issues/4538"],"title":{"en":"Prometheus on the live cluster ran out of memory and was OOMKilled, and the monitoring node it ran on went NotReady","ko":"네임스페이스와 규칙이 늘어 live 클러스터의 Prometheus 가 메모리 부족으로 OOMKilled 되며 플랫폼 모니터링이 끊겼다"},"domain":["kubernetes","aws","observability"],"impact":{"scope":"platform monitoring unavailable","users":"unknown","region":"unknown"},"review":{"written_by":"session","reviewed_at":null,"reviewed_by":null},"lessons":null,"related":["IL-0001"],"sources":[{"url":"https://runbooks.cloud-platform.service.justice.gov.uk/incidents/2023-07-25-prometheus-on-live-cluster-down.html","kind":"runbook","license":"unknown","archived":"http://web.archive.org/web/20260512030921/https://runbooks.cloud-platform.service.justice.gov.uk/incidents/2023-07-25-prometheus-on-live-cluster-down.html"}],"summary":{"en":"Prometheus on the Cloud Platform live cluster needed more memory as the number of namespaces and Prometheus rules grew, and the instance size of its node was no longer enough to keep it running. Prometheus failed with exit code 137, its pod went into Terminating state and its node went NotReady, and node memory was later seen spiking to 89%. Draining the node only moved the problem to the next monitoring node.\n\nThe team declared the incident at 15:21, changed the instance size to r6i.4xlarge at 15:31, which doubled CPU and memory, raised the Prometheus memory limit to 100Gi at 15:50 after finding the OOMKilled pod, and at 16:18 set the container limits to 12 CPU cores and 110Gi of memory. The report gives the time to repair as 1h 50m.","ko":"영국 법무부 Cloud Platform 의 live 클러스터에서 Prometheus 가 내려가 플랫폼 모니터링이 한동안 끊겼다. 네임스페이스와 Prometheus 규칙이 늘면서 Prometheus 서버가 쓰는 메모리가 노드 인스턴스 크기를 넘었다. 파드는 Exit code 137 로 종료됐고, 노드는 Not Ready 가 됐다.\n\n팀은 노드를 드레인해 Prometheus 를 다른 모니터링 노드로 옮겼지만 재시작이 이어졌다. 노드 메모리가 89% 까지 오른 것을 보고 노드를 CPU 와 메모리가 두 배인 r6i.4xlarge 로 바꿨다. 그래도 파드가 OOMKilled 로 종료되자 메모리 limit 을 100Gi 로 올렸고, 16:18 컨테이너 limit 을 CPU 12코어, 메모리 110Gi 로 맞춰 복구했다. 보고서에 따르면 복구까지 1시간 50분이 걸렸다."},"trigger":{"en":"The growing number of namespaces and Prometheus rules raised Prometheus' memory needs beyond what its node instance size could hold.","ko":"네임스페이스와 Prometheus 규칙 수가 늘어 Prometheus 서버가 쓰는 메모리가 늘었고, 기존 인스턴스 크기로는 Prometheus 를 계속 띄울 수 없었다."},"severity":"unknown","symptoms":["monitoring-down","oom-killed","node-not-ready"],"timeline":{"detected_after":null,"resolved_after":"1h 50m"},"date_kind":"incident","detection":{"en":"A Pingdom health check on Prometheus failed and raised a high-priority PagerDuty alert.","ko":"14:05 Pingdom 이 Prometheus - live 헬스 체크가 DOWN 인 것을 감지해 PagerDuty 로 고우선순위 경보를 보냈다. 장애 선언은 15:21 에 했다."},"components":["prometheus","node-pool","memory-limit"],"root_cause":"capacity","remediation":[{"text":{"en":"drained the monitoring node, moving Prometheus to another monitoring node","ko":"14:22 모니터링 노드를 드레인해 Prometheus 를 다른 모니터링 노드로 옮겼다."}},{"text":{"en":"changed the node instance size to r6i.4xlarge","ko":"15:31 노드 인스턴스 크기를 CPU 와 메모리가 두 배인 r6i.4xlarge 로 바꿨다."}},{"text":{"en":"raised the Prometheus memory limit to 100Gi","ko":"15:50 Prometheus 컨테이너의 메모리 limit 을 100Gi 로 올렸다."}},{"text":{"en":"set the Prometheus container limits to 12 CPU cores and 110Gi of memory","ko":"16:18 Prometheus 컨테이너 limit 을 CPU 12코어, 메모리 110Gi 로 바꿨다."}}],"action_items":[{"text":{"en":"Add an alert on node memory usage and on a pod using up most of a node's memory (issue #4538)","ko":"노드 메모리 사용량을 감시하고, 파드 하나가 노드 메모리 대부분을 쓰는 상황을 잡아내는 경보를 추가한다. 이 일은 이슈 #4538 에서 다룬다."}}],"contributing":["no-alert-on-limit"],"recurrence_of":null,"symptoms_text":{"en":"At 14:05 on 25 July 2023, a high-priority PagerDuty alert from Pingdom reported that the \"Prometheus - live healthcheck\" was DOWN. Prometheus on the live cluster was unavailable, and the Cloud Platform lost its monitoring for a while.\n\nWhen the team checked the server, Prometheus showed errors in rule evaluation and exit code 137. At 14:09 the Prometheus pod was in Terminating state, and at 14:17 the node it ran on went NotReady.\n\nMoving Prometheus did not fix it. The team drained the monitoring node at 14:22, which moved Prometheus to another monitoring node, but at 14:56 Prometheus restarted just after coming back, and the node went back to Ready. At 15:20 the team saw node memory spiking to 89%. Even after a move to a larger instance type, Prometheus restarted again at 15:50, and the latest pod turned out to have been terminated with OOMKilled.","ko":"2023-07-25 14:05 PagerDuty 로 Pingdom 의 고우선순위 경보가 왔다. Prometheus - live 헬스 체크가 DOWN 이었다. 팀이 Prometheus 서버를 확인하니 규칙 평가 오류가 나 있었고 서버는 Exit code 137 로 종료돼 있었다.\n\n14:09 에 Prometheus 파드가 terminating 상태가 됐다. 14:17 에 Prometheus 가 돌던 노드가 Not Ready 가 됐다. 14:22 에 모니터링 노드를 드레인해 Prometheus 를 다른 모니터링 노드로 옮겼지만, 14:56 에 새 노드로 옮긴 Prometheus 는 올라오자마자 또 재시작됐다.\n\n15:20 에 팀은 노드 메모리가 89% 까지 치솟는 것을 확인하고 더 큰 인스턴스로 바꾸기로 했다. 15:31 에 인스턴스를 r6i.4xlarge 로 바꿨지만 15:50 에도 Prometheus 는 뜬 뒤 또 재시작됐다. 팀은 가장 최근 파드가 OOMKilled 로 종료된 것을 찾아냈다."},"updated_at":"2026-11-10T00:00:35.750811Z","url":"https://benchlet.com/incidentlib/app/cases/IL-0016","org_slug":"uk-ministry-of-justice"}