Observability и trace sampling
1) Niyə Observability
Observability (O11y) üç suala cavab verir: nə baş verir, niyə, necə düzəldilir. 4 siqnala əsaslanır:- Metriklər (aqreqatlar, tez reaksiya);
- Loqi (detallar və forensika);
- Treys (keçici səbəb-nəticə əlaqələri);
- Profillər (CPU/heap/lock contention prod rejimində).
Açar: siqnallar arasında korrelyasiya + telemetriya iqtisadiyyatı (sampling, retens, sıxılma).
2) Siqnallar xəritəsi və prinsipləri
2. 1 RED/USE
RED (API üçün): Rate (RPS), Errors (% 5xx/4xx vacib), Duration (p50/p95/p99).
USE (resurslar üçün): Utilization, Saturation, Errors (NIC, CPU, disk, növbələr).
2. 2 Məhsul invariantları
SLO (məsələn, «p95 gecikmə »/v1/payments '≤ 300 ms, səhv büdcə 0. 30 gün ərzində 5%"). Alertlər yalnız SLO pozulduqda və ya yandıqda «qışqırmalıdırlar».
2. 3 Kontekst
/ biznes atributlarının təhlükəsiz ötürülməsi üçün W3C Trace Context ('traceparent', 'tracestate') və baggage (məsələn, 'tenant', 'region', PII olmadan) tətbiq edin.
3) Müşahidə arxitekturası
SDK/avtoinstrumentation: OpenTelemetry (OTel) servislərdə (HTTP/gRPC/DB/müştərilər).
OTel Collector bir şin kimi: qəbul → zənginləşdirmə → nümunə → ixrac (Prometheus, Tempo/Jaeger, Loki/ELK, ClickHouse).
- Metrika: Prometheus/Mimir/VictoriaMetrics;
- Treys: Tempo/Jaeger/Zipkin;
- Loki/ELK/Vector → S3 + ucuz saxlama;
- Profillər: Pyroscope/Parca.
- Korrelyasiya: xidmət qrafikləri, exemplars, p99 qrafikindən konkret treysə keçid.
4) Treysinqin keçirilməsi: strategiyalar
4. 1 Head-based sampling (giriş, nəticə bilik qədər)
Sadə və ucuz satış (SDK/ingress).
Mənfi cəhətləri: nadir səhvləri/yavaş sorğuları qaçıra bilər.
Nə zaman: yüksək RPS, ciddi büdcələr, proqnozlaşdırıla bilən pay tələb olunur (məsələn, 1-5%).
4. 2 Tail-based sampling (nəticə bilərək çıxış)
Qərar span tamamlandıqdan sonra Collector-da qəbul edilir.
Anomaliyalar: səhvlər, p99, xüsusi marşrutlar/tenantlar seçilə bilər.
Mənfi cəhətləri: bufer, daha çətin və daha bahalı.
Nə zaman: mülayim qiymətə «əhəmiyyətli» treydlər lazımdır.
4. 3 Kombinə edilmiş model
Qlobal baş 1-5%, plus tail qaydaları: «həmişə səhvləri saxlamaq/slow-span», «canary-trafikin 50% sample», «hadisə zamanı bütün ödəniş yollarını saxlamaq».
5) Dinamik sempleme və telemetriya büdcəsi
Budget-aware: həcmi saxlamaq ≤ N treys/dəq; aşdıqda - həddi qaldırın (məsələn, yalnız p99 seçin. 5+, error-only).
Rules by route/tenant: mühüm end nöqtələri/tenantlar - daha çox payla.
Adaptiv pəncərələr: patlamalar → səhvlərin payını müvəqqəti artırmaq/yavaş.
Kardinallığın azaldılması: user-agent, IP/ASN, squash stack traces normallaşdırın, sirləri maskalayın.
6) Konfiqilər (referanslar)
6. 1 OpenTelemetry Collector - tail-sampling (yaml-fraqment)
yaml receivers:
otlp: { protocols: { http: {}, grpc: {} } }
processors:
batch: { send_batch_size: 8192, timeout: 2s }
tail_sampling:
decision_wait: 5s num_traces: 100000 expected_new_traces_per_sec: 5000 policies:
- name: always-error type: status_code status_code: { status_codes: [ERROR] }
- name: slow-endpoints type: latency latency: { threshold_ms: 300 } # p95 цель
- name: important-routes type: string_attribute string_attribute: { key: http. target, values: ["/v1/payments", "/v1/payouts"] }
- name: tenant-eu1 type: string_attribute string_attribute: { key: tenant, values: ["eu-1"] }
- name: probabilistic-default type: probabilistic probabilistic: { sampling_percentage: 5. 0 }
exporters:
otlphttp/tempo: { endpoint: http://tempo:4318 }
prometheus: { endpoint: "0. 0. 0. 0:9464" }
service:
pipelines:
traces:
receivers: [otlp]
processors: [batch, tail_sampling]
exporters: [otlphttp/tempo]
6. 2 Prometheus - exemplars (fraqment)
Proqramda histoqramları yazarkən 'trace _ id' ilə exemplars əlavə edin. Grafana-da «iynə» klikləri treysə aparır.
yaml scrape_configs:
- job_name: api scrape_interval: 10s honor_labels: true static_configs: [{ targets: ["api:9100"] }]
exemplar_limit: 10
6. 3 Loki - Loki dəyərinin azaldılması
Etiketlər yalnız sabitdir ('service', 'env', 'region', 'route _ class').
Yüksək kardinallıq (request_id, user_id) - payload, lakin redaction ilə.
«Uğurlu» məlumat qeydlərini sample edin, bütün səhvləri/xəbərdarlıqları saxlayın.
6. 4 Jaeger/Tempo - retenshn və indeks
Xam treysləri 3-7 gün, aqreqatları/simmetriyaları daha uzun saxlayın.
Parquet/blocks-i ucuz saxlama (S3 uyğun), indeksləri kompakt saxlayın.
7) Treysinqin modelləşdirilməsi
7. 1 Adları və atributları
`service. name`, `service. version`, `deployment. environment`.
`http. method`, `http. route`, `http. target`, `http. status_code`, `net. peer. name`.
PII olmadan biznes atributları: 'tenant', 'region', 'payment _ provider', 'game _ id'.
7. 2 Hadisələr və əlaqələr
Span events: mühüm nöqtələr (əməliyyat DB başlanğıcı, retray, circuit open, cache miss).
Links: əlaqə sorğu → webhook/hadisə; EDA və outbox/inbox üçün faydalıdır.
7. 3 nüsxələr (exemplars)
latency/size histoqramlarına 'trace _ id' ilə nümunələr əlavə edin: bir kliklə «metrikadan → trace-ə» naviqasiya.
8) Metrika: hansı və necə
8. 1 Texniki
RED marşrutlar/tenantlar/provayderlər (PSP, KYC).
Пулы: `db_connections_in_use`, `http_client_in_flight`, `queue_depth`.
Stabilizasiya: retries, timeouts, circuit open/half-open, rate-limit hits.
Go/Java/Python runtime: GC fasilələr, heap, safepoints, GIL gecikmələr.
8. 2 Biznes metrikası
Qeydiyyat/giriş/depozitlər/nəticələr, dönüşüm, 3DS/KYC uğursuzluqları, chargeback-ratio.
Mühüm fiqurlar: time-to-wallet, success-rate payout.
8. 3 Kardinallıq və saxlama
açıq buckets ilə histoqramlar (məsələn, '50,100,200,300,500,1000,2000] ms').
Yüksək kardinallığı olan etiketlərdən qaçın (raw user_id, request_id) - Logs/Traces-ə aparın.
9) Loqi: standartlar və korrelyasiya
Format: JSON + zəruri açarlar ('timestamp', 'level', 'message', 'trace _ id', 'span _ id', 'service', 'env').
Redaktə: PAN, tokenlər, PII maskalamaq.
Sampling: 'error/warn' üçün 100%, 'info' üçün 5-20% «səs-küylü» yollarda.
Trails - 'trace _ id' vasitəsilə. Log-line → «pivot» trace və əksinə.
10) Prod Profilinq
CPU/heap/alloc/locks üçün continuous profiling (Pyroscope/Parca) daxil edin.
p99 zirvələrini isti yığınlarla əlaqələndirin; 7-14 gün saxlayın.
11) SLO/səhv büdcə ilə alertinq
SLO-alertlər: «Səhv büdcə X %/saatdan daha sürətli xərclənir» (proqnozlaşdıran alertlər).
Simptomlar, səbəb deyil: CPU-da deyil, müştəri səviyyəsinə (RUM/edge və ya per-rout) alertit.
Multi-window, multi-burn rate: 1 saat üçün 2% və 6 saat üçün 5% - iki şərt.
Planlı deqradasiya zamanı sükut: fiç bayraqları/kanareyka zamanı eşiklərin yerdəyişməsi.
12) Qiymət və retrenşn
Həcm kvotaları: treys ≤ N TB/ay, loi - isti 3-7 gün, soyuq S3 30-90 gün, metrik - downsampling (1 dəq → 5 dəq → 1 saat).
Tail-rules səhv/yavaş saxlayaraq 10- × 100 × həcmini azaldır.
Ən aşağı dəyəri olan siqnallar - metrika; ən yüksək dəyəri ilə - «düzgün» treys və profillər.
13) Antipattern
«100% Trades həmişə» → partlayış dəyəri, səs-küy və əyləc.
Anahtarsız/maskasız pulsuz format qeydləri.
Sonsuz etiketli metriklər (user_id/ip/full UA).
No 'traceparent '/' baggage' - korelasiya mümkün deyil.
SLO əvəzinə CPU/heap-da alertlər - chat faydasız «yanır».
Səhv/slow prioriteti olmadan «1% rand» ilə sample - dəyərli halları itirin.
14) Daşbordların nümunələri (skeletlər)
API Overview: RPS, siniflər üzrə error-rate, latency p95/p99 (exemplars clickable), top routes.
Release/Canary: köhnə/yeni versiyası metrik müqayisə, outlier-rate, open-circuits, retries.
PSP/KYC: provayderlərə success-rate, latency və reduction, payout-səhvləri ilə korrelyasiya.
Infra: resurslar üzrə USE, saturation növbələri, network drops.
15) iGaming/Maliyyə Xüsusiyyətləri
Kritik yollar (depozitlər/nəticələr): 100% yalnız hadisələr və ya məhdud pəncərələrdə treysinq; normal rejimdə - tail «hər şey səhv/uzun gecikmə ilə».
Region/tenant: baggage-ə 'tenant', 'jurisdiction', 'brand' əlavə edin; yurisdiksiyasına görə SLO qurun.
Antifrod/bot-filter: Risk API (allow/deny/challenge), challenge-pass-rate, velocity-hits metrik və treys həlləri.
Audit/komplayens: PII olmadan minimum zəruri saxlamaq; dəyişməz jurnallar - ayrı konturda.
16) Prod hazırlıq yoxlama siyahısı
- Keçici təbliğat ('traceparent', 'baggage'), qeydlərin/metriklərin/treyslərin korrelyasiyası.
- Tail-sampling (errors/slow/mühüm routes) + probabilistic default ilə OTel Collector.
- RED/USE metrik, açıq buckets, exemplars → Trace keçid.
- SLO və səhv büdcə ilə alertinq (iki vaxt miqyası).
- Retensiya qaydaları və telemetriya büdcəsi; downsampling metrik; cold storage.
- Standartlaşdırılmış JSON log, redaction PII/sirləri.
- Profil daxil; hadisə üçün «isti» stek dashboard.
- Kanarya daşbordları və versiyaların müqayisəsi; «kor zonalar» olmadan buraxılış.
- Runbook: hadisə zamanı müvəqqəti nümunə payını artırmaq üçün necə.
- Neyminq atributları/etiketlərin sənədləşdirilməsi və high-cardinality qadağası.
17) TL; DR
Korrelyasiya ətrafında müşahidə qurun: RED/USE → exemplars → treys → log/profillər metrikası. Xərcləri birləşdirilmiş nümunə ilə idarə edin: kiçik baş% + tail qaydaları (səhvlər, yavaş, vacib marşrutlar/tenantlar). Alertlər - SLO və səhv büdcəsinə görə. Retansiyanı və kardinallığı nəzarət altında saxlayın, «mərkəzi sinir sistemi» kimi OTel Collector istifadə edin. Ödəniş/yurisdiksiya yolları üçün - prioritet telemetriya və ciddi məlumat gigiyenası.