Paylanmış izlər
Paylanmış izlər
1) Nə üçün və nədir
Paylanmış track bütün sorğu yolu boyunca əməliyyatları əlaqələndirmək üçün bir yoldur: ön → API-şluz → mikroservislər → DB/caches → brokerlər → joblar/payplaynlar.
Nəticə - span (span) trace (trace), burada hər span atributları, hadisələri və statusu olan komponentin işini qeyd edir. Bu RCA sürətləndirir, SLO saxlamağa kömək edir və MTTR-ni azaldır.
- Kritik yolun və «dar yerlərin» görünüşü.
- Səbəbləri (span) və detalları (logi) ilə simptomların (metriklərin) korrelyasiyası.
- Retras analitikası, növbələr, DLQ, fan-autlar, latentlik «mişarları».
2) Tracking data modeli
Trace - 'trace _ id' ilə zəng qrafiki.
Span — операция: `name`, `kind` (SERVER/CLIENT/PRODUCER/CONSUMER/INTERNAL), `start/end`, `status`, `attributes`, `events`, `links[]`.
Attributes - açar dəyəri (route, db. system, messaging. system, cloud. region və s.).
Events - span daxilində ani etiketlər (məsələn, 'retry', 'cache _ miss').
Span Links - «valideyn-uşaq» (batches, retrai, fan-in/out) xaricində əlaqələr.
Resource - proses/xidmət ('service. name ', versiya, mühit).
3) Kontekst və dözümlülük
3. 1 W3C Trace Context
Başlıqlar:- 'traceparent': 'version-traceid-spanid-flags' (bayraqlar sampling daxildir).
- 'tracestate': satıcı-spesifik vəziyyət (minimum).
- Baggage - biznes kontekstinin açarları (məhdud, PII/sirr olmadan).
3. 2 Kontekstin atılması
HTTP: `traceparent`/`tracestate`; gRPC: meta məlumat; WebSocket: yeniləmə və mesajlarda;
Mesajlar: headers-də (Kafka/NATS/RabbitMQ) - orijinal konteksti PRODUCER-də saxlayırıq və CONSUMER-də köçürürük.
Bazalar: kontekst daşımır - atributları spana daxil edirik (query, rows, db. system), lakin əhəmiyyəti yoxdur.
4) Sampling: necə iflas etməmək
Head sampling (girişdə): ehtimal/qaydalara görə (route, tenant, endpoint).
Tail sampling (kollektorda): «maraqlı» treysləri saxlayın - səhvlər, uzun p95/p99, nadir yollar.
Exemplars: histogram metrikləri xüsusi 'trace _ id' linklərini saxlayır.
Tövsiyə: birləşdirmək - baş 5-20% + tail qaydaları 100% üçün 5xx/timeout/p99.
5) Atributlar və taksonomiya (minimum məcburi)
Ümumi:- `service. name`, `service. version`, `deployment. environment`, `cloud. region`, `http. route`, `http. method`, `http. status_code`, `db. system`, `db. statement '(qısaldılmış/məlumatsız),' messaging. system`, `messaging. operation`, `peer. service`, `net. peer. name`, `tenant. id`, `request. id`.
Biznes etiketləri: diqqətlə, PII olmadan. Nümunə: 'order. segment`, `plan. tier`.
6) Asinxron ssenarilər, növbələr və batçlar
PRODUCER → CONSUMER: kontekstlə span PRODUCER yaratmaq; mesajda - headers (traceparent, baggage). CONSUMER SERVER/CONSUMER-span PRODUCER linkindən başlayır (ciddi iyerarxiya yoxdursa).
Fan-out: bir giriş - çox autputs → qız span və ya links.
Batch: CONSUMER N mesaj paketini oxuyur → hər messageId və ya N ayrı kontekstlərdə 'links' ilə bir span.
DLQ: ayrı span 'messaging. dlq. publish` с reason и count.
Retrailər: 'event: retry' + 'retry. count 'atribut; tercihen yeni CHILD-span cəhd.
7) Log və metriklər ilə inteqrasiya
JSON-u 'trace _ id '/' span _ id' → ilə yazırıq.
RED/USE metrləri exemplars → p99 zirvələrindən «pis» yuxulara gedirik.
Trass hadisələr vasitəsilə texniki siqnallar (asılılıq səhvləri) və biznes siqnalları (çevirmə) yaradır.
8) Performans və dəyəri
Sampling və trottling hadisələr.
Atributların kardinallığının azaldılması (heç bir 'user _ id '/' session _ id' label kimi!).
Ixracatçı tərəfindən sıxılma/batching; ixrac vaxtı sərhədləri.
Saxlama: isti 1-7 gün, sonra - aqreqatlar/yalnız «problemli» treys.
Xərcləmə kateqoriyaları: kollektorlar, indekslər, saxlama, egress.
9) Təhlükəsizlik və məxfilik
In Transit: TLS 1. 3/mTLS kollektor, agentlər; At Rest: şifrələmə, öz açarları (bax: «Şifrələmə In Transit/At Rest»).
PII və sirləri: atributlar/hadisələr yazmaq deyil; prodüserdə tokenizasiya/maskalama.
Çox icarə: 'tenant. id 'resurs-etiket və məkan izolyasiyası, oxu siyasəti kimi; İzlərə giriş auditi (bax: «Audit və dəyişməz jurnallar»).
10) Tətbiq sxemləri (referans)
10. 1 OpenTelemetry SDK (psevdokod)
python from opentelemetry import trace from opentelemetry. sdk. trace import TracerProvider from opentelemetry. sdk. resources import Resource from opentelemetry. sdk. trace. export import BatchSpanProcessor from opentelemetry. exporter. otlp. proto. grpc. trace_exporter import OTLPSpanExporter
provider = TracerProvider(resource=Resource. create({
"service. name":"checkout","service. version":"1. 12. 0","deployment. environment":"prod"
}))
provider. add_span_processor(BatchSpanProcessor(OTLPSpanExporter(endpoint="otel-collector:4317", insecure=True)))
trace. set_tracer_provider(provider)
tr = trace. get_tracer("checkout")
with tr. start_as_current_span("POST /pay", attributes={
"http. route":"/pay","http. method":"POST","tenant. id":"t-42"
}):
business logic, external API call and pass DB
10. 2 OTel Collector - tail sampling (fraqment)
yaml processors:
tailsampling:
decision_wait: 2s policies:
- type: status_code status_codes: [ERROR]
- type: latency threshold_ms: 900
- type: probabilistic sampling_percentage: 10 exporters:
otlphttp: { endpoint: http://trace-backend:4318 }
service:
pipelines:
traces:
receivers: [otlp]
processors: [batch, tailsampling]
exporters: [otlphttp]
10. 3 Kafka - kontekstin ötürülməsi (konsepsiya)
PRODUCER: headers 'traceparent', 'baggage' əlavə edin.
CONSUMER: mesaj yeni bir axın başlatırsa - yeni SERVER/CONSUMER-span c link kontekstində headers.
11) Data/ETL и ML
Batch payplayns üçün: batch/partition ilə 'dataset span. urn`, `run. id`, `rows. in/out`, `freshness. lag`.
ML üçün: məşq/inference, model versiyası, latency, feature store.
Lineage ilə əlaqə: 'run. id` и `dataset. urn 'trace-dən məlumatların mənşə qrafikinə keçməyə imkan verir.
12) SLO izləmə platforması
Accessibility ingestion: ≥ 99. 9%
Indeksləşdirməyə qədər gecikmə: p95 ilə ≤ 60
Head-sample əhatə: ≥ 5-10% əsas marşrutlar
100% ERROR statusu və latency ilə treyslərin saxlanması> «kritik yollar» kataloqu üzrə eşik
Platformanın alertləri: damarların böyüməsi, ixrac vaxtları, indeksator gecikməsi, kardinallığın həddindən artıq qızması.
13) Test və yoxlama
CI-də izləmə müqaviləsi: əsas end nöqtələrində spanların olması, məcburi atributlar, düzgün 'traceparent' şluz/proxy vasitəsilə uçur.
Synthetic/rum-testlər: xaricdən treys toplayın.
Chaos/insidentlər: asılılığın kəsilməsi, tail-samplerin səhvləri «seçdiyini» yoxlamaq.
Smoke prod: buraxıldıqdan sonra - «yuxu var» və exemplar → trace.
14) Çek vərəqləri
Məhsuldan əvvəl
- W3C Trace Context hər yerdə atılacaq; mesajlar üçün - headers.
- Əsas baş yığma daxildir; 5xx/p99 üçün tail qaydaları özelleştirilmiş.
- Məcburi atributlar: route, method, status, service. version, tenant. id.
- JSON qeydləri 'trace _ id '/' span _ id', exemplars ilə metriklər.
- PII dezinfeksiyaedicilər; yolda/dinc şifrələmə; giriş siyasəti.
- Daşbordlar: «kritik yol», «asılılıq səhvləri», «retrai/taymautlar».
Əməliyyat
- Atributların kardinallığının aylıq icmalı; kvotalar.
- SLO tail sampling sazlama (daha az səs-küy, bütün «isti» - nümunə).
- Keçid metrik → exemplar → trace → log ilə RCA təlim.
- Növbələr, DLQ, ETL-joblar üçün örtüklərin yoxlanılması.
15) Runbook’и
RCA : /pay üçün p99 artım
1. RED Dashboard açın; binadan p99 exemplar trace.
2. «Dar» CLIENT span (məsələn, 'gateway. call '), yoxlamaq' retry. count ', taymautlar.
3. Xidmət/asılılıq versiyalarını müqayisə edin, region/zona.
4. Deqradasiyanı aktivləşdirin (caching cavab/RPS limiti), asılılıq sahiblərini xəbərdar edin.
5. Fiksdən sonra - RCA və optimizasiya üçün biletlər.
DLQ sıçrayış
1. 'messaging. dlq. publish`.
2. Səbəbləri yoxlayın (events), reliz ilə əlaqələndirin.
3. reprocess başlamaq, müvəqqəti CONSUMER vaxtını artırmaq, downstream sahiblərinə bildirin.
16) Tez-tez səhvlər
Şluzlar/brokerlər vasitəsilə heç bir kontekst yoxdur. Həll: middleware/interceptors, vahid kitabxanalar.
Bütün treydlər 100%. Bahalı və mənasız - tail-sampling istifadə edin.
'trace _ id' olmadan qeydlər. Korrelyasiya itirilir → MTTR ↑.
Atributlarda PII. Maskalama/tokenizasiya; yalnız texniki konteksti saxlayın.
«Səssiz» fon jobları. batch/partition və 'run yuxu əlavə edin. id`.
Adın uyğunsuzluğu. Span adları və atribut açarları lüğətini daxil edin.
17) FAQ
S: Head və ya tail sampling daha yaxşıdır?
A: Kombinasiya. Baş əsas təbəqə verir, tail anomaliyaların/səhvlərin qorunmasına zəmanət verir.
S: Sərt iyerarxiya olmadan Kafka vasitəsilə necə izləmək olar?
A: PRODUCER və CONSUMER arasında span links istifadə edin; kontekst - headers.
S: Həssas SQL ilə nə etmək lazımdır?
O: 'db. statement 'qısaldılmış/normallaşdırılmış (heç bir dəyəri), və ya' db. operation '+ ölçüləri/vaxt.
S: Biznes metrləri ilə necə əlaqələndirmək olar?
A: PII (plan/segment) olmadan domen atributlarını əlavə edin, span daxilində «iş mərhələləri» hadisələrindən istifadə edin və exemplar konversiya metriklərindən keçin.
- «Müşahidə: loqlar, metriklər, izlər»
- «Audit və dəyişməz jurnallar»
- «Transit/At Rest şifrələmə»
- «Məlumatların mənşəyi (Lineage)»
- «Privacy by Design (GDPR)»
- «Sirlərin menecmenti»