Measuring Software Carbon — SCI, Cloud Carbon Footprint, Kepler#
"Yazılım karbonunu ölçmüyorsan, azaltma iddiası boştur. Excel'e 'green' yazmak yeter mi sorulduğunda CSRD '10 sayfalık emisyon raporu' der; auditor 'metric göster' der; sen ölçmemişsen iddia + utanç'la baş başa kalırsın."
Bu rehber yazılım emisyonunu gerçek metric'e dönüştüren stack'i — SCI formülü, Cloud Carbon Footprint, Kepler eBPF, AWS/GCP/Azure native dashboard'lar — somut adımlarla anlatır.
🎯 SCI — Software Carbon Intensity#
SCI = ((E × I) + M) / R
E = Energy (kWh) uygulamanın tükettiği elektrik
I = Carbon Intensity gCO₂eq/kWh (region+saat)
M = Embodied carbon hardware lifecycle CO₂ (amorti)
R = Functional unit request, user, transaction…
Birim: gCO₂eq / functional unit
🔑 Hedef: SCI'ı azalt, mutlak rakam değil. Year-over-year %20 azalma sağlam ilerleme.
Örnek hesap (basit)#
E = 100 kWh (1 hafta)
I = 250 gCO₂/kWh (eu-west-1 ortalama)
M = 1500 g (server lifecycle, 1 hafta amorti)
R = 10,000,000 request
SCI = (100 × 250 + 1500) / 10,000,000
= 25,001,500 / 10,000,000
= 2.5 gCO₂ / request
🛠️ E (Energy) Ölçümü#
Cloud — Bill-Based Estimation#
| Tool | Yöntem | Cloud |
|---|---|---|
| Cloud Carbon Footprint | Billing + utilization → kWh tahmin | AWS, GCP, Azure |
| AWS Customer Carbon Footprint Tool | Native dashboard | AWS |
| GCP Carbon Footprint | Native | GCP |
| Azure Emissions Impact Dashboard | Native | Azure |
On-prem / K8s — Kepler (eBPF)#
Kepler kernel'da eBPF ile pod-level energy ölçer (RAPL: Running Average Power Limit + GPU sensor).
helm install kepler kepler/kepler \
-n kepler --create-namespace \
--set serviceMonitor.enabled=true
Prometheus metrikler#
# Pod başına joule (cumulative)
kepler_container_joules_total{pod_name="<POD>", container_name="<C>"}
# Namespace başına watt-saat (1 saat penceresinde)
sum by (namespace) (
rate(kepler_container_joules_total[1h])
) / 3600
# CPU vs DRAM vs GPU dağılımı
kepler_container_package_joules_total # CPU socket
kepler_container_dram_joules_total # DRAM
kepler_container_gpu_joules_total # GPU
🔑 Kepler limit: AMD CPU bazılarında RAPL erişimi yok → "estimation mode" (model-based). Intel'de gerçek ölçüm.
🛠️ I (Carbon Intensity) Veri Kaynağı#
| Source | Coverage | Granularity |
|---|---|---|
| ElectricityMaps API | Global | Saatlik real-time + forecast |
| WattTime | US odaklı | 5-dakikalık |
| Cloud-native (AWS/GCP/Azure) | Vendor zone | Aylık ortalama |
| National grid data | UK, US, vb. | Saatlik |
Cloud Carbon Footprint built-in#
# Docker compose
docker-compose -f cloud-carbon-footprint/docker-compose.yml up
# UI: localhost:4000
Dashboard: - AWS account başına emisyon - Service başına (EC2 vs RDS vs S3) - Region başına - Daily trend - Kubecost entegrasyonu (per-namespace)
🛠️ M (Embodied Carbon)#
Hardware'in üretimden gelen karbonu — server, switch, disk üretimi.
Boavizta API#
curl -X POST 'https://api.boavizta.org/v1/server/' \
-H 'Content-Type: application/json' \
-d '{
"model": {"type": "rack"},
"configuration": {
"cpu": {"units": 2, "core_units": 32, "tdp": 200},
"ram": [{"capacity": 256, "units": 12}],
"disk": [{"type": "ssd", "capacity": 2000, "units": 4}]
},
"usage": {"hours_life_time": 35040, "usage_location": "DEU"}
}'
Pratik hesaplama#
- Server üretim: ~1500 kg CO₂eq
- Lifecycle: 4 yıl = 35,040 saat
- Per-saat: ~43 g CO₂
→ 1 saatte 1 server'a düşen embodied: 43 g.
🛠️ R (Functional Unit)#
"1 birim iş" sayımı. Domain'e bağlı:
| Workload | R |
|---|---|
| REST API | 1000 request |
| Veri işleme | 1 GB processed |
| ML inference | 1000 prediction |
| Storage | 1 TB-month |
| Streaming | 1000 saat watch |
| Build pipeline | 1 build |
Ölçüm#
# Aylık request sayısı
sum(increase(http_requests_total[30d]))
# Per-build (CI metric)
ci_pipeline_runs_total{status="success"}
📊 Tüm Stack: Birleştirelim#
┌────────────────────────────────────────────────────────┐
│ SCI Calculator │
│ │
│ E (energy) ← Kepler / CCF / cloud-native │
│ I (intensity) ← ElectricityMaps API │
│ M (embodied) ← Boavizta API │
│ R (units) ← Prometheus app metrics │
└────────────────────────────────────────────────────────┘
│
▼
Per-service SCI
│
▼
Grafana Dashboard
│
▼
CSRD / SOC2 / ISO 14001 raporu
Örnek Python hesaplama#
import requests
def calculate_sci(service: str, period_hours: int = 168):
# E: Kepler
energy_kwh = prometheus.query(
f'sum(increase(kepler_container_joules_total{{namespace="{service}"}}[{period_hours}h])) / 3600000'
)
# I: ElectricityMaps
intensity = requests.get(
f'https://api.electricitymap.org/v3/carbon-intensity/latest?zone=DE',
headers={'auth-token': EMAPS_TOKEN}
).json()['carbonIntensity']
# M: Boavizta (cluster-level, per service'a böl)
embodied_per_hour = 43 # g CO₂
cluster_servers = 30
service_share = 0.1 # %10 cluster usage
embodied_g = embodied_per_hour * period_hours * cluster_servers * service_share
# R: app metric
requests_total = prometheus.query(
f'sum(increase(http_requests_total{{service="{service}"}}[{period_hours}h]))'
)
sci = ((energy_kwh * intensity) + embodied_g) / (requests_total / 1000)
return sci # gCO₂ per 1000 requests
🎯 Grafana Dashboard#
Panels#
- Cluster total emissions (gCO₂/saat trend)
- Per-namespace breakdown
- Top 10 carbon-heavy services
- Service SCI trend (target line ile)
- Energy mix (CPU vs GPU vs DRAM)
- Region comparison
- Carbon-aware savings (time-shift gain)
Örnek query'ler#
# Cluster CO₂/saat
sum(rate(kepler_container_joules_total[1h])) / 3600000 * 250
# (250 = ortalama gCO₂/kWh)
# Per-namespace, top 10
topk(10, sum by (namespace) (rate(kepler_container_joules_total[1h])))
# SCI per service (custom metric)
service_sci_grams_per_1k_requests
📦 CSRD / Compliance Raporlama#
EU CSRD (Corporate Sustainability Reporting Directive)#
- Scope 1: doğrudan emisyon (genelde yazılımda yok)
- Scope 2: alınan elektrik (cloud workload buraya girer)
- Scope 3: tedarik zinciri (vendor SaaS, hardware lifecycle)
Raporlama formatı#
# Örnek: CSRD-uyumlu yıllık rapor
year: 2026
scope_2_emissions_kg:
cloud_compute: 24000
cloud_storage: 3500
cloud_network: 2100
total: 29600
scope_3_emissions_kg:
hardware_embodied: 8000
vendor_saas:
github: 500
datadog: 1200
others: 800
total: 10500
methodology: "GHG Protocol + GSF SCI"
data_sources:
- "AWS Customer Carbon Footprint Tool"
- "Kepler (K8s)"
- "Boavizta (embodied)"
reduction_targets:
baseline_year: 2024
2030_target: -50%
current_progress: -18%
🚫 Anti-Pattern Tablosu#
| Anti-pattern | Niye kötü | Doğru |
|---|---|---|
| Sadece "carbon offset" alma, ölçüm yok | Real reduction değil, pazarlama | Ölç → azalt → kalanı offset |
| Cloud-native tool sayılarına güven sadece | Sadece o cloud'u kapsar | Multi-source aggregator (CCF) |
| Average intensity (yıllık) kullanma | Real-time eksik | Saatlik ElectricityMaps |
| M (embodied) ihmal | Toplam %20-30 kayıp | Boavizta API ile dahil et |
| R (functional unit) tanımlanmamış | SCI hesaplanamaz | Per-workload "1 birim iş" tanımı |
| Ölçüm var, target yok | İyileşme görünmez | Year-over-year hedef |
| ESG ekibi tek başına | Mühendis dahil değil | Joint dashboard, ortak hedef |
| Kepler'siz K8s'de tahmin yok | Pod-level yok | Kepler veya equivalent |
| Trend takibi yok | Bir kerelik rapor → eskimiş | Grafana sürekli |
| Yıllık rapor manuel | Hata + zaman israfı | Otomatik aggregator |
| AI/ML ihmal | LLM training devasa | Ayrı kategori, GPU energy ayrı raporla |
📋 Software Carbon Measurement Checklist#
[ ] Cloud Carbon Footprint kurulu (multi-cloud aggregator)
[ ] Kepler (K8s pod-level energy) — Intel cluster'larda
[ ] ElectricityMaps API token (real-time intensity)
[ ] Boavizta API embodied carbon
[ ] Per-service SCI hesaplanıyor
[ ] R (functional unit) her workload için tanımlı
[ ] Grafana sustainability dashboard
[ ] Year-over-year reduction target (örn: -20%)
[ ] AI/ML workload'lar ayrı kategori (GPU energy)
[ ] CSRD-ready rapor şablonu
[ ] Quarterly review: yöneticilere trend
[ ] Mühendis on-boarding: SCI farkındalığı
[ ] Vendor SaaS Scope 3 envanter
[ ] Hardware lifecycle politikası (4-5 yıl + refurbish)
[ ] CDN / cache strategy ile network carbon
[ ] Region selection matrix (carbon dahil)
📚 Referanslar#
- GSF SCI Specification — sci.greensoftware.foundation
- Cloud Carbon Footprint — cloudcarbonfootprint.org
- Kepler — sustainable-computing.io
- Boavizta — boavizta.org
- ElectricityMaps — electricitymaps.com
- AWS Customer Carbon Footprint Tool
- GCP Carbon Footprint
- Azure Emissions Impact Dashboard
- GHG Protocol — ghgprotocol.org
- CSRD (EU) — finance.ec.europa.eu/csrd
Green-Software-Principles.mdCarbon-Aware-Computing.mdRegion-Selection.md
"Ölçmediğin şeyi azaltamazsın. SCI yazılım karbonunu CI'da pass/fail metric'e indirgeyebilen tek araç. CSRD raporlamasını 'sayfalar dolusu metin' yerine dashboard çıktısı yapan disiplin."