- Authors
- Name

문제 정의
SLO/Error Budget과 OpenTelemetry 도입이 실패하는 이유는 데이터 수집만 하고, 운영 의사결정(출시 중단·우선순위 변경)으로 연결하지 못하기 때문이다.
아키텍처/원리
- SLO는 대시보드 숫자가 아니라 출시 정책이다.
- OTel은 trace/metric/log를 동일한 속성(서비스, 버전, 리전)으로 연결해야 가치가 생긴다.
- burn-rate 경보는 다중 윈도우로 설계한다.
구현 예시 1
slo:
availability: 99.9
window_days: 30
alerts:
- burn_rate: 14
window: 5m
- burn_rate: 2
window: 1h
구현 예시 2
def error_budget_remaining(target=0.999, actual=0.997):
return max(0.0, (1-target) - (1-actual))
구현 예시 3
SELECT service, sum(errors)::float/sum(total) AS err
FROM slo_hourly
WHERE ts >= now()-interval '30 days'
GROUP BY service;
구현 예시 4
receivers:
otlp:
protocols:
grpc:
exporters:
prometheus: {}
service:
pipelines:
traces: { receivers: [otlp], exporters: [prometheus] }
운영 팁
- 출시 승인 조건에 “에러버짓 잔량”을 명시한다.
- 로그 샘플링과 trace 샘플링을 트래픽 클래스별로 분리한다.
- Incident 회고에 SLI 왜곡 여부를 포함한다.
트러블슈팅
- 경보 폭주: 정적 임계치 대신 burn-rate 기반으로 재설계.
- trace 단절: context propagation 미적용 구간 식별.
- 지표 해석 불일치: SLI 정의를 제품/플랫폼 공동 문서로 고정.
체크리스트
- SLO-릴리스 정책 연결
- OTel 속성 표준화
- 다중 윈도우 경보
- 에러버짓 리뷰 주기
- 회고 템플릿 정착
결론
관측성의 목표는 더 많은 그래프가 아니라, 장애를 더 빨리 멈추고 제품 결정을 더 정확히 내리는 것이다.