Observability Nedir? Gözlemlenebilirlik Üç Sütunu
Sisteminiz çöktüğünde "ne oldu?" diye sorarsınız. Monitoring size "bir şey bozuldu" der. Observability ise "neden bozuldu, nerede bozuldu ve nasıl düzeltilir" sorularını yanıtlar.
Monitoring vs Observability
| Özellik | Monitoring | Observability | |---------|-----------|--------------| | Odak | Bilinen sorunları izle | Bilinmeyen sorunları keşfet | | Yaklaşım | Dashboard + alarm | Sorgulama + keşif | | Soru | "Sistem çalışıyor mu?" | "Neden çalışmıyor?" | | Veri | Önceden tanımlı metrikler | Zengin, bağlamsal veri |
Üç Sütun (Three Pillars)
1. Metrics (Metrikler)
Sayısal ölçümler. Zaman serisi veri olarak saklanır:
http_requests_total{method="GET", status="200"} 15234
http_request_duration_seconds{quantile="0.99"} 0.250
cpu_usage_percent 45.2
memory_used_bytes 1073741824
Araçlar: Prometheus, Grafana, Datadog, CloudWatch
RED Method (Request-oriented):
- Rate — İstek oranı (req/sec)
- Errors — Hata oranı
- Duration — Yanıt süresi
USE Method (Resource-oriented):
- Utilization — Kullanım oranı
- Saturation — Doygunluk
- Errors — Hata sayısı
2. Logs (Günlükler)
Olayların metin tabanlı kayıtları. Yapılandırılmış (structured) loglar tercih edilir:
{
"timestamp": "2026-02-14T21:30:00Z",
"level": "error",
"service": "payment-service",
"traceId": "abc-123-def",
"message": "Payment failed",
"userId": 42,
"amount": 150.00,
"error": "Insufficient funds"
}
Araçlar: ELK Stack (Elasticsearch, Logstash, Kibana), Loki, Fluentd
Best Practices:
- Yapılandırılmış (JSON) log kullanın
- Trace ID ekleyin
- Log seviyelerini doğru kullanın (debug, info, warn, error)
- Hassas veriyi loglamayın
3. Traces (İzler)
Bir isteğin sistemi uçtan uca geçişini izler. Dağıtık sistemlerde kritiktir:
[İstemci] → [API Gateway] → [Sipariş Servisi] → [Ödeme Servisi]
│ │ │ │
├── 0ms ├── 5ms ├── 15ms ├── 45ms
└── 200ms └── 195ms └── 180ms └── 135ms
Araçlar: Jaeger, Zipkin, OpenTelemetry, Datadog APM
OpenTelemetry
Observability verilerini (metrics, logs, traces) toplamak için vendor-agnostic açık standart:
const { trace } = require('@opentelemetry/api');
const tracer = trace.getTracer('payment-service');
async function processPayment(orderId, amount) {
const span = tracer.startSpan('processPayment');
span.setAttribute('orderId', orderId);
span.setAttribute('amount', amount);
try {
const result = await chargeCard(amount);
span.setStatus({ code: SpanStatusCode.OK });
return result;
} catch (error) {
span.setStatus({ code: SpanStatusCode.ERROR, message: error.message });
throw error;
} finally {
span.end();
}
}
Observability Araçları
| Araç | Tür | Avantaj | |------|-----|---------| | Prometheus | Metrics | Açık kaynak, güçlü sorgulama | | Grafana | Visualization | Çoklu veri kaynağı | | Jaeger | Tracing | Dağıtık izleme | | ELK Stack | Logging | Tam metin arama | | Datadog | All-in-one | Entegre çözüm | | New Relic | All-in-one | APM odaklı |
Alerting Best Practices
- Sadece actionable alarmlar kurun
- "Alert fatigue" (alarm yorgunluğu) yaratmayın
- Severity seviyelerini doğru belirleyin (P1-P4)
- Runbook (çözüm kılavuzu) hazırlayın
- On-call rotasyonu uygulayın
Sonuç
Observability, modern dağıtık sistemlerde hata ayıklama ve performans optimizasyonunun anahtarıdır. Metrics ile sisteminizi izleyin, Logs ile olayları anlayın, Traces ile darboğazları bulun.
Observability ve DevOps pratiklerini LabLudus platformunda DevOps kariyer yolunda öğrenin.