07 · Observability#
"Loglar olmadan çalışmıyor, traces olmadan yavaş, metrics olmadan SLO tutmuyor — ve hangisi olduğunu bilmiyorsun."
Modern observability "3 pillar + 1": metrics, logs, traces, profiles. Hepsinin önünde OpenTelemetry.
İçindekiler#
| Dosya | Konu |
|---|---|
OpenTelemetry-Adoption.md | OTel SDK + Collector + vendor-neutral pipeline kurulumu |
Prometheus-Best-Practices.md | Cardinality, recording rules, Mimir/VictoriaMetrics scaling |
SLO-Engineering.md | SLI seçimi, multi-window/multi-burn-rate alert, SLO dashboard |
Alerting-Done-Right.md | Symptom-based alert, page/ticket/log ayrımı, alert fatigue çözümü |
Logs-Loki-vs-ELK.md | Log stack seçimi, structured logging, query patterns |
Tracing-with-Tempo.md | Distributed tracing kurulumu, trace ID exemplar'ları |
Profiling-with-Pyroscope.md | Continuous profiling, eBPF, hot path tespiti |
"Three Pillars + 1"#
┌──────────────────────┐
│ Application code │
│ (OTel SDK enabled) │
└──────────┬───────────┘
│ OTLP (gRPC/HTTP)
▼
┌──────────────────────┐
│ OpenTelemetry │
│ Collector │ (sampling, enrichment, routing)
└──┬─────┬─────┬──┬────┘
│ │ │ │
metrics │ │ logs│ │ profiles
▼ ▼ ▼ ▼
┌──────────────┐ ┌──────┐ ┌──────┐ ┌────────────┐
│ Prometheus / │ │ Tempo│ │ Loki │ │ Pyroscope │
│ Mimir │ │ Jaeger│ │ │ │ │
└──────┬───────┘ └──┬───┘ └──┬───┘ └──────┬─────┘
└────────────┴────────┴─────────────┘
│
▼
┌──────────┐
│ Grafana │
│ UI │
└──────────┘
"Niye OTel?"#
| Eski model | OTel ile |
|---|---|
| Datadog SDK + Prometheus client + Loki client | Tek SDK, tek protocol (OTLP) |
| Vendor değiştirmek = kodu değiştirmek | Collector'ı değiştir, kod aynı |
| Trace ID metric/log'da yok | Auto-correlation (trace_id propagation) |
| Standardız, herkes farklı tag isimlendirir | Semantic conventions standardı |
Altın 4 sinyal (Google SRE)#
Bir servis için mutlaka ölçülmesi gereken:
- Latency — başarılı/başarısız ayrı (p50, p99)
- Traffic — RPS, kullanıcı sayısı
- Errors — 5xx oranı, panic, timeout
- Saturation — CPU, RAM, disk I/O, queue depth
Anti-pattern'ler#
- ❌ Her şeyi log'la (cardinality patlaması, $$$)
- ❌ "Avg latency < 200ms" SLO (medyanlar yalan söyler, p99 kullan)
- ❌ Cause-based alert ("CPU > %80") yerine symptom-based ("error rate > %1") kullan
- ❌ Dashboards açık ama kimse bakmıyor
- ❌ On-call'a 50 alert düşüyor — eşikleri ayarlamak yerine "ignore" filter ekleniyor