Prometeusz: zbieranie mierników
(Sekcja: Technologia i infrastruktura)
Krótkie podsumowanie
Prometheus jest przemysłowym standardem dla mierników czasu: skrobie cele nad HTTP, przechowuje serie w TSDB, liczy agregaty w PromQL i uruchamia wpisy przez Alertmanager. W przypadku iGaming jest to podstawa podejścia SLO (RED/USE, mierniki płatności biznesowych), szybkiej diagnostyki p95/p99 i automatycznych rozwiązań (zamrażanie/rolkowanie).
1) Model danych i kardynalność
Metric:' name {label1 =” v1”, label2 =” v2”} value @ timestamp'.
Kardynalność = iloczyn mocy wszystkich unikalnych zestawów etykiet; główny czynnik kosztów.
- маровий: „service”, „,”, „region”, „instance”, „pod”, „container”, „version”;
- domena: 'trasa', 'psp', 'lokator' (uwaga!), 'game _ provider'.
- Nie można umieścić 'user _ id',' session _ id', losowych/wysokich wartości kardynalnych.
2) Rodzaje mierników
Licznik - tylko rośnie (na przykład „http _ requests _ total”).
Skrajnia - wartości chwilowe (na przykład 'queue _ depth').
Histogram/Podsumowanie - rozkład opóźnień. In prod - Histogram (ze wsparciem dla „histogramm _ quantile ()” i wzorców).
Rodzime histogramy to zmienne wiadra, które poprawiają dokładność i zapisują rozmiar (w tym w miarę dostępności).
go var httpLatency = prometheus. NewHistogramVec(
prometheus. HistogramOpts{
Name: "http_request_duration_seconds",
Help: "HTTP latency",
Buckets: prometheus. DefBuckets ,//or custom
},
[]string{"route","method"},
)
3) Eksporterzy i co mierzyć
Usługa: Twój kod (SDK dla Go/Java/Node/Python), metryki RED API, mierniki biznesowe (konwersja płatności).
System: node_exporter, cAdvisor/kubelet.
Strona trzecia: DB/caches (mysqld_exporter, postgres_exporter, redis_exporter), NGINX/HAProxy, Kafka/RabbitMQ.
OTel metrics: via OpenTelemetry Collector → Prometheus Remote Write lub Prometheus-receiver → do wspólnego stosu.
4) Scrape i relabel: jak połączyć cele
Podstawowy 'prometeusz. yml'
yaml global:
scrape_interval: 15s evaluation_interval: 15s external_labels:
env: "prod"
region: "eu-west"
scrape_configs:
- job_name: 'node'
static_configs:
- targets: ['10. 0. 1. 10:9100','10. 0. 1. 11:9100']
- job_name: 'payments-api'
metrics_path: /metrics scheme: https tls_config:
ca_file: /etc/ssl/ca. crt cert_file: /etc/ssl/tls. crt key_file: /etc/ssl/tls. key relabel_configs:
- source_labels: [__address__]
regex: '(.):\d+'
target_label: instance replacement: '$1'
Operator Kubernetes мереz Prometheus
Zamiast ręcznie 'scrape _ configs', użyj opcji na ekranie/PodMonitor.
yaml apiVersion: monitoring. coreos. com/v1 kind: ServiceMonitor metadata: { name: payments-api }
spec:
selector: { matchLabels: { app: payments-api } }
namespaceSelector: { matchNames: [ "prod" ] }
endpoints:
- port: metrics interval: 15s scheme: http relabelings:
- action: replace targetLabel: service replacement: "payments-api"
K8s adnotacji (bez operatora, uproszczone)
yaml metadata:
annotations:
prometheus. io/scrape: "true"
prometheus. io/port: "9102"
prometheus. io/path: "/metrics"
5) Przechowywanie: TSDB, WAL i retencja
WAL (Write-Ahead Log) → szybkie odzyskiwanie z ponownego uruchomienia.
Zagęszczenie: kompresja blokowa, oszczędność dysku/procesora.
Zatrzymanie: Przechowywać gorące dane przez 7-30 dni; długoterminowe - ruch (patrz Skalowanie).
- "- storaż. tsdb. zatrzymanie. czas = 15 d'
- "- storaż. tsdb. max-block-kawałek-segment-size "
- Napęd: szybki SSD/NVMe; niepotrzebnie unikać woluminów sieci.
6) PromQL: podstawy i częste wzory
Szybkość/irate
promql rate(http_requests_total{route="/deposit"}[5m])
Błędy i wskaźniki sukcesu
promql sum(rate(http_requests_total{status=~"2.. 3.."}[5m]))
/ sum(rate(http_requests_total[5m]))
opóźnienie p95
promql histogram_quantile(0. 95,
sum by (le, route) (rate(http_request_duration_seconds_bucket[5m]))
)
Kolejki/nasycenie
promql max(queue_depth{queue="withdrawals"}) by (region)
7) Zasady rejestrowania i wydajność
Rozważmy z wyprzedzeniem ciężkie wyrażenia i przechowuj jako serię.
yaml groups:
- name: api. rules interval: 30s rules:
- record: job:http:request_duration_seconds:p95 expr:
histogram_quantile(0. 95,
sum by (le, job) (rate(http_request_duration_seconds_bucket[5m])))
- record: job:http:success_ratio expr:
sum(rate(http_requests_total{status=~"2.. 3.."}[5m]))
/ sum(rate(http_requests_total[5m]))
Plus: szybkie deski rozdzielcze, mniejsze obciążenie procesora Prometheus.
8) Alerting (SLO) (wskaźnik oparzenia)
Alerty spalania (wielopoziomowe, wielopalnikowe)
yaml groups:
- name: slo. payments rules:
- alert: PaymentsSLOFastBurn expr: (1 - job:http:success_ratio{job="payments-api"}) > (1 - 0. 999) 14 for: 5m labels: { severity: "page" }
annotations:
summary: "SLO fast burn"
runbook: "https://runbooks/payments/slo"
- alert: PaymentsSLOSlowBurn expr: (1 - job:http:success_ratio{job="payments-api"}) > (1 - 0. 999) 6 for: 1h labels: { severity: "ticket" }
Alertmanager: service/region routing, duplikat suppression, ChatOps.
9) Korelacja ze śladami i kłodami
Włącz przykłady: klikalne 'trace _ id' w wiadrach histogramu.
Umieść etykiety 'service', 'version', 'region' dla 'release compare' w metrykach.
Na deskach rozdzielczych - adnotacje wydania (Git SHA/wersja).
10) Skalowanie i przechowywanie długoterminowe
Federacja: górne agregaty Prometheusa z dolnej (przez filtry zadania/etykiety).
Remote Write: wysyłanie wierszy do długoterminowych backendów/klastrów (Thanos/Cortex/Mimir).
Plusy: nieskończona retencja, poziomy skalowanie, globalny widok.
Minusy: trudniejsze w obsłudze, koszt.
Shading według funkcji: oddzielne instancje dla mierników systemu, biznesu, bezpieczeństwa.
11) Bezpieczeństwo
TLS/mTLS pomiędzy obiektywami Prometheus/Alertmanager/remote _ write.
Uwierzytelnianie podstawowe/token dla/celów i API (przed bramą proxy).
RBAC: ograniczenie dostępu do interfejsu użytkownika/serii według roli; ukryj prywatne etykiety.
Higiena PII: nie pisać PII w metrykach; używać hashes/aliasów.
12) Praktyki kubernetów
Operator Prometheusa: CRD (Na monitorze, PodMonitor, Alertmanager, Prometheus).
kube-state-metrics + cAdvisor → kompletny obraz klastra.
Tainings i zasoby: specjalne węzły do monitorowania; Limity procesora/pamięci RAM.
Redukcja hałasu: selektory etykiet dla przestrzeni nazw „produkcja”, scrape_interval wyściółki, w miarę możliwości.
13) Metryka biznesowa i produkt
Млатева: 'payments _ success _ total {psp, currency}', 'payment _ conversion _ ratio', 'ttw _ seconds _ histogram'.
Aktywność gry: zakłady/min, trzymanie sesji jako skrajnia, drop-off przy błędach.
Ryzyko/oszustwo: wyzwalacze anomalii prędkości/geo; wyrębu osobno, mierniki - kruszywa.
14) Koszt i wydajność (FinOps)
Kontrolować kardynalność (przegląd znacznika przed dodaniem nowej etykiety).
Histogramy pobierania próbek/rzadcy eksporterzy → „scrape _ interval”
Upośledzenie w długotrwałym magazynie.
Buforowanie deski rozdzielczej i szerokie poleganie na zasadach nagrywania.
15) Przykłady „szybkiego startu”
Czerwony eksporter w aplikacji (Python)
python from prometheus_client import Counter, Histogram, start_http_server reqs = Counter('http_requests_total','', ['route','method','status'])
lat = Histogram('http_request_duration_seconds','', ['route','method'])
start_http_server(8000)
def handle(req):
with lat. labels(req. route, req. method). time():
status = app(req)
reqs. labels(req. route, req. method, str(status)). inc()
return status
Alerty progowe p95
promql alert: HighLatencyP95 expr: histogram_quantile(0. 95,
sum by (le, service) (rate(http_request_duration_seconds_bucket[5m]))) > 0. 25 for: 10m labels: { severity: "page", service: "api" }
16) Lista kontrolna wdrażania
1. Zdefiniuj zestaw podstawowych mierników (RED/USE) i mierników domeny.
2. Współrzędne etykiet i przewodnik przez kardynalność.
3. Konfiguracja scrape/ Monitor, TLS/mTLS, relabel.
4. Zawiera histogramy dla kluczowych ścieżek i przykładów.
5. Tworzenie reguł nagrywania dla p95, współczynnik sukcesu, agregaty biznesowe.
6. Wprowadź wpisy SLO (szybkość spalania) i zakorzenienie Alertmanager.
7. Podnieś deski rozdzielcze: mapa serwisowa, porównanie wersji, płatności.
8. Zdecyduj o federacji/remote _ write i retencji.
9. Ograniczyć dostęp (RBAC), sprawdzić brak PII.
10. Włącz zakładki i kontrole dnia gry.
17) Anty-wzory
Etykiety o wysokiej kardynalności (user/session/request_id).
Podsumowanie zamiast histogramu dla kluczowych SLO → nie ma 'histogramm _ quantile'.
Zarysowanie „wszystko z rzędu” bez filtrowania/rotacji → wzrost kosztów i hałasu.
Wpisy na surowych metrykach bez SLO → alert-phatig.
Brak zasad nagrywania → „ciężkie” deski rozdzielcze.
Zaufanie do mierników bez TLS/mTLS → ryzyko spoofingu/wycieku.
Podsumowanie
Prometheus nadaje platformie iGaming celową obserwowalność: dokładne histogramy, stabilne agregaty, jasne wpisy SLO i skalowanie do mapy wielobranżowej. Dyscyplina etykiet, prawidłowe zasady nagrywania, linki do śladu/dziennika oraz przemyślana architektura przechowywania zapewniają szybkie wydania i przewidywalne p99 nawet w godzinach szczytu.