CNPA — 클라우드 네이티브 플랫폼 엔지니어링 어소시에이트 · 플랫폼을 숫자로 재기 · 실습
배포 원장에서 플랫폼 지표 계산하기
목표
28일치 배포 원장 한 장에서 DORA 네 지표와 채택률, 에러 버짓을 직접 계산합니다. 값을 눈대중으로 적지 않고 원장에서 뽑아내는 손을 만듭니다.
왜 중요한가
지표를 놓고 벌어지는 논쟁은 대부분 정의가 아니라 계산 방법에서 시작합니다. 평균이냐 중앙값이냐, 분모가 배포 건수냐 실패 건수냐, 활성 사용을 무엇으로 세느냐에 따라 같은 데이터가 몇 배씩 다른 숫자를 냅니다. 플랫폼 팀이 지표를 도입할 때 먼저 해야 할 일은 계산을 코드로 못박아 누가 돌려도 같은 값이 나오게 만드는 것입니다. 이 실습의 채점기도 같은 원리로 동작합니다. 여러분이 적어 낸 숫자를 믿지 않고 원장에서 다시 계산해 대조합니다.
단계
1. /root/cnpa-metrics/deploys.csv 에 배포 원장을 옮겨 적으세요. 머리글은 service,day,lead_min,result,restore_min 이고 데이터는 15행입니다. 내용은 형식 예시에 있는 그대로입니다. result 는 success 또는 failed 이고, 성공한 배포의 restore_min 은 0 입니다.
2. /root/cnpa-metrics/freq.json 에 배포 빈도를 담으세요. 키는 window_days(28), weeks(4), per_week 이고, per_week 에는 서비스별 주당 배포 건수를 소수 둘째 자리까지 넣습니다. 원장에 있는 세 서비스만 담습니다.
3. /root/cnpa-metrics/lead.json 에 리드 타임 중앙값을 담으세요. 키는 median_min(서비스별 중앙값)과 overall_median_min(15건 전체의 중앙값)입니다.
4. /root/cnpa-metrics/cfr.json 에 변경 실패율을 담으세요. 키는 total, failed, cfr_pct(소수 첫째 자리)입니다.
5. /root/cnpa-metrics/mttr.json 에 복구 시간을 담으세요. 키는 failed, mean_restore_min(실패한 배포의 평균 복구 시간, 소수 첫째 자리), max_restore_min 입니다.
6. /root/cnpa-metrics/dora.json 에 네 지표의 등급을 담으세요. 키는 deploy_frequency, lead_time, change_failure_rate, mttr 이고 값은 Elite, High, Medium, Low 중 하나입니다. 임계값은 이렇게 씁니다. 배포 빈도(전체 배포를 4주로 나눈 주당 건수)는 7 이상이면 Elite, 1 이상이면 High, 0.25 이상이면 Medium, 그 미만이면 Low 입니다. 리드 타임(전체 중앙값, 분)은 60 미만이면 Elite, 1440 미만이면 High, 10080 미만이면 Medium, 그 이상이면 Low 입니다. 변경 실패율은 5% 이하면 Elite, 10% 이하면 High, 15% 이하면 Medium, 그보다 크면 Low 입니다. 복구 시간(평균, 분)은 리드 타임과 같은 임계값을 씁니다.
7. /root/cnpa-metrics/services.csv 에 서비스 명부를 옮겨 적으세요. 머리글은 service,onboarded_day,golden_path,last_deploy_day 이고 데이터는 6행입니다. 그다음 /root/cnpa-metrics/platform-adoption.json 에 채택 현황을 담으세요. 키는 total_services(명부의 서비스 수), onboarded(golden_path 가 yes 인 수), active(golden_path 가 yes 이면서 last_deploy_day 가 15 이상인 수), active_rate_pct(활성 수를 전체 서비스 수로 나눈 백분율, 소수 첫째 자리)입니다.
8. /root/cnpa-metrics/budget.json 에 에러 버짓을 담으세요. 플랫폼 SLO 는 99.5%, 창은 28일입니다. 키는 slo_pct(99.5), window_days(28), budget_min(창 전체 분의 0.5%), burned_min(원장의 복구 시간 합), burn_pct(소진율, 소수 첫째 자리), remaining_min(남은 예산)입니다.
참고
- 중앙값은
sort -n으로 정렬한 뒤 가운데 값을 고르면 됩니다. 홀수 개면 가운데 하나입니다. - 소수 자리는
awk 'BEGIN { printf "%.1f", ... }'로 맞춥니다. - JSON 은
jq -n --argjson으로 만들면 숫자가 문자열로 바뀌지 않습니다. - 채점기는 여러분의 JSON 을 원장과 대조합니다. 원장을 고쳐 숫자를 맞추려 하면 1단계 채점이 먼저 떨어집니다.
단계 8개
- 배포 원장 옮겨 적기
- 배포 빈도
- 리드 타임 중앙값
- 변경 실패율
- 복구 시간
- 등급 판정
- 채택률
- 에러 버짓