observability · git:20260704.12791fe · 2026-07-04 · sha256 81ec0c74e989607b

observability git:20260704.12791feA

Immutable. This exact content is served forever at /api/v1/blob/81ec0c74e989607b.

---
name: observability
description: |
  Yığın-bağımsız gözlemlenebilirlik: yapılandırılmış log, korelasyon-id, metrik ve trace ekler;
  log'da PII/secret sızıntısını engeller. Üretim sorununu "neden oldu" diye izlenebilir kılar.
  Trigger phrases: "observability", "gözlemlenebilirlik", "yapılandırılmış log", "structured logging", "trace ekle", "metrik ekle", "korelasyon id", "log ekle"
---

# Gözlemlenebilirlik

Amaç: bir üretim olayında "ne oldu, nerede, neden" sorusunu **log'a bakarak** yanıtlayabilmek.
Yığın-bağımsızdır; framework'e özel kütüphane/format için gerektiğinde web araması yap.

## Üç sinyal
- **Log** — olay kaydı (yapılandırılmış/JSON, seviyeli).
- **Metrik** — sayısal zaman serisi (istek sayısı, gecikme, hata oranı, kaynak).
- **Trace** — bir isteğin servisler arası yolculuğu (span'ler + korelasyon-id).

## Kontrol listesi
- [ ] Log **yapılandırılmış** (JSON/anahtar-değer), string interpolation değil
- [ ] Her log satırında **korelasyon-id** (request/trace id) var
- [ ] Seviyeler doğru: DEBUG/INFO/WARN/ERROR ayrımı anlamlı
- [ ] **PII/secret loglanmıyor** (parola, token, kart, TC/kimlik, e-posta gövdesi)
- [ ] Hata log'u bağlam taşıyor (girdi özeti, kullanıcı/kaynak id — PII değil), stack trace kullanıcıya sızmaz
- [ ] Kritik iş metriği + altyapı metriği yayılıyor (varsa)
- [ ] Servisler arası çağrıda korelasyon-id **taşınıyor** (header/propagation)

## Nasıl
1. **Yapılandırılmış logger** kur/kullan — çıktı makine-okunur (JSON). Framework'ün önerdiği kütüphaneyi ara.
2. **Korelasyon-id**: girişte (HTTP middleware / mesaj tüketici) üret ya da gelen `X-Request-Id`/trace header'ından al; log context'ine koy; alt çağrılara **ilet**.
3. **Seviye disiplini**: INFO = iş olayı, WARN = beklenen-ama-dikkat, ERROR = müdahale gerek. DEBUG üretimde kapalı/örneklemeli.
4. **Bağlam alanları**: `event`, `correlation_id`, `user_id`(PII değil, opak id), `duration_ms`, `outcome`. Serbest metne gömme.
5. **Metrik**: en az RED (Rate, Errors, Duration) veya USE; iş-kritik sayaçlar. Framework metrik kütüphanesini ara.
6. **Trace** (dağıtık sistemde): span başlat/bitir, korelasyon-id'yi trace-id'ye bağla.

## PII / secret sızıntısı (kritik)
Log'a **asla**: parola, token, API anahtarı, kart no, TC/kimlik, tam e-posta/telefon gövdesi, ham istek gövdesi.
- Maskele: `user@***`, kart `**** 1234`, token `sk-p…789`.
- Gerekliyse **opak id** logla (hash/uuid), ham değeri değil.
- Bu eksen `security-scan` (loglarda hassas veri) ve `privacy-compliance` (KVKK/GDPR) ile örtüşür — kişisel veri varsa onları da tetikle.

## Değişmez kurallar
1. **Yapılandırılmış > serbest metin** — grep'lenebilir, ayrıştırılabilir.
2. **Korelasyon-id her satırda** — yoksa dağıtık hata izlenemez.
3. **PII/secret loglanmaz** — maskele veya opak id.
4. **Gürültü yapma** — her satır bir soruyu yanıtlamalı; anlamsız spam log ekleme.
5. **Mevcut format'a uy** — repoda logger varsa onun kalıbını sürdür, yenisini dayatma.