Bölüm 8: Gözlemlenebilirlik Maliyet Yönetimi, Günlük Örnekleme ve Metrik Patlaması
Metrik etiket patlamasını önleme, OpenTelemetry Collector ile uçta günlük filtreleme ve CloudWatch saklama sınırları.
#1. Yönetici Özeti ve Problem Tanımı
Gözlemlenebilirlik faturaları (Datadog, AWS CloudWatch, Splunk, New Relic), izledikleri altyapı maliyetlerini aşmalarıyla ün kazanmıştır. AWS işlemcilerine ayda `math:50.000 harcayan bir şirketin Datadog veya CloudWatch günlük alımı ve özel metrikler için ayda `70.000 harcaması sık rastlanan bir durumdur.
Başlıca sorumlular şunlardır:
- Yüksek verimli canlı ortamlarda yayınlanan örneklenmemiş debug/info günlükleri.
- Yüksek kardinaliteli metrik etiketleri (Prometheus veya Datadog metrik etiketlerine kullanıcı kimlikleri, UUID'ler veya zaman damgaları eklemek).
- Yük dengeleyicilerden gelen tekrarlayan sağlık kontrolü (healthcheck) günlüklerinin saklanması.
#2. Özel Metrik Patlaması Tuzağı
Telemetri platformlarında metrik maliyeti şu şekilde hesaplanır:
Eğer http_requests_total metriği şu boyutlara sahipse:
endpoint: 20 değerstatus_code: 5 değeruser_id: 1.000.000 benzersiz kullanıcı
Bu tek bir metrik benzersiz zaman serisi oluşturur ve anında altı haneli aylık telemetri faturalarını tetikler.
Metrik Kardinalitesi Altın Kuralı
Yüksek kardinaliteli değerleri (Kullanıcı Kimlikleri, Oturum Kimlikleri, Sipariş Kimlikleri, IP Adresleri, UUID'ler) ASLA metrik boyutlarına koymayın. Bunları yapılandırılmış dağıtık izleme (traces) veya günlük gövdelerine yerleştirin.
#3. OpenTelemetry Collector ile Uçta Günlük Filtreleme
Gereksiz günlükleri kümeden çıkmadan önce uçta filtrelemek, örneklemek ve bırakmak için bir OpenTelemetry Collector daemonset'i dağıtın:
# OpenTelemetry Collector İşlem Hattı Yapılandırması
processors:
filter/drop_healthchecks:
error_mode: ignore
logs:
log_record:
- 'attributes["http.target"] == "/healthz"'
- 'attributes["http.target"] == "/readyz"'
- 'attributes["user_agent"] == "ELB-HealthChecker/2.0"'
probabilistic_sampler:
sampling_percentage: 10.0 # HTTP 200 INFO günlüklerinin yalnızca %10'unu tut; 4xx/5xx hatalarının %100'ünü sakla
service:
pipelines:
logs:
receivers: [otlp]
processors: [filter/drop_healthchecks, probabilistic_sampler]
exporters: [datadog, cloudwatch]
#4. CloudWatch Saklama Kuralları
Varsayılan olarak, AWS CloudWatch günlük grupları günlük akışlarını Asla Sona Ermez (Never Expire) şeklinde süresiz saklar. AWS CLI veya Terraform aracılığıyla tüm hesap günlük gruplarında 30 günlük saklama tavanı uygulayın:
# Tüm CloudWatch günlük gruplarında 30 günlük saklama politikasını zorunlu kılın
aws logs describe-log-groups --query "logGroups[*].logGroupName" --output text | tr '\t' '\n' | while read group; do
aws logs put-retention-policy --log-group-name "$group" --retention-in-days 30
done
