CNPA — Cloud Native Platform Engineering Associate
Computing Platform Metrics From the Deployment Ledger
한국어 원문으로 표시합니다.
목표
28일치 배포 원장 한 장에서 DORA 네 지표와 채택률, 에러 버짓을 직접 계산합니다. 값을 눈대중으로 적지 않고 원장에서 뽑아내는 손을 만듭니다.
왜 중요한가
지표를 놓고 벌어지는 논쟁은 대부분 정의가 아니라 계산 방법에서 시작합니다. 평균이냐 중앙값이냐, 분모가 배포 건수냐 실패 건수냐, 활성 사용을 무엇으로 세느냐에 따라 같은 데이터가 몇 배씩 다른 숫자를 냅니다. 플랫폼 팀이 지표를 도입할 때 먼저 해야 할 일은 계산을 코드로 못박아 누가 돌려도 같은 값이 나오게 만드는 것입니다. 이 실습의 채점기도 같은 원리로 동작합니다. 여러분이 적어 낸 숫자를 믿지 않고 원장에서 다시 계산해 대조합니다.
단계
/root/cnpa-metrics/deploys.csv에 배포 원장을 옮겨 적으세요. 머리글은service,day,lead_min,result,restore_min이고 데이터는 15행입니다. 내용은 형식 예시에 있는 그대로입니다.result는success또는failed이고, 성공한 배포의restore_min은 0 입니다./root/cnpa-metrics/freq.json에 배포 빈도를 담으세요. 키는window_days(28),weeks(4),per_week이고,per_week에는 서비스별 주당 배포 건수를 소수 둘째 자리까지 넣습니다. 원장에 있는 세 서비스만 담습니다./root/cnpa-metrics/lead.json에 리드 타임 중앙값을 담으세요. 키는median_min(서비스별 중앙값)과overall_median_min(15건 전체의 중앙값)입니다./root/cnpa-metrics/cfr.json에 변경 실패율을 담으세요. 키는total,failed,cfr_pct(소수 첫째 자리)입니다./root/cnpa-metrics/mttr.json에 복구 시간을 담으세요. 키는failed,mean_restore_min(실패한 배포의 평균 복구 시간, 소수 첫째 자리),max_restore_min입니다./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 입니다. 복구 시간(평균, 분)은 리드 타임과 같은 임계값을 씁니다./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(활성 수를 전체 서비스 수로 나눈 백분율, 소수 첫째 자리)입니다./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단계 채점이 먼저 떨어집니다.
배포 원장 옮겨 적기
/root/cnpa-metrics/deploys.csv 에 배포 원장을 옮겨 적으세요. 머리글은 service,day,lead_min,result,restore_min 이고 데이터는 15행입니다. 내용은 형식 예시에 있는 그대로입니다. result 는 success 또는 failed 이고, 성공한 배포의 restore_min 은 0 입니다.
모든 계산의 출발점입니다. 한 글자라도 다르면 뒤 단계의 값이 전부 달라지므로, 옮겨 적은 뒤 합계로 확인하세요.
배포 빈도
/root/cnpa-metrics/freq.json 에 배포 빈도를 담으세요. 키는 window_days(28), weeks(4), per_week 이고, per_week 에는 서비스별 주당 배포 건수를 소수 둘째 자리까지 넣습니다. 원장에 있는 세 서비스만 담습니다.
서비스마다 따로 셉니다. 28일은 4주이고, 값은 소수 둘째 자리까지 씁니다.
리드 타임 중앙값
/root/cnpa-metrics/lead.json 에 리드 타임 중앙값을 담으세요. 키는 median_min(서비스별 중앙값)과 overall_median_min(15건 전체의 중앙값)입니다.
정렬한 뒤 가운데 값입니다. 전체 중앙값은 15건을 모두 늘어놓고 구합니다. 서비스별 중앙값을 평균 내는 것이 아닙니다.
변경 실패율
/root/cnpa-metrics/cfr.json 에 변경 실패율을 담으세요. 키는 total, failed, cfr_pct(소수 첫째 자리)입니다.
분모는 배포 건수입니다. 서비스 수도 사고 건수도 아닙니다. 백분율은 소수 첫째 자리까지 씁니다.
복구 시간
/root/cnpa-metrics/mttr.json 에 복구 시간을 담으세요. 키는 failed, mean_restore_min(실패한 배포의 평균 복구 시간, 소수 첫째 자리), max_restore_min 입니다.
평균을 낼 때 나누는 수는 실패한 배포 건수입니다. 전체 배포로 나누면 값이 몇 배로 작아집니다.
등급 판정
/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 입니다. 복구 시간(평균, 분)은 리드 타임과 같은 임계값을 씁니다.
임계값은 지시문에 적힌 것을 그대로 씁니다. 배포 빈도는 조직 전체(15건)를 4주로 나눈 값으로 판정합니다.
채택률
/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(활성 수를 전체 서비스 수로 나눈 백분율, 소수 첫째 자리)입니다.
온보딩과 활성 사용은 다릅니다. 활성은 골든 패스로 온보딩했고 최근 14일 안에 배포한 서비스입니다. 활성률의 분모는 전체 서비스입니다.
에러 버짓
/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(남은 예산)입니다.
28일은 40320분입니다. SLO 가 99.5% 이므로 그 0.5%가 이번 창의 예산이고, 소진은 원장의 복구 시간 합입니다.