GH GambleHub

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.

Önerilen hibrit:
  • 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.

Contact

Bizimle iletişime geçin

Her türlü soru veya destek için bize ulaşın.Size yardımcı olmaya her zaman hazırız!

Telegram
@Gamble_GC
Entegrasyona başla

Email — zorunlu. Telegram veya WhatsApp — isteğe bağlı.

Adınız zorunlu değil
Email zorunlu değil
Konu zorunlu değil
Mesaj zorunlu değil
Telegram zorunlu değil
@
Telegram belirtirseniz, Email’e ek olarak oradan da yanıt veririz.
WhatsApp zorunlu değil
Format: +ülke kodu ve numara (örneğin, +90XXXXXXXXX).

Butona tıklayarak veri işlemenize onay vermiş olursunuz.