GH GambleHub

Rozproszone śledzenie

(Sekcja: Technologia i infrastruktura)

Krótkie podsumowanie

Dystrybuowane ślady stanowią odpowiedź na pytanie, gdzie i dlaczego czas traci się na ścieżce żądania przez bramę, API, kolejki, bazy danych, dostawców zewnętrznych (PSP/studia gier). OpenTelemetry (OTel) to otwarty standard SDK/agenta/protokołu, który łączy w sobie ścieżki, mierniki i dzienniki. W iGaming, jest podstawowym narzędziem, aby zachować p95/p99, szybko zlokalizować problemy z płatnościami i zidentyfikować wąskie gardła przed turniejami szczytowymi.

1) Koncepcje OTel

Ślad - pełna ścieżka operacji (depozyt, stawka, wypłata).
Span - obszar roboczy (HTTP handler, żądanie SQL, połączenie kolejki/dostawcy).
Atrybuty - klucz wartości ze szczegółami ('net. peer. nazwa „,” db. system „,” psp. trasa ").
Wydarzenia - zdarzenia błyskawiczne (rekolekcje, timeout, miss pamięci podręcznej).
Linki - link do innych śladów (ważne dla async/kolejki).
Resource - metadane procesu: 'service. nazwa „,” usługi. wersja „,” wdrożenie. środowisko „,” chmura. region ".

2) Rozmnażanie kontekstowe

Użyj kontekstu śladowego W3C:

traceparent: 00-<trace_id>-<span_id>-01 tracestate:...

Dodatkowo - bagaż dla bezpiecznych kluczy (na przykład „najemca”, „trasa”), nie umieścić tam PII.

Gdzie przebić kontekst: brama API → wewnętrzne RPC → producent do kolejki → konsument → zewnętrzny HTTP (PSP/dostawcy).

3) Konwencje semantyczne (minimum obowiązkowe)

HTTP/RPC: "http. metoda „,” http. trasa ',' http. status_code'.
DB/pamięć podręczna: 'db. system „(” mysql'/„ postgresql'/” redis „),” db. oświadczenie „(zamaskowane),” db. działanie ".
Kolejki: 'wiadomości. system „(” kafka „/” rabbitmq „),” przesyłanie wiadomości. cel „,” wiadomości. operacja „(” wyślij'/„ proces ”).
Płatności: 'psp. trasa ',' psp. dostawca „,” płatność. id' (pseudonim), „kwota”, „waluta”.
Domena iGaming: 'gra. dostawca „,” gra. session_id' (hash), 'player. id_hash'.

Pojedyncza taksonomia → porównywalność desek rozdzielczych i szybkie poszukiwanie przyczyn.

4) Pobieranie próbek: Jak nie utopić danych

Oparty na głowie

Proste, tanie; nadaje się do ogólnego przepływu.
Minus - można stracić „ciekawe” powolne/błędne utwory.

Tail-based (мCollector)

Decyzja jest podejmowana po zakończeniu przęseł: oszczędzamy tylko błędy/powolne/ważne segmenty (VIP/płatności).
Idealny do obciążenia produkcyjnego: znacznie obniża koszty z wysoką zawartością informacji.

Zalecana hybryda:
  • Głowica: 5-10% dla pokrycia „tła”.
  • Ogon: 100% błąd + p95 + slow + ścieżki płatności/wydania kanaryjskie.

5) Topologie kolektora OpenTelemetry

Agent-side-ecar (na każdym węźle/pod): lokalna akceptacja, minimalny bufor, eksport do agregatora.
Brama (klaster): próbkowanie ogona, routing, wzbogacanie, eksport do Tempo/Jaeger/Zipkin/OTLP.

Przykład: pobieranie próbek ogonowych (fragment YAML)

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) Korelacja z metrykami i dziennikami

Dodaj 'trace _ id'/' span _ id' do każdego wpisu dziennika.
Przechowywać mierniki opóźnień jako histogramy i zawierać przykłady - odniesienie do reprezentatywnego "śladu _ id' dla" skoku "z p95-boket do określonego śladu.
Adnotacje wydania (Git SHA, wersja wykresu) - jak wydarzenia/etykiety.

7) Oprzyrządowanie (języki i auto-agenci)

Idź (instrukcja + auto)

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

Auto-agent '-javaagent: opentelemetria-javaagent. słoik „, config via” („OTEL _ SERVICE _ NAME”, „OTEL _ EXPORTER _ OTLP _ ENDPOINT”).
Instrukcja obsługi - adnotacje/narzędzie miejsc cebuli (baseny JDBC, pamięć podręczna).

Węzeł. js/Python

Automatyczne narzędzie z wtyczkami SDK + (Express/FastAPI/seler).
Dla kolejek - opakowanie producenta/konsumenta, aby umieścić 'wiadomości. 'I linki.

8) Kolejki i async: prawidłowe przęsła

Producent ('send'): rozpiętość do wysłania do tematu/kolejki.
Konsument ("proces"): nowa rozpiętość przetwarzania wiadomości od łącza do przęsła producenta (związek przyczynowo-skutkowy bez wspólnego "śladu _ id').
Atrybuty: 'messaging. kafka. partycja ',' wiadomości. rabbitmq. routing_key', wiadomości. message_id'.
Z przekładkami - event 'retry', próba counter.

9) DB/Cache i N + 1

Włącz śledzenie sterowników bazy danych, zapytania grupowe tego samego typu w partiach.
Dla Redis/cache atrybuty są 'cache. hit '/' cache. przegapić.
Wyjmij „ciężkie” prośby o oddzielne przęsła - widać, gdzie p99.

10) Dostawcy zewnętrzni: PSP/studia gier

Wrap klientów HTTP: 'psp. dostawca „,” psp. trasa ',' timeout _ ms ',' próba '.
Kody/typy błędów dziennika, ale nie PII (numer karty, żetony).
Porównanie studiów/tras przez 'czas', 'wskaźnik błędów'.

11) Frontend i RUM

OTel Web SDK: 'page _ view', 'resource _ load', 'xhr'.
Pierce 'traceparent' w plecy, aby zszywać ścieżkę użytkownika przez interfejs użytkownika → API → baza danych.
Segmentacja przez dostawców geo/sieciowych - opcjonalne etykiety.

12) Bezpieczeństwo i PII

Zamaskować pola ('db. statement 'edited), hash' player _ id'.
Strefy danych: 'pii = true', 'region = EU/TR/LATAM'.
Kontrola dostępu do ścieżek płatniczych (rola).
WORM/Retention: okresy zatrzymywania wrażliwych śladów, usuwanie według zasad.

13) Wydajność i koszt

Pobieranie próbek za pomocą polityki: „błędy + wolne + płatności + wydania kanaryjskie”.
Upośledzające histogramy metryk, agresywne usuwanie kłód.
Ograniczenie kardynalności: Nie zapisuj 'user _ id' jako etykiety metrycznej.
Bufory/partie w kolektorze, kompresja OTLP.

14) Deski rozdzielcze i analizy

Mapa serwisowa: zależności serwisowe, kolorowanie błędów/opóźnień.
Porównaj wydanie: stabilna wersja w porównaniu z kanaryjską (p95, poziom błędów, płatności conv).
Górne powolne ślady: wzdłuż trasy „/złoża ”, odcinek wzdłuż PSP/regionu.
Kolejka opóźnienia: Głębokie ścieżki opóźnienia zużycia.

15) Przykłady konfiguracji kolektora

Rurociągi (mierniki/szlaki/kłody, fragment)

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) Książki startowe (typowe scenariusze)

A) p99 wzrost „płatności api”

1. Otwórz „Top slow traces” → wejdź do bazy danych/PSP.
2. Jeśli problem z PSP ma przetłumaczyć trasę, włącz przekłady/timeouts.
3. Sprawdź kolejkę 'withdrawals' (lag), zwiększyć konsumentów.

B) Błędy 5xx po zwolnieniu

1. Filtr by 'service. wersja ".
2. Porównaj stabilne/kanarkowe; Znajdź kolce w 'psp. trasa ".
3. Zamrożenie promocji, odwrócenie (patrz Strategie wydania/Rollbacks).

C) Podejrzenie N + 1

1. Szlaki z dużą liczbą krótkich przęseł DB.
2. Włącz agregację/joyns, dodaj warstwę pamięci podręcznej.

17) Lista kontrolna wdrażania

1. Włącz OTel SDK i jednolite atrybuty Resource ('service. imię i nazwisko, nazwę, nazwę, region).
2. Propagowanie kontekstu śladowego W3C przez wszystkie warstwy i kolejki.
3. Minimalny zestaw atrybutów semantycznych (HTTP/DB/kolejka/PSP).
4. Próbkowanie ogona: błędy, p95 +, płatności, kanarka.
5. Dzienniki z 'trace _ id'/' span _ id', mierniki z wzorcami.
6. Deski rozdzielcze: mapa serwisowa, porównanie wersji, przepływ płatności.
7. Polityka PII: maskowanie, strefy, role, retencja.
8. Badania/obciążenie: sprawdź korelację i kompletność śledzenia przed szczytami.
9. Automatyczna generacja linków do książek startowych w wpisach.
10. Raport o kosztach telemetrii i kardynalności.

18) Antypattery

Ślady „tylko przy wejściu” bez baz danych/kolejek → brak użycia.
Brak rozmnażania w async → zerwanie łańcuchów przyczynowo-skutkowych.
Pobieranie próbek losowych 1% bez logiki ogona → nie łapać powoli/błędnie.
Dzienniki bez śladu _ id → brak korelacji pomiędzy końcami.
Surowe PIIs w atrybutach/dziennikach → ryzyko zgodności.
Kardynalność „do sufitu” (użytkownik/sesja jako etykiety metryczne) → eksplozja wartości.

Podsumowanie

OpenTelemetry przekształca obserwowalność z kolekcji rozbieżnych narzędzi w zakończony język wydajności. Dzięki właściwej propagacji kontekstowej, schludnej semantyce, próbkowaniu ogona i kombinacji „metryki”, zespół iGaming kontroluje p95/p99, szybko izoluje wąskie gardła (DB, kolejki, PSP) i pewnie wypuszcza wydania nawet w szczytach ruchu.

Contact

Skontaktuj się z nami

Napisz do nas w każdej sprawie — pytania, wsparcie, konsultacje.Zawsze jesteśmy gotowi pomóc!

Telegram
@Gamble_GC
Rozpocznij integrację

Email jest wymagany. Telegram lub WhatsApp są opcjonalne.

Twoje imię opcjonalne
Email opcjonalne
Temat opcjonalne
Wiadomość opcjonalne
Telegram opcjonalne
@
Jeśli podasz Telegram — odpowiemy także tam, oprócz emaila.
WhatsApp opcjonalne
Format: kod kraju i numer (np. +48XXXXXXXXX).

Klikając przycisk, wyrażasz zgodę na przetwarzanie swoich danych.