본문으로 바로가기

Bounded RED 메트릭과 SLO를 같은 질문에 연결하기

관측성은 데이터를 많이 쌓는 일이 아니라 장애 질문에 답하는 일입니다. Rate·Errors·Duration을 route template로 수집하고 request context로 로그·비동기 작업과 연결합니다.

3회 조회약 2분 읽기
X에 공유 새 창에서 열림
목차

관측성은 데이터를 많이 쌓는 일이 아니라 장애 질문에 답하는 일입니다. Rate·Errors·Duration을 route template로 수집하고 request context로 로그·비동기 작업과 연결합니다.

라벨의 경계

404 요청의 원문 경로를 metric label로 쓰면 봇이 만든 무한한 URL이 시계열을 늘립니다. Python backend는 모든 미매칭 route를 고정 /_not_found로 기록합니다. 사용자 ID·파일명·검색어도 label이 되면 안 됩니다.

수집 경로와 비용

Java 서비스는 Actuator Prometheus endpoint를, Python 서비스는 표준 /metrics를 제공합니다. Compose Prometheus는 선택 profile에서 각 backend를 scrape합니다. Grafana와 Next.js 전용 exporter는 런타임·배포 플랫폼을 통일하는 결정이 없으면 설치하지 않고, Next.js는 로그·Sentry·Web Vitals로 관측합니다.

SLO를 약속하는 시점

SLO는 먼저 사용자 경로와 baseline을 정한 뒤 만들어야 합니다. 숫자가 없을 때 임의의 99.9%를 약속하지 말고, 측정 결과에 따라 error budget·배포 중지·rollback 기준을 합의합니다.

라벨 예산표

값 metric label 구조화 로그 이유
route template 허용 허용 유한한 경로 집합
method/status class 허용 허용 bounded cardinality
request ID 금지 허용 요청마다 달라짐
user ID·검색어·파일명 금지 필요 최소만 개인정보·무한 cardinality
exception class 제한 목록 허용 원문 대신 실패 종류
Rate ─┐
Error ├─▶ 사용자 경로 baseline ─▶ SLO 후보 ─▶ error budget ─▶ 배포 판단
Duration┘

시계열 수는 각 label 값 개수의 곱으로 늘어납니다. route 50×status 5×method 4는 bounded하지만 request ID를 추가하면 요청 수만큼 저장비와 query 지연이 커집니다.

관련 강좌: RED·Correlation·SLO

이 글에서 만나는 용어

infra 카테고리의 다른 글

카테고리 전체 보기 →

관련 글

이 글이 도움이 되었나요?