Incident Library

IL-0492 Hosted Graphite · 2018-03-01 (게시일)networkingaws

AWS 연결 문제로 느려진 연결이 연결 한도를 다 차지해 AWS 밖에 있는 Hosted Graphite 로드 밸런서에 새 연결이 붙지 못했다

Hosted Graphite는 웹사이트와 HTTP 프런트엔드를 AWS 밖에서 자체 로드 밸런서로 운영하고, 로드 밸런서의 상태 확인에만 AWS Route53 상태 검사를 써서 상태가 나쁜 로드 밸런서를 hostedgraphite.com의 DNS 응답에서 뺀다. 금요일 밤 23:28 UTC에 웹사이트와 그래프 렌더링 API의 주기 검사가 타임아웃되기 시작했고, 모든 수집 프로토콜에서 트래픽이 줄었다. 수집은 us-east1과 us-west2 같은 AWS 리전에서 영향을 받았지만 HTTP API 수집은 어디서든 영향을 받았고, S3에 의존하는 내부 서비스도 타임아웃됐다.

팀은 AWS 연결 문제를 단서로 따라갔지만 AWS에 있지 않은 웹사이트가 왜 응답하지 않는지 설명하지 못했다. Route53 상태 검사를 잠시 꺼도 소용없었고, 로드 밸런서 로그에서 AWS 밖의 IP 주소들이 SSL 핸드셰이크를 끝내지 못하는 것을 찾았다. 01:46 UTC에 AWS 장애가 해결되자 트래픽이 천천히 돌아왔다.

나중에 로드 밸런서 로그로 그래프 두 개를 만들어 원인을 밝혔다. 로드 밸런서의 활성 연결 수는 장애 기간에 급히 늘어 한도에 닿은 채 평평하게 이어졌고, 한도에 이르면 새 연결은 대기열에 쌓여 처리되기 전에 타임아웃될 수 있었다. 받은 요청 수는 오히려 줄었다. ISP별로 전체 HTTP 요청을 보내는 데 걸린 평균 시간을 그린 히트맵을 보니, 장애 중 AWS 호스트가 요청 하나를 보내는 데 최대 5초가 걸렸다. 이 호스트는 주로 EC2 인스턴스였다. 영향을 받은 리전의 AWS 호스트가 느린 연결로 가용 연결을 모두 차지해 로드 밸런서의 연결 한도에 이르렀고, 다른 위치의 호스트는 새 연결을 맺지 못했다.

심각도
–
영향 범위
Hosted Graphite website, graph rendering API and HTTP ingestion API intermittently unavailable from all locations; ingestion from AWS us-east1 and us-west2 reduced; some internal services timed out
영향 사용자
–
지역
global
감지까지
–
복구까지
–

증상

금요일 밤 23:28 UTC에 모니터링이 웹사이트가 간헐적으로 응답하지 않는다고 알렸다. 웹사이트와 그래프 렌더링 API를 주기적으로 확인하는 검사가 타임아웃됐다.

모든 수집 프로토콜에서 트래픽이 전체적으로 줄었다. 내부와 외부 카나리를 보니 수집은 특정 AWS 리전, 특히 us-east1과 us-west2에서 영향을 받았지만, HTTP API를 통한 수집은 위치와 상관없이 영향을 받았다.

사용자에게 보이지 않는 내부 서비스 일부도 타임아웃을 보고하기 시작했다. 이 서비스들은 S3에 의존했고, Heroku처럼 AWS에 의존하는 연동도 크게 영향을 받았다. AWS 상태 페이지도 나중에 us-east1과 us-west2의 연결 문제를 알렸다.

로드 밸런서 로그에는 평소 보던 AWS 대역 밖의 IP 주소에서 SSL 핸드셰이크를 끝내지 못한 실패가 찍혔다. 여러 위치에서 시험해 보니 어디서든 SSL 핸드셰이크가 받아들일 수 없을 만큼 오래 걸렸다.

처음에는 AWS 연결 문제가 가장 유력한 단서였지만, 웹사이트는 AWS에 있지도 않고 영향을 받은 리전 가까이에 있지도 않아 설명이 되지 않았다. HTTP 프런트엔드에서 AWS에 있는 유일한 부분인 Route53 상태 검사가 여러 위치에서 실패하고 있어, 원인인지 증상인지 가리려고 잠시 껐지만 문제는 풀리지 않았다. 평소에는 SRE 챗봇으로 Slack에서 끄면 되는 일이었지만, AWS 장애가 챗봇이 쓰는 Slack의 IRC 게이트웨이에도 영향을 줘 손으로 바꿔야 했다.

증상 간헐적 타임아웃간헐적 연결 실패

원인

촉발
AWS의 us-east1과 us-west2 리전에서 연결 문제가 생겨, 그 리전의 AWS 호스트가 Hosted Graphite 로드 밸런서에 맺은 연결이 끊기지는 않은 채 크게 느려졌다.

감지

23:28 UTC에 웹사이트와 그래프 렌더링 API를 주기적으로 확인하는 모니터링 검사가 타임아웃되며 알렸다. 내부와 외부 카나리로 영향받은 수집 경로를 가렸다.

조치

–

후속 조치

교훈

분산 시스템에서는 한 서비스의 장애가 다른 서비스에 어떻게 영향을 줄지 알기 어렵다. 이번에는 직접으로도 간접으로도 쓰지 않는 사업자의 장애가 AWS 밖에 있는 서비스를 멈췄다. 연결을 끊지는 않고 느리게 만드는 네트워크 문제만으로도 느린 클라이언트가 로드 밸런서의 연결 한도를 다 차지해 다른 모든 클라이언트를 막을 수 있다. 로드 밸런서 로그를 충분히 남겨 두었기 때문에 활성 연결 수와 ISP별 요청 시간을 시각화해 원인을 밝힐 수 있었다.

출처

관련 사례

내 클러스터에도 있는지 확인하기

kubegap 은 Claude Code 나 Codex 에서 쿠버네티스 클러스터를 읽기만 하며 이 사례와 같은 상태를 점검합니다. 이 사례의 구성 요소: 온프레미스 로드 밸런서. 점검 항목의 근거는 이 사례 같은 공개 보고서입니다.

AI 도구와 스크립트용

API 는 키가 필요 없습니다. MCP 서버는 search_incidents, get_incident, list_incidents, get_topic, vocab 도구를 내놓습니다. 사용법은 API 와 MCP.