26J29d

Young-Kyoo Kim·2026년 6월 28일

지금까지 구축하고 고도화한 쿠버네티스 FinOps 및 자원 최적화 파이프라인의 전체 아키텍처 명세입니다.

원천 데이터 수집부터 버그 보정, 거시적 집계, 시각화 보고서 생성까지 이어지는 각 단계(Step)의 역할과 이들이 주고받는 데이터 의존성(Data Lineage)을 한눈에 파악하실 수 있도록 정리했습니다.


🛠️ 1. 전체 파이프라인 데이터 흐름 및 의존성 요약

각 단계는 독립된 스크립트처럼 보이지만, 이전 단계의 산출물(Parquet/JSON)을 입력으로 받아 가공하는 강력한 상하방 의존성을 가집니다. 특히 최근에 추가된 step2_5는 Spark 과표집 및 시간 유실 버그를 치료하여 하방 파이프라인 전체의 무결성을 보장하는 핵심 피벗(Pivot) 역할을 합니다.

단계 (Step)스크립트명핵심 역할입력 (Input)출력 (Output)
step1step1_daily_fetch.pyOpenCost API 원천 데이터 징수OpenCost API Endpointdata/raw/ (일별 raw 데이터)
step2step2_enrich.py메트릭 통합 및 기초 전처리data/raw/data/merged/enriched_7d.parquet
step2_5step2_5_fix_pareto.py[중요] 가동 시간 복구 및 Core-Hours 왜곡 보정enriched_7d.parquetenriched_fixed_7d.parquet


pareto_fixed_ns.parquet |
| step3_5 | step3_5_workload_scale.py | 기술 도메인별 거시적 규모 집계 | enriched_fixed_7d.parquet | data/merged/agg_workload_scale.parquet |
| step5 & `6|step6_excel_report.py(통합) | 현업 배포용 최종 마스터 엑셀 리포트 빌드 |enriched_fixed_7d.parquet`


pareto_fixed_ns.parquet | data/output/workload_analysis_{date}.xlsx |
| step7 | step7_visualize.py | 네임스페이스/부서 중심 6대 마스터 차트 렌더링 | enriched_fixed_7d.parquet | data/output/plots/chart_1~6.png |
| step7_2 | step7_2_workload_charts.py | 기술 도메인 중심 거시적 분석 차트 3종 렌더링 | agg_workload_scale.parquet | data/output/plots/chart_w1~w3.png |


🔍 2. 각 단계별 상세 역할 명세

1) 수집 및 정제 레이어 (step1 ~ step2_5)

  • step1_daily_fetch.py
  • 역할: 멀티 클러스터 환경의 OpenCost 데몬으로부터 최근 7일간의 컨테이너별 자원 할당량(Request/Limit) 및 실사용 피크 시계열 데이터를 JSON 형태로 안전하게 긁어옵니다.
  • step2_enrich.py
  • 역할: 분산된 클러스터 정보를 하나로 병합하고, 상태값 매핑 및 영문 표준화 작업을 수행합니다. 컨테이너별 P95/P99P_{95}/P_{99} 부하 통계의 기본 뼈대를 구성합니다.
  • step2_5_fix_pareto.py (왜곡 보정 엔진)
  • 역할: OpenCost 원천 데이터의 minutes 필드를 역추적하여 모든 상주형 정적 워크로드의 가동 시간(minutes_running_sum)을 정상 복구합니다. 또한 단순 코어 수가 아닌 Core-Hours (할당 코어 × 생존 시간) 단위를 도입하여, 초단기 휘발성 Spark 팟들이 수천 개씩 누적되어 파레토 차트를 오염시키던 통계적 착시를 완벽히 제거합니다.

2) 분석 및 집계 레이어 (step3_5, step5, step6)

  • step3_5_workload_scale.py
  • 역할: 유저별로 파편화된 수천 개의 네임스페이스를 걷어내고, 사내 인프라의 거시적 경향인 7대 기술 도메인(SPARK, JUPYTERLAB, STARROCKS, POSTGRESQL 등) 단위로 데이터를 종횡 집계합니다.
  • step5 & step6 (마스터 엑셀 빌더)
  • 역할: step2_5에서 보정된 무결성 데이터를 기반으로 현업 커뮤니케이션용 최종 의사결정 원부(Excel)를 생성합니다.
  • [0. 전체요약], [1. 파레토분석_NS], [2. 우선순위+액션플랜] 등 거시 장표부터 [5. 컨테이너낭비Top30P], [6. 컨테이너부족Top10P(OOM추적군)] 등 고정밀 로우 데이터까지 다차원 탭을 자동 드로잉합니다.

3) 시각화 레이어 (step7, step7_2)

  • step7_visualize.py
  • 역할: 네임스페이스와 부서 간의 자원 밸런스, 개별 컨테이너의 낭비 분포 매트릭스(Chart 2), 거버넌스 정책 위반 현황(Chart 6) 등 미크로(Micro) 관점의 6대 차트를 고화질 이미지로 출력합니다.
  • step7_2_workload_charts.py
  • 역할: step3_5 결과물을 바탕으로 경영진 및 현업 파트장 보고에 특화된 매크로(Macro) 관점의 3대 차트를 그립니다. (할당 대 낭비량 대조, 기술 스택별 종합 효율성 성적표, 거버넌스 위반과 실제 OOM 장애의 인과관계 추적 차트)

📅 3. 순차적 가동 프로세스 (Execution Workflow)

새로운 주차의 데이터가 유입되거나 전체 리포트를 처음부터 갱신할 때 실행해야 하는 올바른 터미널 명령어 순서입니다. 상위 단계가 성공해야 하방 파일이 갱신됩니다.

# 1. 원천 데이터 수집 (Raw 레이어)
python step1_daily_fetch.py

# 2. 전처리 및 메트릭 통합 (Enrich 레이어)
python step2_enrich.py

# 3. [★필수] 가동 시간 복구 및 Core-Hours 왜곡 보정 (Core 레이어)
python step2_5_fix_pareto.py

# 4. 거시적 기술 도메인 규모 롤업 집계 (Agg 레이어)
python step3_5_workload_scale.py

# 5. 최종 현업 배포용 마스터 엑셀 리포트 발행 (Report 레이어)
python step6_excel_report.py

# 6. 미크로/매크로 FinOps 마스터 분석 차트 전사 렌더링 (Visual 레이어)
python step7_visualize.py
python step7_2_workload_charts.py

이 체계로 파이프라인을 운영하시면, 데이터 추적성(Traceability)이 완벽하게 확보되므로 중간에 특정 수치가 튀거나 버그가 의심될 때 "몇 번 단계의 산출물 Parquet 파일이 오염되었는가"를 디버깅 도구(Pandas 등)로 매우 손쉽게 격리하고 검증하실 수 있습니다.

0개의 댓글