IL-0520 cloud.gov · 2016-07-05databaseobservability
logs.cloud.gov 로그인이 리디렉션 루프에 빠지고 로그 검색 서비스가 하루 넘게 멈춤
미국 동부 시각 2016년 7월 5일 오후 7시 12분, cloud.gov 의 로그 검색 서비스 logs.cloud.gov 에 로그인 리디렉션 루프가 생겨 사용자가 로그인하지 못했다. 세션 관리 시스템이 사용자 세션을 Redis 에 저장하지 못한 것이 직접 원인이었다. Redis 는 Elasticsearch 클러스터로 데이터를 넘기지 못해 용량이 가득 찬 상태였고, Redis 의 용량은 가용 메모리의 86% 대신 1GB 로 하드코딩돼 있었다. Elasticsearch 클러스터는 메모리 한도가 모자랐고, 하드닝 스크립트를 적용하면서 들어간 설정 오류도 있었다.
팀은 Elasticsearch 설정의 메모리 문제와 하드닝 문제를 고쳐 클러스터를 다시 배포했다. 처음에는 하드닝이 /tmp 를 noexec 로 바꿔 둔 탓에 JVM 이 jar 를 JIT 컴파일하지 못했고, 클러스터가 다시 시작하지 못했다. 그 뒤에는 디스크 암호화 단계 때문에 재배포가 오래 걸렸다. 클러스터가 천천히 재배포되는 동안 팀은 cg-deploy-logsearch 를 고쳐 Redis 를 훨씬 큰 메모리 인스턴스로 옮기고 로그를 계속 받아 두게 했다. 7월 6일 오후 8시에 클러스터 배포가 끝났고, 팀이 Kibana 인스턴스를 다시 배포하고 로그를 확인한 뒤 서비스가 복구됐다.
- 심각도
- –
- 영향 범위
- Users could not log in to the logs.cloud.gov log search service from 7:12pm Eastern Time on 5 July 2016 until it was restored after 8:00pm Eastern Time on 6 July
- 영향 사용자
- –
- 지역
- –
- 감지까지
- –
- 복구까지
- –
증상
미국 동부 시각 2016년 7월 5일 오후 7시 12분, cloud.gov 의 로그 검색 서비스 logs.cloud.gov 에서 로그인 리디렉션 루프가 발견됐다. 사용자는 서비스에 로그인할 수 없었다.
로그인 세션을 관리하는 시스템이 사용자 세션을 Redis 데이터베이스에 저장하지 못했다. 세션이 저장되지 않아 로그인한 사용자가 계속 로그인 과정으로 되돌아가는 리디렉션 루프가 생겼다.
조사해 보니 Redis 는 용량이 가득 차 있었다. Redis 는 Elasticsearch 클러스터로 데이터를 넘기지 못해 데이터가 쌓여 있었고, Elasticsearch 클러스터도 메모리 한도가 모자라 실패하고 있었다. Redis 의 용량은 가용 메모리의 86% 가 아니라 1GB 로 하드코딩돼 있었다.
엔지니어들이 Elasticsearch 클러스터 설정을 고쳐 다시 배포했지만 클러스터는 다시 시작하지 못했다. 하드닝 과정에서 /tmp 디렉터리가 noexec 로 설정돼 JVM 이 jar 를 JIT 컴파일하지 못했기 때문이다. 이 문제를 해결해 인스턴스를 다시 시작한 뒤에도 디스크 암호화 때문에 복구 시간이 더 길어졌다.
원인
원인 용량 한계
- 촉발
- –
감지
–
조치
- logsearch 서비스의 Redis 를 훨씬 큰 메모리 인스턴스로 바꿔, Elasticsearch 클러스터가 내려가 있는 동안에도 로그를 계속 받아 두게 했다.
- Elasticsearch 설정에서 메모리 설정과 하드닝 스크립트 문제를 고치고 클러스터를 다시 배포했다.
- 클러스터 배포가 끝난 뒤 Kibana 인스턴스를 다시 배포하고 로그를 확인해 서비스를 되살렸다.
후속 조치
- 로그가 계속 들어오고 있는지 확인하고, 끊기면 울리는 장애 알림을 만든다.
- Redis 에 오토스케일링이나 고가용성을 갖춰, Redis 다음 단계에 있는 더 취약한 구성 요소가 실패해도 데이터를 잃지 않게 한다.
- 보안 사고가 아닌 사건도 다루도록 사고 대응 계획을 넓힌다.
- logs.cloud.gov 서비스에 카오스 봇을 만든다.
교훈
–
출처
관련 사례
같은 원인 · 공통 인메모리 캐시
같은 원인 · 공통 Elasticsearch 와 OpenSearch
IL-0290GitLab.com 의 Redis Sidekiq 클러스터에서 노드 여러 대가 메모리를 다 써 멈추고 쿼럼을 잃어, 웹과 Git 과 CI 전반에서 500 오류가 늘었다GitLab · 2026 · sev1같은 원인 · 공통 인메모리 캐시
같은 원인 · 공통 인메모리 캐시
같은 원인 · 공통 인메모리 캐시
IL-0067Redis 마스터의 50Mi 영구 볼륨이 가득 차 AOF 가 깨졌고, Redis 파드가 크래시 루프에 빠져 Klamm 운영 서비스가 멈췄다BC Government · 2025 · sev1같은 원인 · 공통 인메모리 캐시
같은 원인 · 공통 인메모리 캐시
IL-0042OpenSearch 디스크가 가득 찬 동안 fluent-bit 가 로그를 처리하지 못해 Elasticsearch 와 OpenSearch 에 애플리케이션 로그가 들어오지 않았다.UK Ministry of Justice · 2024같은 원인 · 공통 Elasticsearch 와 OpenSearch
IL-0202갑자기 몰린 쿼리와 데이터베이스 쓰기로 Honeycomb 수집 호스트가 메모리 부족으로 죽었고, 쿠버네티스 CrashLoopBackOff 가 용량 회복을 막아 US1 이벤트 수집이 한 시간 넘게 불안정했다Honeycomb · 2023 · sev1같은 원인 · 공통 인메모리 캐시
IL-0386Google Cloud 로 옮긴 뒤 GKE 노드에서 Postgres 연결 타임아웃과 memcached i/o timeout 이 간헐적으로 튀었다incident.io · 2023같은 원인 · 공통 인메모리 캐시
같은 원인 · 공통 인메모리 캐시
같은 원인 · 공통 인메모리 캐시
같은 원인 · 공통 인메모리 캐시
같은 원인 · 공통 인메모리 캐시
내 클러스터에도 있는지 확인하기
AI 도구와 스크립트용
- 이 사례의 JSON: https://incidentlib-api.benchlet.com/cases/IL-0520
- 가장 비슷한 사례들: https://incidentlib-api.benchlet.com/cases/IL-0520/similar
- MCP 서버(Streamable HTTP, 키 없음):
https://incidentlib-mcp.benchlet.com/mcp
API 는 키가 필요 없습니다. MCP 서버는 search_incidents, get_incident, list_incidents, get_topic, vocab 도구를 내놓습니다. 사용법은 API 와 MCP.