Dağıtılmış izleme
(Bölüm: Teknoloji ve Altyapı)
Kısa Özet
Dağıtılmış izler, ağ geçidi, API, kuyruklar, veritabanları, harici sağlayıcılar (PSP/oyun stüdyoları) aracılığıyla istek yolu boyunca zamanın nerede ve neden kaybolduğu sorusuna bir cevap sağlar. OpenTelemetry (OTel), izleri, metrikleri ve günlükleri birleştiren açık bir SDK/ajan/protokol standardıdır. IGaming'de, p95/p99'u korumak, ödeme sorunlarını hızlı bir şekilde yerelleştirmek ve en yoğun turnuvalardan önce darboğazları belirlemek için temel bir araçtır.
1) OTel kavramları
Trace - operasyonun tam yolu (depozito, oran, para çekme).
Span - çalışma alanı (HTTP işleyicisi, SQL isteği, kuyruk/sağlayıcı çağrısı).
Nitelikler - ayrıntılar içeren değer anahtarı ('net. akran. Name ',' db. Sistem ',' psp. Rota ').
Olaylar - anlık olaylar (geri çekilme, zaman aşımı, önbellek özledim).
Bağlantılar - diğer izlere bağlantı (async/queue için önemli).
Kaynak - süreç meta verileri: 'hizmeti. İsim ',' hizmeti. Sürüm ',' dağıtım. Çevre ',' bulut. Bölge '.
2) Bağlam yayılımı
W3C İzleme Bağlamını Kullanın:
traceparent: 00-<trace_id>-<span_id>-01 tracestate:...
Ek olarak - güvenli anahtarlar için bagajlar (örneğin, 'kiracı', 'rota'), PII'yi oraya koymayın.
Bağlamı delmek için nerede: API ağ geçidi - dahili RPC'ler - sıraya almak için üretici - tüketici - harici HTTP (PSP/sağlayıcılar).
3) Semantik sözleşmeler (zorunlu minimum)
HTTP/RPC: 'http. Yöntem ',' http. Rota ',' http. status_code'.
DB/önbellek: 'db. Sistem '(' mysql'/' postgresql'/' redis '),' db. '(maskeli),' db. Operasyon '.
Kuyruklar: 'mesajlaşma. Sistem '(' kafka'/' rabbitmq '),' mesajlaşma. Hedef ',' mesajlaşma. '(' send'/' process ') işlemi.
Ödemeler: 'psp. route ',' psp. Sağlayıcı ',' ödeme. id '(takma ad),' miktar ',' para birimi '.
iGaming alan adı: 'oyun. sağlayıcı ',' oyunu. session_id' (hash), 'oyuncu. id_hash'.
Tek bir taksonomi - gösterge tablolarının karşılaştırılabilirliği ve nedenlerin hızlı bir şekilde araştırılması.
4) Örnekleme: Verilerde boğulmamak
Kafa tabanlı
Basit, ucuz; Genel akış için uygundur.
Eksi - "ilginç" yavaş/hatalı parçaları kaybedebilirsiniz.
Kuyruk tabanlı (в Toplayıcı)
Karar, sürelerin bitiminden sonra verilir: yalnızca hataları/yavaş/önemli segmentleri (VIP/ödemeler) kaydediyoruz.
Üretim yükü için ideal: yüksek bilgi içeriği ile maliyeti büyük ölçüde azaltır.
- Kafa: "Arka plan" kapsamı için %5-10.
- Kuyruk: %100 hata + p95 + yavaş + ödeme parçaları/kanarya bültenleri.
5) OpenTelemetri Toplayıcı topolojileri
Agent-sidecar (her düğümde/bölmede): yerel kabul, minimum arabellek, toplayıcıya dışa aktarma.
Ağ Geçidi (küme): kuyruk örnekleme, yönlendirme, zenginleştirme, Tempo/Jaeger/Zipkin/OTLP'ye dışa aktarma.
Örnek: kuyruk örnekleme (YAML parçası)
yaml processors:
tailsampling:
decision_wait: 5s policies:
- name: errors type: status_code status_code:
status_codes: [ ERROR ]
- name: slow_p95 type: latency latency:
threshold_ms: 250
- name: payments type: string_attribute string_attribute:
key: service. name values: [ "payments-api", "payments-worker" ]
6) Metrikler ve günlüklerle korelasyon
Her günlük girişine 'trace _ id'/' span _ id' ekleyin.
Gecikme metriklerini histogram olarak saklayın ve örnekler ekleyin - p95-boket'ten belirli bir ize "atlama" için temsili 'trace _ id' referansı.
Yayın ek açıklamaları (Git SHA, grafik sürümü) - olaylar/etiketler gibi.
7) Enstrümantasyon (diller ve otomatik ajanlar)
Git (manuel + otomatik)
go tp:= sdktrace. NewTracerProvider(
sdktrace. WithBatcher(exporter),
sdktrace. WithResource(resource. NewWithAttributes(
semconv. SchemaURL,
semconv. ServiceName("payments-api"),
)),
)
otel. SetTracerProvider(tp)
ctx, span:= tracer. Start(ctx, "Deposit")
defer span. End()
span. SetAttributes(
attribute. String("psp. route","pspX"),
attribute. String("currency","EUR"),
)
Java
Otomatik ajan '-javaagent: opentelemetri-javaagent. Jar ', config via env (' OTEL _ SERVICE _ NAME ',' OTEL _ EXPORTER _ OTLP _ ENDPOINT ').
Manuel - soğan yerlerinin ek açıklamaları/aracı (JDBC havuzları, önbellek).
Düğüm. js/Python
SDK + eklentileri ile otomatik araç (Express/FastAPI/kereviz).
Kuyruklar için - 'mesajlaşma koymak için üretici/tüketici sarmalayıcılar. 've bağlantılar.
8) Kuyruklar ve async: doğru açıklıklar
Producer ('send'): konuya/kuyruğa gönderilecek span.
Tüketici ('süreç'): bağlantıdan üretici aralığına kadar yeni mesaj işleme alanı (ortak 'trace _ id' olmadan nedensel ilişkiyi kaydedin).
Nitelikler: 'mesajlaşma. Kafka. Bölme ',' mesajı. rabbitmq. routing_key', 'mesajlaşma. message_id'.
Retrays ile - olay 'yeniden deneme', deneme sayacı.
9) DB/Önbellek ve N + 1
Veritabanı sürücüsü izlemeyi etkinleştirin, aynı türdeki grup sorgularını gruplar halinde yapın.
Redis/cache için nitelikler 'cache'dir. '/' önbelleğine bas. Bayan.
Açıklıkları ayırmak için'ağır "istekleri çıkarın - p99'un nerede olduğunu görebilirsiniz.
10) Harici sağlayıcılar: PSP/oyun stüdyoları
HTTP istemcilerini sarın: 'psp. Sağlayıcı ',' psp. route ',' timeout _ ms ',' trease '.
Günlük hata kodları/türleri, ancak PII (kart numarası, belirteçler) değil.
Stüdyoları/rotaları 'süre', 'hata oranı'ile karşılaştırın.
11) Frontend ve RUM
OTel Web SDK: 'page _ view', 'resource _ load', 'xhr'.
Pierce 'traceparent' UI üzerinden kullanıcının yolunu dikmek için arka uç içine? API? Veritabanı.
Coğrafi/ağ sağlayıcılarına göre segmentasyon - isteğe bağlı etiketler.
12) Güvenlik ve PII
Alanları maskele ('db. statement 'edited), hash' player _ id '.
Veri bölgeleri: 'pii = true', 'region = EU/TR/LATAM'.
Ödeme parçalarına erişim kontrolü (rol tabanlı).
WORM/Retention: Hassas izler için saklama süreleri, politika ile silme.
13) Performans ve maliyet
Politikaya göre kuyruk örneklemesi: "hatalar + yavaş + ödemeler + kanarya sürümleri".
Metriklerin histogramlarını altörnekleme, agresif günlük tekilleştirme.
Kardinalite kısıtlaması: Metrik etiket olarak 'user _ id' yazmayın.
Toplayıcıdaki tamponlar/partiler, OTLP sıkıştırması.
14) Panolar ve analiz
Servis haritası: servis bağımlılıkları, hata/gecikme rengi.
Sürüm karşılaştırması: kararlı ve kanarya revizyonu (p95, hata oranı, ödemeler conv).
Üst yavaş izler: rota boyunca'/mevduat ', PSP/bölge boyunca bölüm.
Kuyruk gecikmesi: Derin tüketim gecikme parçaları.
15) Toplayıcı konfigürasyonlarına örnekler
Boru hatları (metrikler/yollar/günlükler, parça)
yaml receivers:
otlp: { protocols: { http: {}, grpc: {} } }
processors:
batch:
memory_limiter:
limit_mib: 1024 spike_limit_mib: 256 attributes/payments:
actions:
- key: "psp. provider"
action: insert value: "pspX"
exporters:
otlp/traces: { endpoint: tempo:4317, tls: { insecure: true } }
otlp/metrics:{ endpoint: prometheus-otlp:4317, tls: { insecure: true } }
otlp/logs: { endpoint: loki-otlp:4317, tls: { insecure: true } }
service:
pipelines:
traces:
receivers: [ otlp ]
processors: [ memory_limiter, batch, tailsampling ]
exporters: [ otlp/traces ]
metrics:
receivers: [ otlp ]
processors: [ batch ]
exporters: [ otlp/metrics ]
logs:
receivers: [ otlp ]
processors: [ batch ]
exporters: [ otlp/logs ]
16) Runbooks (tipik senaryolar)
A) 'ödemeler-api'de p99 büyümesi
1. "Top slow traces'i açın - veritabanı/PSP alanlarına girin.
2. PSP sorunu rotayı çevirmekse, geri çekilmeleri/zaman aşımlarını etkinleştirin.
3. Kuyruk 'withdrawals' (lag) kontrol edin, tüketicileri artırın.
B) Yayın sonrası 5xx hataları
1. 'Servise göre filtrele. Versiyon '.
2. Kararlı/kanarya karşılaştırın; 'psp'deki sivri uçları bul. Rota '.
3. Promosyonu dondurun, geri alın (bkz. Yayın Stratejileri/Geri Dönüşler).
C) Şüpheli N + 1
1. Çok sayıda kısa DB açıklığına sahip yollar.
2. Toplama/joyns özelliğini etkinleştirin, önbellek katmanı ekleyin.
17) Uygulama kontrol listesi
1. OTel SDK ve tekdüze Kaynak niteliklerini etkinleştir ('hizmeti. Adı ',' env ',' bölge ').
2. W3C Trace Context'i tüm katmanlarda ve kuyruklarda yayma.
3. Anlamsal niteliklerin minimum kümesi (HTTP/DB/queue/PSP).
4. Kuyruk örnekleme: hatalar, p95 +, ödemeler, kanarya.
5. 'Trace _ id'/' span _ id'ile günlükler, örneklerle metrikler.
6. Panolar: hizmet haritası, sürüm karşılaştırması, ödeme akışı.
7. PII politikaları: maskeleme, bölgeler, roller, elde tutma.
8. Testler/yük: korelasyonu ve zirvelerden önce izlemenin eksiksizliğini kontrol edin.
9. Uyarılarda runbook bağlantılarının otomatik oluşturulması.
10. Telemetri Maliyet ve Kardinalite Raporu.
18) Antipatterns
Veritabanları/kuyruklar olmadan "sadece girişte" izler - kullanım yok.
Async'de yayılma eksikliği - neden ve sonuç zincirleri kırılır.
Kuyruk mantığı olmadan rastgele %1 örnekleme - yavaş/hatalı yakalamayın.
Trace _ id olmayan günlükler - uçtan uca korelasyon yok.
Özniteliklerde/günlüklerde ham PII'ler - uyumluluk riskleri.
Kardinalite "tavana" (metrik etiketler olarak kullanıcı/oturum) - bir değer patlaması.
Özet
OpenTelemetry, farklı araçlardan oluşan bir koleksiyondan gözlemlenebilirliği uçtan uca bir performans diline dönüştürür. Doğru bağlam yayılımı, düzgün semantik, kuyruk örneklemesi ve "metrikler ↔ izler ↔ günlükler" kombinasyonu ile iGaming ekibi p95/p99'u kontrol altında tutar, darboğazları (DB, kuyruklar, PSP) hızlı bir şekilde izole eder ve trafik zirvelerinde bile güvenle serbest bırakır.