Grafana Stack; Grafana Labs tarafından geliştirilen, modern gözlemlenebilirlik (observability) için end-to-end açık-kaynak araçlar bütünüdür. Klasik 3 sütun (metric, log, trace) artık 4’e çıktı: continuous profiling (Pyroscope) ile dördüncü boyut. Hepsi tek bir Grafana UI’ından sorgulanabilir ve birbirine bağlanabilir (“derive log from trace”, “derive trace from metric”).
Stack’in temel felsefesi: etiket bazlı (label-based) indeksleme. Bu yaklaşım, Loki’nin storage maliyetini Elasticsearch’ün 10-20’de birine indirir; metric ve log paradigmalarını birleştirir; dev-friendly LogQL/PromQL/TraceQL sorgu dillerini sunar.
Mono’nun yaklaşımı
Modern uygulamalar için Mono’nun varsayılan gözlemlenebilirlik kurulumudur. Standartlarımız:
- Toplama: OpenTelemetry Collector (gateway pattern) — uygulamalar OTLP gönderir, collector route eder.
- Metric: Mimir (multi-tenant, S3 backend); küçük ortamlarda single-binary Prometheus.
- Log: Loki + Promtail/Vector; structured JSON log uygulama tarafında zorunlu.
- Trace: Tempo + OpenTelemetry SDK; sampling stratejisi: head-based 1% + tail-based hata olduğunda %100.
- Profiling: Pyroscope (Grafana Pyroscope) —
pprofformatında continuous profiling. - Alerting: Alertmanager + Grafana OnCall; SLO temelli alarm tasarımı (Mono blogumuzda detaylı).
- Dashboard’lar: Grafana as Code — JSON manifest’leri Git’te, GitOps ile push.
Tipik üretim mimarisi
Tipik bir kurulum şu bileşenlerden oluşur:
- Uygulama OTel SDK ile metric/log/trace üretir.
- OTel Collector (DaemonSet) local agent → Collector (gateway) filtreleme/sampling.
- Mimir ingester → S3 storage → querier; Loki ingester → S3 → querier; Tempo distributor → S3 → querier.
- Grafana her datasource’u federation ile sorgular; Alertmanager Mimir kurallarını çalıştırır.
- Slack/PagerDuty alarm hedefleri; Grafana OnCall rotasyon yönetimi.
Yaygın sorunlar ve çözümler
- Yüksek cardinality: Pod IP veya request-id gibi yüksek-cardinality label’lar metrik patlatır. Asla label’a dönüştürmeyin; uygulama tarafında trace ID’ye taşıyın.
- Loki yavaş query: Label seçimi yetersiz, full-stream tarama yapılıyor. Önce dar label seçimi, sonra
|=filter. - Tempo trace bulunamıyor: Sampling oranı çok düşük + index TTL kısa. Tail-sampling ile hata trace’leri %100 sakla.
- Grafana yavaş açılıyor: Dashboard’da çok fazla panel + ortak time range yok. Variable-based dashboard + caching.
- Cost patlaması: Loki/Mimir log/metric volume ölçülmüyor. Ingester metric’leri (sample/series) izlenmeli.