GH GambleHub

Grafana i wizualizacja danych

(Sekcja: Technologia i infrastruktura)

Krótkie podsumowanie

Grafana jest prezentacją dla wszystkich obserwacji: metryk, kłód, śladów, wskaźników biznesowych i wpisów w jednym miejscu. W przypadku iGaming są to: monitorowanie p95/p99, konwersja płatności, Czas-do-Portfel, dostępność dostawcy gier, geo-dystrybucja incydentów i stabilne vs kanaryjskie. Sukces: szablony (zmienne), zrozumiałe panele, adnotacje, deski rozdzielcze SLO i dyscyplina praw dostępu.

1) Architektura połączeń

Dane: Prometheus (metryki), Loki/ELK (dzienniki), Tempo/Jaeger (trasy), ClickHouse/Query/PG (dane biznesowe), OTLP przez Gateway.
Kluczowe linki: z → exemplar → trace metric → related logs by 'trace _ id'.
Foldery i RBAC: oddzielne foldery „SRE”, „Płatności”, „Ryzyko”, „Gry”, „BizOp”; рола 'Viewer/Editor/Admin' - uprawnienia granularne.

2) Projekt deski rozdzielczej: zasady

1. Odpowiedź na pytanie w 1-2 kliknięć: od karty SLO do szczegółów.
2. RED/USE dla każdej usługi + karty domenowe (TTW, konwersja depozytów).
3. Stabilna siatka: 24-kolumnowa, duża KPI na górze, szczegóły na dole.
4. Kolory i progi: minimum, tylko SLA/SLO.
5. Adnotacje wydania: Git SHA, wersja, typ wydania (kanaryjski/niebiesko-zielony).

3) Zmienne i szablony (szablonowanie)

Zmienne zmieniają jedną deskę rozdzielczą w wiele.

Przykład (Prometheus query-variable):
  • Nazwa: „usługa”
  • Zapytanie: 'label _ values (up, service)'
  • Multi-select + zawiera wszystkie - wygodne dla kruszyw.
Zmienne kaskadowe:
  • „region” → „” → „service” → „instancja”.
  • Użyj 'regex '/' sort' dla UX i 'refresh: On dashboard load'.

4) Panele i typy renderowania

Seria czasu: p50/p95/p99, szybkość błędów, przepustowość.
Stat/Gauge: docelowy KPI (dostępność, TTW p95).
Skrajnia/Tabela: najlepsze trasy N/PSP/dostawcy gier.
Geomap: incydent termiczny/mapy opóźnień według kraju/ROR.
Płótno: strumienie schematyczne (gracz → API → PSP → Bank).
Wykres węzła: zależności serwisowe, kolorowanie przez błędy.

Przekształcenia:
  • Etykiety do pól, Przyłączanie zewnętrzne, Redukcja (min/max/avg), Dodaj pole z obliczeń (konwersja).

5) Przykłady zapytań i paneli

5. 1 p95 opóźnienie (PromQL)

promql histogram_quantile(0. 95,
sum by (le, route) (rate(http_request_duration_seconds_bucket{service="$service",region="$region"}[5m]))
)

5. 2 Powodzenie wniosków (proxy SLO)

promql sum(rate(http_requests_total{service="$service",status=~"2..    3.."}[5m]))
/
sum(rate(http_requests_total{service="$service"}[5m]))

5. 3 Konwersja płatności (agregat PromQL)

promql sum(rate(payments_success_total{psp=~"$psp",currency=~"$currency"}[15m]))
/
sum(rate(payments_attempt_total{psp=~"$psp",currency=~"$currency"}[15m]))

5. 4 Szybki skok na tor (przykłady)

W panelu 'Time series' włącz Przykłady → kliknięcie na punkcie → Tempo otwiera się za pomocą 'trace _ id'.

5. 5 Loki trace_id

logql
{service="$service"}     = "$traceID"

6) Adnotacje i wydarzenia

Adnotacje wydania: automatyczne dodawanie zdarzenia podczas wyczerpywania (wersja, autor, waga kanaryjska).
Incydent/Zamrożenie: Znaki początkowe/końcowe incydentu i zwolnienie okien zamrożenia.
Wydarzenia biznesowe: duże kampanie/turnieje - zaznaczenie na wykresach.

7) Wpisy w Grafanie

Zasady ostrzegania centralnie (na podstawie Prometheus/Loki/Cloud).
Punkty kontaktowe: PagerDuty/Slack/Email; Zasady powiadamiania (zakorzenienie przez folder/tagi).
Szybkość spalania wielu okien: szybkie i powolne prażenie budżetu.
Cisza: w zaplanowanych oknach i z duplikatami.

Przykład wyrażenia dla p95:
promql histogram_quantile(0. 95,
sum by (le, service) (rate(http_request_duration_seconds_bucket{service="$service"}[5m]))
) > 0. 25

8) Zaopatrzenie jako kod (IaC)

Przechowywać źródła/deski rozdzielcze/wpisy w Git.

datasource. yaml

yaml apiVersion: 1 datasources:
- name: Prometheus type: prometheus access: proxy url: http://prometheus:9090 isDefault: true
- name: Loki type: loki url: http://loki:3100
- name: Tempo type: tempo url: http://tempo:3100

deska rozdzielcza. yaml

yaml apiVersion: 1 providers:
- name: sres folder: SRE type: file disableDeletion: false options:
path: /var/lib/grafana/dashboards/sre

grafana. ini (fragment)

ini
[auth]
disable_login_form = false
[users]
viewers_can_edit = false
[alerting]
enabled = true
[unified_alerting. screenshots]
capture = true

9) Bezpieczeństwo i dostęp

SSO (OIDC/SAML), grupy → role → foldery.
Prawa do danych: tylko niezbędne foldery, tylko do odczytu dla przeglądarki.
Higiena PII: nie pociągać pól z PII w panelu; dla kłód - filtr/maska.
Sekrety: tylko przez skarbiec/bezpieczne pola JSON, bez „zwykłego tekstu” w deskach rozdzielczych.

10) Wydajność i koszt

Zasady nagrywania w Prometeuszu dla ciężkich wyrażeń.
Downsampling/Zatrzymywanie w długotrwałych backendach pamięci masowej.
Pamięć podręczna deski rozdzielczej i fair intervals (nie "1s' wszędzie).
Ograniczenie kardynalności zmiennych (nie zastępuj 'user _ id'/' session _ id').
Redystrybucja: oddzielne instancje/foldery dla zespołów hałaśliwych.

11) Specjalistyczne deski rozdzielcze do iGaming

Płatności: próby/sukces/TTW p95, błąd PSP/route, mapa odchylenia geograficznego.
Gry/Dostawcy: opóźnienie i wskaźnik błędów według studia/gry, konwersja uruchomienia.
Ryzyko/oszustwo: szybkość działania, wybuchy urządzenia/IP, korelacje (tabela + bar-gage).
RG/Zgodność: sesje> progi, wzrost steków, wpisy anomalii.
Wydanie Porównaj: stabilny vs canary by p95/error/business metrics.
Infra/USE: Wykorzystanie/Nasycenie/Błędy według klastra i kolejki.

12) Przykład deski rozdzielczej JSON (fragment)

json
{
"title": "Payments SLO",
"tags": ["slo","payments"],
"time": {"from":"now-6h","to":"now"},
"panels": [
{
"type":"stat",
"title":"Availability",
"targets":[{"expr":"sum(rate(http_requests_total{service=\"payments-api\",status=~\"2..    3..\"}[5m]))/sum(rate(http_requests_total{service=\"payments-api\"}[5m]))"}],
"thresholds":{"mode":"absolute","steps":[{"color":"red","value":0},{"color":"green","value":0. 999}]}
},
{
"type":"timeseries",
"title":"p95 latency",
"exemplars": {"color":"rgba(31,120,193,0. 6)"},
"targets":[{"expr":"histogram_quantile(0. 95,sum by (le) (rate(http_request_duration_seconds_bucket{service=\"payments-api\"}[5m])))"}]
}
]
}

13) Książki startowe i ulepszenia UX

Każdy alert ma URL Runbook (instrukcja akcji).
Linki do pokrewnych desek rozdzielczych (Płatności i PSP).
Drilldown: kliknięcia na etykietach → filtry (region/psp/trasa).
Zmienne domyślnie: '= prod', 'region = eu' - przyspiesza start.

14) Lista kontrolna wdrażania

1. Konfiguracja zasobów danych: Prometheus/Loki/Tempo/SQL.
2. Wprowadź foldery i RBAC; audyt praw.
3. Utwórz zmienne szablonu (region/na/usługa).
4. Budowanie desek rozdzielczych SLO (dostępność, p95, wskaźnik błędów, budżet błędów).
5. Dodaj adnotacje i stabilne/kanarkowe porównania.
6. Włącz przykłady i przejdź do śladów/dzienników klikając.
7. Konfiguruj alerty (wielopoziomowe) i zakorzenienie.
8. Zapewnij wszystko jako kod, sklep w Git, zrób recenzję.
9. Optymalizacja wydajności: zasady nagrywania, odstępy, pamięć podręczna.
10. Wprowadź biznesowe deski rozdzielcze (TTW, konwersja płatności, karty GGR).

15) Antypattery

„Zoo” niespójne deski rozdzielcze bez zmiennych i standardów.
Panele z ciężkim PromQL bez zasad nagrywania → powolny interfejs użytkownika.
Nadmiar kolorów/legendy/oś Y z różnymi skalami.
Połączenie PII w panelach otwartych dla przeglądarki.
Brak adnotacji o zwolnieniu - nie wiadomo skąd pochodzą skoki.
Jedna deska rozdzielcza „monovew” zamiast struktury folderu.

Podsumowanie

Grafana jest interfejsem, w którym technika spełnia produkt: metryki, dzienniki i utwory łączą się ze zdjęciami biznesowymi. Szablony, prawidłowe panele, adnotacje i wpisy przekształcają dane w rozwiązania: szybką diagnozę, przewidywalne wydania i koszty obserwacji.

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.