본문으로 건너뛰기
김신건의 로그

[Observability] SLI / SLO / SLA / Error Budget

· 수정 · 📖 약 2분 · 864자/단어 #sli #slo #sre #observability #devops #error-budget
SLI, SLO, SLA, Error Budget, SRE, Service Level Indicator, Service Level Objective, Service Level Agreement, burn rate, CUJ, Critical User Journey

정의

의미
SLI (Indicator)측정 값 (예: 5xx 비율)
SLO (Objective)목표 (예: 99.9% 가용성)
SLA (Agreement)계약 (위반 시 환불 / 페널티)
Error Budget허용 가능한 실패 양 (SLO 에서 파생)

SRE 와 SLO 의 관계

SRE (Site Reliability Engineering) = Google 이 2003년 시작한 신뢰성 엔지니어링 방법론. SLO + Error Budget 을 신뢰성과 개발 속도의 균형 메커니즘 으로 활용.

flowchart LR
    Reliability["신뢰성 향상"]
    Feature["기능 개발 속도"]
    Budget["Error Budget"]

    Budget -->|"남아 있으면"| Feature
    Budget -->|"소진되면"| Reliability
    Reliability -.->|"재충전"| Budget

SLO + Error Budget = 개발팀과 운영팀의 공통 언어. “서비스가 얼마나 안정적이어야 하는가?”

관계도

flowchart LR
    SLI["SLI 측정\n#quot;5xx rate = 0.02%#quot;"]
    SLO["SLO 목표\n#quot;5xx < 0.1%#quot;"]
    SLA["SLA 계약\n#quot;가용성 99.9%, 미만 시 10% 환불#quot;"]
    EB["Error Budget\n#quot;30일 중 43.2분 다운 OK#quot;"]
    SLI --> Compare{비교}
    SLO --> Compare
    Compare --> EB
    EB -->|"SLO margin 확보"| SLA

내부 SLO 는 SLA 보다 엄격하게 (margin). SLA 99.9% → 내부 SLO 99.95%.

좋은 SLI 4 카테고리

카테고리예시 SLI측정 방식
Availability성공 응답 비율sum(rate(2xx+3xx)) / sum(rate(all))
Latencyp95, p99 응답 시간histogram_quantile(0.95, ...)
Throughput처리량 (req/s)rate(requests_total[5m])
Correctness올바른 응답 비율비교 / sampling

Google SRE: user-facing 측면 → 서버 CPU 같은 내부 metric 보다 사용자 경험 중심.

서비스 유형별 SLI

서비스 타입주요 SLI
Request / Response (API)Availability, Latency
Data Processing (batch)Freshness, Correctness, Coverage
StorageDurability, Availability, Latency
Pub/Sub (비동기)Freshness (지연), Correctness

CUJ (Critical User Journey)

SLI 는 사용자 관점 의 여정 (CUJ) 기준으로 정의:

CUJ 예시: "사용자가 상품 검색 → 장바구니 → 결제"

SLI 1: 검색 API p95 < 300ms
SLI 2: 결제 성공률 > 99.99%
SLI 3: 장바구니 API availability > 99.9%

CPU 사용률, 메모리 같은 인프라 metric 이 아닌 사용자가 느끼는 것.

SLO 설정 예시

가용성 SLI = 성공_응답 / 총_응답
SLO = 30일 중 99.9% 이상

Error Budget = 30일 × 24h × 60min × (1 - 0.999)
             = 43,200 분 × 0.001
             = 43.2 분 / 월
SLOError Budget (30일)적합한 서비스
99%7.2 시간내부 도구
99.5%3.6 시간중요 내부 서비스
99.9%43.2 분B2C 서비스
99.95%21.6 분결제, 금융
99.99%4.32 분핵심 인프라
99.999%26초통신, 금융 핵심

IMPORTANT

SLO 99.999% (five-nines) = 연간 5분. 매우 비싸고 달성하기 어려움. 비즈니스 임팩트에 맞는 수준 선택.

Error Budget Policy

flowchart TD
    Q{"Budget 소진 상태"}
    Q -->|"0-50% 소진"| Normal["정상 운영\n빠른 기능 개발 가능"]
    Q -->|"50-90% 소진"| Caution["주의: 변경 위험 평가\n릴리즈 신중히"]
    Q -->|"90-100% 소진"| Freeze["신규 기능 동결\n신뢰성 작업만"]
    Q -->|"100% 초과"| Stop["모든 risky 변경 중단\n postmortem 필수"]

Error budget 의 행동 contract. 단순 메트릭이 아닌 조직 정책 이어야 의미 있음.

SLO 계산 (PromQL)

# 30일 가용성 (rolling window)
sum_over_time(
  (sum(rate(http_requests_total{status!~"5.."}[1m]))
    / sum(rate(http_requests_total[1m])))[30d:1m]
)
/ count_over_time((sum(rate(http_requests_total[1m])))[30d:1m])

# Error Budget 남은 비율
1 - (
  (1 - current_availability) / (1 - 0.999)
)

# p95 latency SLI
histogram_quantile(0.95,
  sum by (le) (rate(http_request_duration_seconds_bucket[5m]))
)

Multi-window Burn Rate Alert

단순 threshold alert 보다 burn rate (소진 속도) 가 의미 있음:

flowchart LR
    BurnRate["Burn Rate"]
    BurnRate -->|"1h, 5% 소진 = 14.4x"| Page["즉시 page (PagerDuty)"]
    BurnRate -->|"6h, 10% 소진 = 6x"| Ticket["Ticket (Slack)"]
    BurnRate -->|"3d, 10% 소진 = 1x"| Monitor["모니터링 강화"]
# fast burn (1h 기준 14.4배 초과 소진)
(
  sum(rate(http_5xx[1h])) / sum(rate(http_total[1h]))
) > (14.4 * (1 - 0.999))

# slow burn (6h 기준 6배)
(
  sum(rate(http_5xx[6h])) / sum(rate(http_total[6h]))
) > (6 * (1 - 0.999))
윈도우배율알림 종류의미
1h14.4xpage2h 안에 budget 소진
6h6xticket5일 안에 소진
1d3xweekly review10일 안에 소진

SLA 예시 (실제 SaaS)

SaaSSLA위반 시
AWS S399.99% (월)service credit
AWS EC299.5% (월)service credit
GitHub99.9% (분기)credit
Stripe99.999% (결제 API)credit
Cloudflare100% (보장)credit

Postmortem 과 Error Budget

Error budget 소진 후에는 postmortem 필수:

Postmortem 구조
1. 요약: 무슨 일이 일어났는가 (5줄 이내)
2. 타임라인: 언제, 무엇을, 누가 (시간순)
3. 근본 원인 (5 WHY)
4. 영향 범위: 사용자 수, budget 소진량
5. Action items: 재발 방지 (owner + deadline)

blame-free postmortem: 사람이 아닌 시스템과 프로세스 개선 집중. Google SRE 핵심 문화.

SLO 대시보드 권장 항목

1. 현재 SLO 달성률 (rolling 30d): 99.97% ✓
2. Error budget 잔량: 22분 / 43.2분 (51%)
3. 이번 달 장애 이벤트: 3건
4. Burn rate (1h): 0.5x (정상)
5. Burn rate (6h): 1.2x (주의)
6. 다음 배포 예정: 2026-07-20

SLO 도입 단계별 로드맵

SLO 가 처음이면 단계적 도입 권장:

단계목표기간
1. 측정SLI 데이터 수집 (Prometheus)1-2주
2. 설정과거 데이터 기반 현실적 SLO 초안1주
3. 정책 정의Error budget policy 팀 합의1주
4. 대시보드Grafana SLO 대시보드 구축1주
5. AlertBurn rate alert 설정1주
6. 리뷰월별 SLO review 프로세스반복
# Grafana SLO plugin 예시
apiVersion: v0alpha1
kind: SLO
metadata:
  name: api-availability
spec:
  objectives:
    - value: 0.999
      window: 30d
  indicator:
    ratio:
      errors:
        source: grafana-cloud-metrics
        metric: http_requests_total{status=~"5.."}
      total:
        source: grafana-cloud-metrics
        metric: http_requests_total

흔한 함정

WARNING

  1. SLO 가 서버 metric (CPU 95%) = 사용자 경험과 무관. user-facing SLI 만.
  2. 너무 높은 SLO (99.999%) = 불가능 + 비용 폭증. 비즈니스에 맞는 수준.
  3. SLA = SLO = SLA 는 계약, SLO 는 내부 목표 (더 엄격).
  4. Budget 정책 부재 = SLO 만 측정하고 행동 없음. 무의미.
  5. SLO 를 너무 많이 = 피로감. CUJ 기반 핵심 3-5개.
  6. rolling window vs calendar window = rolling 이 더 정확. calendar 는 월초 buffer 착각.

관련 위키

이 글의 용어 (4개)
[AWS] CloudWatch: 메트릭, 로그, 알람cloud
정의 CloudWatch = AWS 의 모니터링 + 로그 + 알람 통합 서비스. 메트릭 수집, 로그 집계, 대시보드, 알람, 이상 감지를 하나의 서비스에서 제공. 사용 상황 | …
[Concurrency] Circuit Breaker: cascade failure 방어concurrency
정의 Circuit Breaker = 전기 회로의 차단기처럼, 백엔드 다운 / 느림 시 호출 자체를 차단 → 빠른 실패 + 백엔드 회복 시간. 와 함께 cascade failur…
[Observability] OpenTelemetry: 표준화된 trace/metric/logdevops
정의 OpenTelemetry (OTel) = observability 의 vendor-neutral 표준. CNCF. trace + metric + log 의 SDK + pro…
[Observability] Prometheus: pull 기반 메트릭, PromQLdevops
정의 Prometheus = pull 기반 시계열 metric 시스템. PromQL 로 쿼리. CNCF graduated. 2026 클라우드 네이티브 메트릭 표준. 아키텍처 Pu…

💬 댓글

사이트 검색 / 명령어

검색

스크롤 = 확대/축소 · 드래그 = 이동 · 0 = 원래 크기 · ESC = 닫기