본문으로 건너뛰기

7.2 SLI/SLO/Error Budget

SLI는 사용자가 받은 서비스 수준의 측정값이고, SLO는 일정 기간 동안 지키려는 목표입니다. Error budget은 목표에서 허용한 실패량입니다.

SLI = good events / valid events
error ratio = bad events / valid events
error budget = 1 - SLO

유효 이벤트에서 Error budget 운영 정책까지의 흐름

Database SLI를 사용자 관점으로 정의한다

pg_up은 exporter 수집 성공 지표이지 좋은 availability SLI는 아닙니다. Database를 사용하는 실제 경로에서 측정합니다.

예시는 다음과 같습니다.

  • 주문 transaction 중 commit에 성공한 비율
  • read request 중 freshness 기준을 만족한 비율
  • query 요청 중 250ms 안에 끝난 비율
  • failover 동안 허용 RTO 안에 복구한 비율

Application metric이나 synthetic transaction이 source 후보입니다.

sum(rate(db_requests_total{result="success"}[5m]))
/
sum(rate(db_requests_total{result=~"success|error"}[5m]))

Client 취소, 잘못된 요청, 의도된 business rejection의 포함 여부는 서비스 계약에서 정의한 valid event와 bad event의 범위에 따릅니다.

99.9%의 의미

30일 동안 99.9% availability 목표라면 error budget은 약 43분 12초입니다.

30일 × 24시간 × 60분 × 0.001 = 43.2분

100% 목표에서는 모든 작은 실패가 정책 위반이 되므로 변화 속도와 비용의 trade-off가 커집니다. SLO 목표에는 사용자 기대와 사업 영향을 반영합니다.

Burn rate

Burn rate는 현재 속도로 error budget을 얼마나 빠르게 소비하는지 나타냅니다.

burn rate = 관측된 error ratio / 허용 error ratio

예를 들어 99.9% SLO의 허용 error ratio는 0.001이고, 현재 실패율이 1%이면 burn rate는 10입니다.

service:error_ratio:rate5m / (1 - 0.999)

Multi-window alert

짧은 window만 사용하면 순간 spike에 흔들리고, 긴 window만 사용하면 심각한 장애를 늦게 알립니다. 빠른 window와 확인 window를 함께 사용합니다.

- alert: DatabaseSLOFastBurn
expr: |
service:error_ratio:rate5m > 14.4 * (1 - 0.999)
and
service:error_ratio:rate1h > 14.4 * (1 - 0.999)
for: 2m
labels:
severity: page

14.4와 window는 초기값이며 조직의 paging 정책과 traffic이 검증 기준입니다. Low-traffic 서비스에는 최소 요청 수나 synthetic signal 조건도 포함합니다.

Component SLO의 위치

PostgreSQL, connection pool, queue 각각에 내부 objective를 둡니다. Component objective는 원인 계층의 상태를 설명하고, 최종 사용자 SLO는 전체 요청 결과를 설명합니다. PostgreSQL이 정상이어도 application 오류로 사용자는 실패하고, PostgreSQL replica 하나가 늦어도 routing이 우회하면 사용자는 정상입니다.

Error budget 정책

Budget 소진에 따라 행동을 정합니다.

  • 정상: 기능 배포와 reliability 개선을 병행
  • 빠른 소진: risky change 제한, incident 원인 완화
  • budget 소진: 신규 변경보다 신뢰성 회복 우선
  • 장기 여유: SLO가 너무 느슨한지 재검토

이 정책은 SLO와 error budget 상태를 변경 우선순위와 신뢰성 회복 작업에 연결합니다.

참고: Google SRE Service Level Objectives, Google SRE Embracing Risk