Gözlemlenebilirlik: günlükler, metrikler, izler
Gözlemlenebilirlik: günlükler, metrikler, izler
1) Neden ihtiyacınız var
Gözlemlenebilirlik - Bir sistemin durumu hakkında planlanmamış soruları cevaplama yeteneği. Üç ana sinyale dayanır:- Metrikler, SLI/SLO ve semptom uyarısı için kompakt agregalardır.
- İzler - uçtan uca sorgu zincirleri.
- Günlükler - soruşturma ve denetimler için ayrıntılı olaylar.
Amaç: Hızlı RCA, önleyici uyarılar ve bir hata bütçesi içinde yönetilen güvenilirlik.
2) Mimarlık ilkeleri
Tek bağlam: attığımız her yerde 'trace _ id', 'span _ id', 'tenant _ id', 'request _ id', 'user _ agent', 'client _ ip _ hash'.
Standartlar: SDK/aracılar için OpenTelemetry (OTel), JSON log formatı (kanonik, şema ile).
Semptomlar> nedenler: CPU tarafından değil, kullanıcı semptomlarına göre uyarı (gecikme/hatalar).
Sinyal iletişimi: "trace _ id'tarafından belirli günlüklere" örneklemelere "" metrikten ".
Güvenlik ve gizlilik: Günlüklerde PII maskeleme, transit/dinlenme sırasında şifreleme, değişmez denetim günlükleri.
Çoklu kiracılık: ad alanlarının/anahtarların/politikaların ayrılması.
3) Sinyal taksonomisi ve şemaları
3. 1 Metrikler
Hizmetler için RED (Rate, Errors, Duration) ve altyapı için USE (Utilization, Saturation, Errors).
Типы: sayaç, ölçü, histogram/özet. Gecikme için, sabit kovalarla histogram.
Exemplars: "sıcak" histogram kutularındaki 'trace _ id'e referans.
name: http_server_duration_seconds labels: {service, route, method, code, tenant}
type: histogram buckets: [0. 01, 0. 025, 0. 05, 0. 1, 0. 25, 0. 5, 1, 2, 5]
exemplar: trace_id
3. 2 İzler
Span = 'name', 'start/end', 'attributes', 'events', 'status'ile işlem.
Tolere edilebilirlik için W3C İzleme Bağlamı.
Örnekleme: temel (kafa) + dinamik (kuyruk) + "önem" kuralları (hatalar, yüksek p95).
3. 3 Günlükleri
Sadece yapılandırılmış JSON; düzeyler: HATA AYıKLAMA/BİLGİ/UYARI/HATA.
Gerekli alanlar 'ts _ utc', 'level', 'message', 'trace _ id', 'span _ id', 'tenant _ id', 'env', 'service', 'region','host ',' labels {} '.
Yasak: sırlar, belirteçler, PAN, şifreler. PII - yalnızca tokenize/maskelenmiş.
json
{"ts":"2025-10-31T12:05:42. 123Z","level":"ERROR","service":"checkout","env":"prod",
"trace_id":"c03c...","span_id":"9ab1...","tenant_id":"t-42","route":"/pay",
"code":502,"msg":"payment gateway timeout","retry":true}
4) Toplama ve taşıma
Agent/exporters (daemonset/sidecar) - veri yolu/giriş düğümü (TLS/mTLS) üzerinde bir tampon - sinyal deposu.
Gereksinimler: Geri basınç, geri alma, veri tekilleştirme, kardinalite kısıtlaması (etiketler!), "Günlük fırtınalarına" karşı koruma.
Metrikler: OTLP ile çekme (Prometheus uyumlu) veya itme.
İzler: OTLP/HTTP (gRPC), toplayıcıdaki kuyruk örnekleyicileri.
Günlükler: yerel koleksiyon (dergi/docker/stdout) - ayrıştırıcı - normalleştirici.
5) Depolama ve saklama (katmanlı)
Metrikler: Sıcak TSDB 7-30 gün (alt örnekle), daha uzun bir süre için toplanır (90-365 gün).
İzler: 1-7 gün tam, daha sonra "önemli" hizmetlerin toplamları/aralıkları; dizinleri 'hizmet', 'durum', 'hata' üzerinde saklayın.
Günlükler: sıcak indeks 7-14 gün, sıcak 3-6 ay, 1-7 yıla kadar arşiv (uyumluluk). Denetim - WORM.
Maliyet optimizasyonu: altörnekleme, satışlarda DEBUG filtreleme, etiket kotaları, parçalar için örnekleme.
6) SLI/SLO, uyarı ve görev
SLI: kullanılabilirlik (% başarılı istekler), gecikme süresi (p95/p99), 5xx paylaşımı, veri tazeliği, başarılı işlerin paylaşımı.
SLO: SLI'da hedef (örn. 99. %9 başarılı ≤ 400 ms).
Hata bütçesi: 0. 1 % "hata payı" - kurgu/deney kuralları.
- 'ALERT HighLatency' если 'p99 (http_server_duration_seconds{route="/pay"})> 1s' 5мин.
- 'ALERT ErrorRate' если 'rate (http_requests_total{code=~"5.."}[5m] )/rate (http_requests_total[5m])> 0. 02`.
- Silo uyarıları (CPU/Disk) - yalnızca yardımcı olarak, çağrı yapmadan.
7) Sinyal korelasyonu
Metrik "kırmızı'dır - örneğe tıklayın - belirli bir 'trace _ id' -" yavaş "yayılma alanına bakın - günlükleri aynı 'trace _ id'ile açın.
Sürümlerle korelasyon: 'version','image _ sha ',' feature _ flag 'nitelikleri.
Veri/ETL için: 'dataset _ urn', 'run _ id', linke bağlantı (ilgili makaleye bakın).
8) Örnekleme ve kardinalite
Metrikler: etiketleri kısıtlayın ('user _ id', 'session _ id' olmadan); kayıt sırasında kota/geçerlilik.
İzler: Kafa örneğini (girişte) ve kuyruk örneğini (toplayıcıda) kurallarla birleştirin: "5xx, p99, hatalar - %100 olan her şey".
Günlükleri: seviyeleri ve kısma; Sık tekrarlanan hatalar için - olayları toplama (tekilleştirme anahtarı).
yaml processors:
tailsampling:
decision_wait: 2s policies:
- type: status_code status_code: ERROR rate_allocation: 1. 0
- type: latency threshold_ms: 900 rate_allocation: 1. 0
- type: probabilistic hash_seed: 42 sampling_percentage: 10
9) Güvenlik ve gizlilik
Transit/At Rest: şifreleme (TLS 1. 3, AEAD, KMS/HSM).
PII/sırlar: sevkiyat, tokenizasyon, maskeleme öncesi dezenfektanlar.
Erişim: ABAC/RBAC okumak için; Üreticilerin/okuyucuların/yöneticilerin rollerinin ayrılması.
Denetim: Günlüklere/izlere erişimin değişmeyen günlüğü; dışa aktarma - şifreli biçimde.
Çoklu kiracılık: politikalarla ad alanları/kiracı etiketleri; Şifreleme anahtarı yalıtımı.
10) Yapılandırma profilleri (parçalar)
Prometheus (HTTP metrikleri + uyarı):yaml global: { scrape_interval: 15s, evaluation_interval: 30s }
scrape_configs:
- job_name: 'app'
static_configs: [{ targets: ['app-1:8080','app-2:8080'] }]
rule_files: ['slo. rules. yaml']
Slo. Kurallar. Yaml (örnek KIRMIZI):
yaml groups:
- name: http_slo rules:
- record: job:http_request_duration_seconds:p99 expr: histogram_quantile(0. 99, sum(rate(http_server_duration_seconds_bucket[5m])) by (le,route))
- alert: HighLatencyP99 expr: job:http_request_duration_seconds:p99{route="/pay"} > 1 for: 5m
OpenTelemetry SDK (sözde kod):
python provider = TracerProvider(resource=Resource. create({"service. name":"checkout","service. version":"1. 8. 3"}))
provider. add_span_processor(BatchSpanProcessor(OTLPExporter(endpoint="otel-collector:4317")))
set_tracer_provider(provider)
with tracer. start_as_current_span("pay", attributes={"route":"/pay","tenant":"t-42"}):
business logic pass
Uygulama günlükleri (stdout JSON):
python log. info("gw_timeout", extra={"route":"/pay","code":502,"trace_id":get_trace_id()})
11) Veri/ETL ve akış
Veri için SLI: tazelik (maksimum gecikme), eksiksizlik (sıra vs beklenti), "kalite" (doğrulayıcılar/kopyalar).
Uyarılar: pencere atlama, tüketici gecikmesi, DLQ büyümesi.
Korelasyon: 'run _ id', 'dataset _ urn', soy olayları; Boru hatları için izler (parti/bölüm başına yayılma alanı).
Kafka/NATS: üretici/tüketici ölçütleri, gecikme/başarısızlık; Başlıklara göre izler ('traceparent' dahil).
12) Profilleme ve eBPF (ek sinyal)
Düşük seviyeli sıcak yollar CPU/alloc/IO; olay başına profiller.
'Trace _ id'/PID'ye bağlı eBPF telemetrisi (ağ gecikmeleri, DNS, sistem çağrıları).
13) Gözlemlenebilirlik testi
Sinyal Sözleşmesi - Metriklerin/etiketlerin/histogramların CI'ya aktarılmasını kontrol eder.
Sentetik problar: Harici SLI'ler için RUM senaryoları/simüle edilmiş istemciler.
Kaos/Yangın tatbikatları: bağımlılıkları devre dışı bırakma, bozulma - uyarıların ve görevlilerin nasıl tepki verdiğine bakarız.
Prod'da Duman: Dağıtım Sonrası, yeni uç noktaların metrikleri ve izleri olup olmadığını kontrol edin.
14) Maliyet ve hacim kontrolü
Sinyal/komut ile bütçeler; Gösterge tablosu "sinyal başına maliyet".
Bütçe altındaki kardinalite (kardinalite için SLO), yeni etiketlerdeki sınırlar.
Denetim için altörnekleme, veri sınıfı sunumları, soğuk arşivler ve WORM.
15) Gözlemlenebilirlik platformunun çalışması ve SLO'su
Platform SLO: 99. Başarılı alımların %9'u; Metrik indekste gecikme ≤ 30 s, günlükler ≤ 2 dakika, izler ≤ 1 dakika.
Platform uyarıları: enjeksiyon gecikmesi, düşme büyümesi, imza/şifreleme hatası, arabellek taşması.
DR/HA: çoklu alan, çoğaltma, yapılandırma/kural yedeklemeleri.
16) Kontrol listeleri
Satmadan önce:- Her yerde 'trace _ id'/' span _ id' atılır; JSON bir diyagramla kayıt yapar.
- RED/USE metrikleri histogramlarla; Örnek - hizalama.
- Kuyruk örneklemesi etkin; 5xx/p99 kuralları = %100.
- Belirtilere göre uyarılar + Runybooks; Sessiz saatler/anti-flep.
- PII dezenfektanları; Denetim için durgun/transit WORM'de şifreleme.
- Retentions ve hacimler/kardinalite için bütçeler.
- Aylık uyarı incelemesi (gürültü/doğruluk), ayar eşikleri.
- Hata bütçe raporu ve alınan eylemler (fichfreeze, sertleştirme).
- Kritik yollar için gösterge tablosu/günlük/iz kaplamalarının kontrolü.
- Eğitim olayları ve runbook güncellemeleri.
17) Runbook'и
RCA: p99/maaş zammı
1. 'Checkout' için RED panosunu açın.
2. Exemplar'a git - yavaş bir parça -'dar bir alan "ortaya çıkar (örn. 'Gateway. Çağrı ').
3. Günlükleri 'trace _ id' ile açın - zaman aşımlarını/geri yüklemeleri görüntüleyin.
4. Geri alma özelliğini/RPS sınırını etkinleştirin, bağımlılık sahiplerini bilgilendirin.
5. Stabilizasyondan sonra - RCA, optimizasyon biletleri, oynatma testi.
1. SLI "tazelik" kırmızı - pist işi - başarısız saha.
2. Broker/DLQ günlüğünü, konektör hatalarını kontrol edin.
3. Yeniden işleme başlayın, tüketicileri (BI/ürün) durum kanalıyla bilgilendirin.
18) Sık yapılan hatalar
Şemasız ve 'trace _ id' olmadan günlükler. Soruşturmalar zaman zaman erteleniyor.
Belirtiler yerine altyapı ile ilgili uyarılar. Çağrı "süt içine" gider.
Metriklerin sınırsız kardinalitesi. Maliyet patlaması ve istikrarsızlık.
Tüm parçalar %100. Pahalı ve gereksiz; Akıllı örneklemeyi etkinleştirin.
PII/günlüklerdeki sırlar. Sterilizatörler ve kırmızı listeler ekleyin.
"Sessize Alma" özellikleri. Metrikler/izler/günlükler olmadan yeni kod.
19) SSS
S: Günlüklerin ham metnini saklamam gerekiyor mu?
C: Evet, ancak saklama ve arşivlerle; Uyarılar ve SLO'lar için, toplamlar yeterlidir. Denetim - WORM'de.
S: Parçalar için ne seçilir - kafa veya kuyruk örneklemesi?
A: Birleştirmek: basecoat için baş-olasılık + hatalar ve anomaliler için kuyruk kuralları.
S: Kullanıcı metriklerini ve teknik metrikleri nasıl bağlayabilirim?
C: Genel 'trace _ id've iş etiketleri (' rota ',' kiracı ',' plan ') ve ayrıca parçalarla korelasyon gösteren ürün etkinlikleri (dönüşümler) aracılığıyla.
S: Alarmlarda boğulmamak nasıl?
C: Belirtileri yendi, sessiz saatler, veri tekilleştirme, gruplama, SLO önceliklendirme ve uyarı başına varsayılan olarak sahip girin.
- "Denetim ve değişmez günlükler"
- "Transit/Dinlenme Şifrelemesinde"
- "Gizli yönetim"
- "Veri Kökeni (Lineage)"
- "Tasarıma Göre Gizlilik (GDPR)"
- "Webhook teslimat garantisi"