Carmen
Carmen (Carbon Measurement Engine)
Carmen(Carbon Measurement Engine)은 클라우드 인프라와 애플리케이션에서 발생하는 탄소 배출을 측정하는 오픈소스 도구예요. 두 가지 소스에서 탄소 배출을 측정합니다. 첫째는 CSV 형식의 VM 사용량 데이터로 가상 머신·클라우드 워크로드의 에너지 소비와 탄소 배출을, 둘째는 Prometheus 지표로 Kubernetes 클러스터에서 실행되는 개별 워크로드·파드의 탄소 배출을 측정해요. 결과는 Grafana·FinOps 대시보드·자체 도구에서 쓸 수 있는 CSV 리포트로 만들어집니다.
출처: 문서
본문
[!WARNING] Carmen은 Green Software Foundation이 승인하거나 채택하지 않은 초안(draft) 소프트웨어예요. 개발 현황의 리뷰 외 목적으로 Carmen에 의존하지 마세요. GitLab은 이 도구를 유지 관리하거나 지원하지 않고, 이 도구가 어떤 규제·컴플라이언스 요구사항을 충족한다는 보장도 하지 않아요. Carmen은 기업 ESG 보고, 컴플라이언스 공시, 마케팅 자료에는 적합하지 않습니다.
입력 데이터 형식 (Input data format)
Carmen 데몬은 CSV 형식의 VM 사용량 데이터를 기대해요. 로컬 파일이라면 config.yaml에서 CSV가 있는 경로를 지정해 주세요. Azure Blob Storage를 쓴다면 config.yaml에 스토리지 계정을 구성하면 Carmen이 데이터를 직접 읽어요.
필수 필드는 이렇습니다.
| 필드 | 설명 | 예시 |
|---|---|---|
Time |
ISO 8601 형식의 타임스탬프. | 2024-10-15T14:30:00Z |
Id |
VM의 고유 식별자(리포트 세분화를 제어). | vm-a1b2c3d4 |
Size |
VM 인스턴스 크기. | Standard_D4s_v3 |
Region |
VM이 배포된 리전. | eastus |
Service |
클라우드 서비스 또는 제품 카테고리. | Compute |
Component |
VM이 제공하는 애플리케이션 레이어. | api-gateway |
Subscription |
클라우드 구독 식별자. | prod-subscription-001 |
Name |
사람이 읽기 좋은 VM 이름. | production-web-01 |
Instance |
배포 그룹 안 VM의 인스턴스 식별자. | web-server-03 |
Environment |
배포 환경. | production |
Partition |
논리 파티션 또는 테넌트. | team-finance |
AverageCpuPercentage |
측정 기간 동안 평균 CPU 사용률(0-100). | 45.7 |
DiskSizeGb |
프로비저닝된 총 디스크 스토리지(GB). | 128 |
Id 필드가 리포트 세분화를 제어해요. Id의 각 고유 값이 출력에서 컴포넌트 하나를 생성합니다. 일반적으로 VM 단위지만, 필요한 인사이트에 따라 더 넓게(서비스 단위) 또는 더 세밀하게 ID를 쓸 수 있어요.
파이프라인에 Carmen 추가하기 (Add Carmen to your pipeline)
Carmen을 CI/CD job으로 실행해서 VM 사용량 데이터로 탄소 배출 리포트를 만들고 파이프라인 artifact로 저장할 수 있어요.
사전 요구사항은 이렇습니다.
- 러너 환경에 Python 3.12, pip, npm, Git,
lsb-release, bash가 있어야 해요. - 필수 형식의 VM 사용량 데이터가 로컬 CSV 파일로 있어야 해요. Carmen은 Azure Blob Storage에서 읽는 것도 지원해요.
- 알려진 경로에
config.yaml파일.
파이프라인에 Carmen을 추가하는 방법은 이렇습니다.
.gitlab-ci.yml파일에 Carmen을 설치하고 Carmen에 포함된 예시 데이터로 데몬을 실행하는 job을 추가합니다.
carbon-report:
image: python:3.12
before_script:
- apt-get update && apt-get install -y nodejs npm git lsb-release
- git clone https://github.com/Green-Software-Foundation/if-carmen.git
- npm install -g "@grnsft/[email protected]" "@grnsft/[email protected]" "@grnsft/[email protected]"
- pip install --upgrade pip && pip install -e $CI_PROJECT_DIR/if-carmen
script:
- cd $CI_PROJECT_DIR/if-carmen/example-data && carbon-daemon
artifacts:
paths:
- if-carmen/example-data/output/
expire_in: 1 week
- 파이프라인을 실행하고, artifact에
EnergykWh와TotalCarbonGramsCO2eq열의 값이 0이 아닌CO2_<date>.csv파일이 생성되는지 확인합니다. - 저장소에 로컬 CSV 데이터를 가리키는
config.yaml을 추가합니다.
carmen_daemon:
source:
type: local
file_names:
- "vm_metrics.csv"
local:
source_path: "data/vm-metrics"
upload:
type: local
local:
upload_path: "./output"
Azure Blob Storage를 쓴다면 source.type을 azure로 설정하고 Azure 스토리지 계정 설정과 자격 증명을 추가하세요. 모든 옵션은 Carmen configuration을 참고합니다.
- job의
script와artifacts섹션을 교체합니다.
script:
- mkdir -p $CI_PROJECT_DIR/output
- cd $CI_PROJECT_DIR && carbon-daemon
artifacts:
paths:
- output/
expire_in: 1 week
- 파이프라인을 다시 실행하고 출력
CO2_<date>.csv에 여러분의 데이터가 들어 있는지 확인합니다.
결과 보기 (View results)
Carmen은 컴포넌트(VM)당 하루에 한 줄씩 담긴 CSV 리포트를 만들어요. 출력 파일 이름은 CO2_<date>.csv 패턴을 따르고 upload.local.upload_path에 설정한 경로에 저장됩니다.
결과를 보는 방법은 이렇습니다.
- 파이프라인으로 이동합니다.
carbon-reportjob을 선택합니다.- Job artifacts 아래에서 Browse를 선택합니다.
CO2_<date>.csv파일을 엽니다.
리포트에는 다음 필드가 포함됩니다.
| 필드 | 설명 |
|---|---|
Date |
24시간 보고 버킷. |
Id |
컴포넌트(VM)의 고유 식별자. |
Name |
VM의 사람이 읽기 좋은 이름. |
EnergykWh |
소비된 총 에너지(kWh). |
OperationalCarbonGramsCO2eq |
운영 중 에너지 소비에서 발생한 탄소 배출. |
EmbodiedCarbonGramsCO2eq |
하드웨어 제조·운송·폐기에서 발생한 탄소 배출. |
TotalCarbonGramsCO2eq |
운영·내재 탄소 배출의 합. |
CarbonIntensity |
지역 전력망의 탄소 집약도(gCO2eq/kWh). |
애플리케이션 측정 (Application measurement)
Kubernetes 클러스터에서 개별 워크로드의 탄소 배출을 측정하려면 Carmen을 Prometheus 옆에 사이드카 API 서비스로 배포할 수 있어요. 이 모드는 설정 가능한 간격으로 파드별 CPU·메모리 지표를 가져옵니다. 이 배포에는 Helm, Prometheus, kube-state-metrics, cAdvisor가 있는 Kubernetes 클러스터가 필요해요. 자세한 내용은 Carmen 저장소의 Carmen as a Service 문서를 참고하세요.
트러블슈팅 (Troubleshooting)
Carmen을 쓰다 보면 이런 문제들을 만날 수 있어요.
첫 리포트 출력이 이상해 보여요 (First report output looks incorrect)
탄소 배출 값이 예상보다 너무 높거나 낮아 보일 때가 있어요. 이는 실제 VM 스펙이 제공되지 않아 Carmen이 기본 벤치마크 하드웨어 구성으로 폴백(fallback)했을 때 발생합니다. 해결하려면 클라우드 제공자의 API에서 실제 VM 스펙을 제공하세요.
출력에 VM당 한 줄만 있어요 (Output contains only one row per VM)
리포트에 예상보다 적은 줄이 있으면 여러 레코드가 같은 Id 값을 공유하고 있을 수 있어요. 입력 CSV의 Id 열을 확인하세요. Id의 각 고유 값이 출력에서 컴포넌트 하나를 생성합니다.
Carmen이 출력을 만들지 않아요 (Carmen produces no output)
carbon-daemon 실행 후 출력 디렉터리가 비어 있다면, Impact Framework가 전역으로 설치되지 않았거나 carbon-daemon을 실행한 디렉터리에서 config.yaml 경로가 해석되지 않은 것일 수 있어요. 이렇게 해결하세요.
@grnsft/if가 설치되어 접근 가능한지 확인:if-run --version- 작업 디렉터리에서
config.yaml의 경로가 해석되는지 확인.
측정이 일 단위 합계로만 집계돼요 (Measurements aggregate to daily totals only)
시간 단위나 하루보다 짧은 탄소 배출 값이 필요하다면 참고하세요. Carmen은 일 단위 합계로만 집계해요. 시간 단위 해상도는 알려진 한계입니다.
더 알아보기
Carmen은 CSV 형태의 VM 사용량 데이터로 인프라 탄소 배출을, Prometheus 지표로 애플리케이션 워크로드의 배출을 측정한다는 두 가지 축이 핵심이에요. 시작할 때는 예시 데이터로 데몬이 동작하는지 확인한 뒤 실제 데이터와 config.yaml로 바꿔 보세요. Id 필드가 리포트의 세분화를 결정한다는 점과, 일 단위 집계만 지원한다는 제약을 염두에 두면 활용 방향이 분명해져요.