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을 추가하는 방법은 이렇습니다.

  1. .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
  1. 파이프라인을 실행하고, artifact에 EnergykWhTotalCarbonGramsCO2eq 열의 값이 0이 아닌 CO2_<date>.csv 파일이 생성되는지 확인합니다.
  2. 저장소에 로컬 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.typeazure로 설정하고 Azure 스토리지 계정 설정과 자격 증명을 추가하세요. 모든 옵션은 Carmen configuration을 참고합니다.

  1. job의 scriptartifacts 섹션을 교체합니다.
script:
  - mkdir -p $CI_PROJECT_DIR/output
  - cd $CI_PROJECT_DIR && carbon-daemon
artifacts:
  paths:
    - output/
  expire_in: 1 week
  1. 파이프라인을 다시 실행하고 출력 CO2_<date>.csv에 여러분의 데이터가 들어 있는지 확인합니다.

결과 보기 (View results)

Carmen은 컴포넌트(VM)당 하루에 한 줄씩 담긴 CSV 리포트를 만들어요. 출력 파일 이름은 CO2_<date>.csv 패턴을 따르고 upload.local.upload_path에 설정한 경로에 저장됩니다.

결과를 보는 방법은 이렇습니다.

  1. 파이프라인으로 이동합니다.
  2. carbon-report job을 선택합니다.
  3. Job artifacts 아래에서 Browse를 선택합니다.
  4. 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 필드가 리포트의 세분화를 결정한다는 점과, 일 단위 집계만 지원한다는 제약을 염두에 두면 활용 방향이 분명해져요.