오류 예산 및 SLO 관리
1) SLO 및 오류 예산
SLO (서비스 수준 목표) - 사용자가 인식 한 목표 품질 수준; SLI-측정 메트릭; 오류 예산-창 당 편차에 대한 허용 오차 (보통 30/90 일).
오류 예산은 신뢰성을 "추상화" 에서 관리 리소스로 전환합니다. 예산이 빨리 연소되면 기능과 중국어가 동결됩니다. 예산이 건강 할 때-출시 속도를 높일 수 있습니다.
2) SLI 선택: "좋은" 것으로 간주되는 것
기준: "사용자의 관점에서 성공했습니다".
2. 클래식 SLI 1 개
가용성은 성공적인 요청의 백분율입니다 (클라이언트가 취소 한 요청 제외).
'success = http _ state 가수 {2xx, 3xx, 404} 및 타임 아웃 없음' (404는 의미론이 예상되는 경우 읽기 API 성공으로 간주 될 수 있음).
대기 시간: 요청 비율이 임계 값보다 빠릅니다 (예: p95 λ300 ms).
'Good _ latency = 지속 시간 _ ms λ300'.
Freshness/Staleness: "X 분 이하의 데이터" (캐시, 디렉토리, 계수).
품질: 결과의 정확성 (비즈니스 유효성 검사기/백엔드 불변량 전달).
2. 2 개의 경계 및 세그먼트
SLI는 '경로', '테넌트/브랜드', '지역/관할권', '결제 _ 제공자' 와 같은 중요한 조각으로 계산해야합니다. 따라서 시스템 전체에서 하나의 중요한 핸들 고장을 "번짐" 하지 않습니다.
3) 공식과 예산
3. 1 요청 기반 (API에 선호)
SLO_availability = good_requests / total_requests
Error_budget = 1 - SLO_target
Burn = 1 - SLO_actual
3. 2 시간 기반 (배경 서비스/스트리밍 용)
SLO_uptime = good_minutes / total_minutes
3. 3 목표의 예
API 일반: 99. 30 일 동안 9% 가용성 → 예산 = 0. 1%.
중요한 지불 펜: 99. 95%; 카탈로그/검색: 99. 5%.
대기 시간: '/v1/payment '에서 p95 소 300ms, p99 체 800ms.
4) SLI 계측
4. 1 가지 원칙
로그/트레일 → 명시 적 버킷이있는 RED (속도/오류/지속 시간) 메트릭.
'테넌트', '지역', '경로 _ 클래스' (PII 없음) 를 넣으십시오.
"성공" 과 "총", 그리고 대기 시간에 대해 "빠른" 과 "총" 의 두 가지 측정 항목을 계산하십시오.
4. 2 프로 메테우스 예 (5m 당 속도)
promql
Availability (successes/total)
sli:success:rate5m = sum by(region, route)(
rate(http_requests_total{code=~"2.. 3.."}[5m])
)
sli:total:rate5m = sum by(region, route)(
rate(http_requests_total[5m])
)
sli:availability:ratio5m = sli:success:rate5m / sli:total:rate5m
Latency (fraction faster than 300 ms)
sli:fast:rate5m = sum by(region, route)(
rate(http_request_duration_seconds_bucket{le="0. 3"}[5m])
)
sli:latency_ok:ratio5m = sli:fast:rate5m / sli:total:rate5m
5) 연소율 경고 (멀티 윈도, 멀티 번)
5. 1 아이디어
우리는 목표에 비해 예산이 얼마나 빨리 소실되는지 살펴 봅니다. 짧고 긴 창에서 속도가 높으면 신호를 보냅니다.
5. 2 임계 값 프로파일 (SLO 99 용) 9%)
페이징: 연소율 14 이상. 4 × (1 시간 예산의 10%, 6 시간 동안 5%).
티켓: 연소율 6 × 이상 (6 시간 2%, 24 시간 1%).
5. 3 예 규칙 (Prometheus, pseudo)
promql
Let's calculate the error_ratio on two windows short = 1 - (sum (rate (http_requests_total{code=~"2.. 3.."}[5m])) /
sum(rate(http_requests_total[5m])))
long = 1 - (sum(rate(http_requests_total{code=~"2.. 3.."}[1h])) /
sum(rate(http_requests_total[1h])))
For SLO = 99. 9%, error_budget=0. 001. BurnRate = error_ratio / 0. 001 burn_short = short / 0. 001 burn_long = long / 0. 001
Paging: Both windows exceed 14. 4× alert: SLOErrorBudgetBurnRateHigh expr: burn_short > 14. 4 and burn_long > 14. 4 for: 5m labels: { severity="page" }
annotations:
summary: "SLO burn rate high (short & long windows)"
runbook: "slo/runbooks/payments. md"
티켓은 6 시간/24 시간과 유사합니다.
6) 예산 사무소: 프로세스
6. 출시 게이트 1 개
예산의 균형이 25% 미만이고 추세가 음수 인 경우 기능에 대한 "코드 동결" 이 우선 순위는 SRE/안정성입니다.
카나리아 릴리스에는 별도의 SLO 슬라이스 ('배포') 가 있어야합니다. 환경 = "카나리아" ').
6. 2 백 로그 우선 순위 지정
연소율 및 수익 영향에 비례하여 명령 용량을 분배합니다.
"수정 X는 연소율을 Y% 줄입니다".
6. 3 사후 사건
각 사건 - RCA 및 "롤백 할 수없는 수정" (실행 가능), 제어는 "SLO로 돌아 왔습니다".
7) 코드로서의 SLO
7. 1 SLO 매니페스트 예 (YAML)
yaml service: payments-api owner: team-payments slis:
- name: availability type: request_based success_query: sum(rate(http_requests_total{svc="pay",code=~"2.. 3.."}[5m]))
total_query: sum(rate(http_requests_total{svc="pay"}[5m]))
objective: 99. 95 window: 30d segments: ["region", "tenant", "route"]
- name: latency_p95_300ms type: latency_threshold good_query: sum(rate(http_request_duration_seconds_bucket{svc="pay",le="0. 3"}[5m]))
total_query: sum(rate(http_request_duration_seconds_count{svc="pay"}[5m]))
objective: 99. 0 window: 30d alerts:
- name: burn_high_page windows: ["5m", "1h"]
threshold_burn: 14. 4 severity: page
7. 2 규칙 생성
생성기 (slo-Generator, pyrra, 나무 늘보) 를 사용하여 규칙, 대시 보드 및 보고서를 자동으로 작성하십시오.
8) SLO 분해 및 보호
로드 셰더: "고가의" 종속성없이 빠른 답변을 제공하십시오.
캐시 및 오래된: '부실한 동안 계시하기'
요율/동시성 제한: 백엔드 보호; 중요한 경로-우선 순위.
회로/시간 초과: 빠른 타임 아웃 및 "폴백" 브랜치.
기능 플래그: 하나의 버튼으로 무거운 기능을 비활성화합
9) SLO 관찰 가능성
대시 보드: SLO 실제 vs 목표, 예산 균형, 연소율, 노선/공급자의 기여.
상관 관계: SLO TO의 "구멍" 에서 예시 → 특정 추적 → 로그/프로파일까지.
보고서: 주간-추세, 예산 소비, 악화의 주요 이유.
10) 안티 패턴
전체 → 마스크 문제에 대한 하나의 "글로벌" SLO. 세그먼트.
«99. 비용과 현실을 제외한 모든 것에 대해 99%. 사용자 경험에서 목표를 선택하십시오.
연소율/SLO 대신 CPU/힙 경고.
UX를 망치는 4xx/long 리디렉션을 무시합니다.
황반 창 (롤링 대 캘린더) - "오렌지와 사과" 의 비교.
11) iGaming/Finance의 세부 사항
돈 경로 (예금/인출): 전체 수준 이상의 개별 SLO (예: 99. 95% 가용성; p95 λ250 ms).
PSP/KYC 제공 업체: 각 제공 업체의 SLO + 화상에 대한 기여에 대한 경고; 자동 경로 전환 (스마트 라우팅).
관할권/임차인: 지역 문제가 전 세계 지표를 "홍수" 하지 않도록 '지역/관할권/브랜드' 별 SLO 및 예산.
책임있는 게임: 한계/자체 배제 (규정 준수 공식) 적용 기간 동안 SLO.
감사/규제: SLO 및 사건 보고서를 유지하십시오. 내부 감사에 대한 투명성.
12) Prod 준비 점검표
- SLI (가용성/대기 시간/품질/신선도) 및 세그먼트 (경로/테넌트/지역) 가 정의됩니다.
- 목표 (SLO) 는 현실적이며 비즈니스와 일치합니다. 30/90 일의 롤링 윈도우가 있습니다.
- 다중 창 (페이징/티켓) 으로 연소율에 의한 경고.
- 코드로서의 SLO (규칙/대시 보드 생성기); 예산 보고서.
- 릴리즈 게이트는 나머지 예산과 연결되어 있습니다. 카나리아 섹션.
- 분해 메커니즘 (셰더, 캐시 오래된, 회로, 한계) 이 구현 및 테스트됩니다.
- 지표는 상관 관계, 명확한 런북을 추적합니다.
- 재무/관할 경로-별도의 SLO/경고; PSP/KYC가 분리됩니다.
- 정기적 인 사고 복고풍 및 화상 기반 신뢰성 투자.
13) TL; DR
사용자 값별로 SLI를 정의하고 실제 SLO를 설정하며 오류 예산을 통해 관리하고 다중 창으로 연소율을 관리합니다. 계획대로 SLO 코드 사용, 게이트 해제 및 저하를 사용하십시오. 노선/테넌트/지역별 세그먼트; 돈 경로는 더 엄격한 목표와 별도의 경고를 유지합니다.