SLA·Error Budget 적용 방식

1,205 단어·3 분·원문(.md)

SLI, SLO, SLA #

세 가지 지표는 측정 범위와 목적에 따라 엄격하게 구분되는데

SLI Service Level Indicator 서비스 수준 지표

  • 서비스의 현재 상태를 측정하는 정량적인 데이터 값이다
  • 산출 공식은 성공한 요청수 / 유효한 전체 요청 수 * 100
  • 측정 항목은 가용성, 지연 시간, 처리량, 에러율 등이 있다.

SLO Service Level Objective 서비스 수준 목표

  • 내부 엔지니어링 팀이 달성하고자 하는 SLI 목표치고
  • 설정 기준은 시스템 아키텍처의 한계와 비즈니스 요구사항을 고려해 설정하여 보통 SLA보다 넓게 설정한다
  • 예시로 최근 30일 동안 결제 api 99퍼센타일 지연시간은 200ms 미만 목표 달성률 99.9%

SLA Service Level Agreement 서비스 수준 계약

  • 서비스 제공자와 고객간의 공식적인 계약이다
  • SLO를 달성하지 못했을 때 발생하는 재무적 패널티, 환불 크레딧 지급등이 명시되어있다.
  • 월간 가용성이 99.9 미만으로 떨어질 경우 해당 월 청구 금액의 10%를 크레딧으로 보상

Error Budget 에러 예산 산정 및 통제 정책 #

에러 버젯은 시스템이 허용할 수 있는 최대 장애 발상 한도, 시간 또는 요청수를 의미한다.

완벽한 100% 가용성은 기술적으로 불가능하며 비용적으로 비효율적이므로 허용된 예산내에서 장애 리스크를 감수하고 신규 배포 속도를 높이는데 사용한다.

Error Budget 산정 방식 (시간 기준)

  • 공식: 100% - SLO
  • 계산 예시 30일 기준
    • SLO 99.0%: 30일 x 24시간 x 60분 x 0.01 = 허용 다운타임 432분 약 7.2시간
    • SLO 99.9%: 30일 * 24시간 * 60분 * 0.001 = 허용 다운타임 43.2분
    • SLO 99.99%: 30일 * 24시간 * 60분 * 0.0001 = 허용 다운타임 4.32분

Error Budget 잔여량에 따른 배포 통제 정책도 있는데

Error Budget은 개발팀(기능 배포)와 운영팀(안정성)간의 행동 지침을 강제하는 시스템적 기준이 된다.

  • 에러 버짓이 50%이상 충분하면 신규 기능 개발 및 정규 배포 정상 진행, 인프라 구조 변경 및 마이그레이션을 허용한다.
  • 에러 버짓이 20% 이하 잔여 주의 상태라면 배포전 qa 절차 강화, 카나리 배포 비율 축소등 보수적인 접근을 실시한다.
  • 예산 소진 0%이하가 되었다면 Feature Freeze 신규 기능 배포 전면 중단이다. 버그 수정, 모니터링 강화, 아키텍처 개선 등 신뢰성 확보 작업에만 모든 리소스를 투입한다.

Burn Rate (에러 소진율) 기반 알람 적용 #

단순히 에러율 5% 초과 알람 같은 정적 임계치는 트래픽 변동에 취약하다

실무에서는 error budget이 얼마나 빠르게 소진되고 있는지 burn rate를 측정해 알람을 발생시킨다.

  • Burn Rate 1: 정확히 30일 후에 에러 예산이 모두 소진되는 속도
  • Burn Rate 10: 예산이 3일 (72시간) 만에 고갈되는 속도. (빠른 대응 필요)
  • Burn Rate 14.4: 예산의 5%가 단 1시간만에 고갈되는 속도 (즉각적인 SEV-1 대응 필요)

Example #

특정 api의 에러 소진 속도가 임계치를 초과할때 즉각적인 알람을 발생시키는 prometheus/alertmanager 설정 코드다.

SLO 99.9% 기준 1시간동안 예산의 5%를 소진하는 burn rate 14.4 상황 탐지

groups:
- name: SLO_Burn_Rate_Alerts
  rules:
  - alert: HighErrorBudgetBurnRate_1Hour
    # 1시간 동안의 5xx 에러율이 허용 예산(0.1%)의 14.4배 속도로 발생하고 있는지 평가
    expr: |
      (
        sum(rate(http_requests_total{status=~"5.."}[1h])) 
        / 
        sum(rate(http_requests_total[1h]))
      ) > (0.001 * 14.4)
    for: 5m
    labels:
      severity: critical
      team: backend-core
    annotations:
      summary: "Critical: Error Budget Burn Rate > 14.4 (1h window)"
      description: |
        최근 1시간 동안의 에러 발생 속도가 매우 높습니다.
        이 속도가 유지될 경우 3일 이내에 이번 달의 99.9% SLO Error Budget이 완전히 고갈됩니다.
        즉각적인 Triage 및 Mitigation을 진행하십시오.
SRE/question/q_50.md