GH GambleHub

Kolekcja metryki: Prometeusz, Grafana

Kolekcja metryki: Prometeusz, Grafana

1) Przeznaczenie i ramka

Zadaniem pętli metrycznej jest niezawodne zbieranie i przechowywanie serii czasowych, szybki PromQL dla alarmów RCA, SLO i zrozumiałych desek rozdzielczych. Podstawowa para: Prometeusz (scrape → sklep → zapytanie) i Grafana (wizualizacja, wpisy, adnotacje wydania). Do długiego przechowywania i globalnych zapytań - Thanos/Cortex/Mimir.

2) Model danych i semantyka

Seria = nazwa metryczna + zestaw etykiet (klucz = wartość).
Rodzaje: licznik, miernik, histogram, podsumowanie (w prod - częściej histogram).

Semantyka:
  • RED (API): „szybkość”, „błędy”, „czas trwania” (histogramy).
  • USE (ресерса): Utilization, Saturation, Errors (CPU/RAM/Disk/Net).
  • Nazywanie: 'namespace _ subsystem _ metric _ unit' (na przykład 'http _ server _ requests _ total', 'db _ connections _ current').

Przeciwkardynalność: zminimalizować różne wartości etykiet (brak user_id request_id na etykiecie).

3) Odkrycie narażenia i usługi

Eksporterzy: node_exporter, kube-state-metrics, cAdvisor, DB/kolejki (postgres_exporter, redis_exporter, kafka_exporter).
Usługi rodzime: biblioteki klienckie (Go/Java/Node/Python) → '/metrics'.
Serwis Discovery: Kubernetes, EC2/ASG, Konsul, pliki statyczne.

Podstawowy 'prometeusz. yml' (snippet):
yaml global:
scrape_interval: 15s evaluation_interval: 15s scrape_configs:
- job_name: 'kubernetes-nodes'
kubernetes_sd_configs: [{ role: node }]
relabel_configs:
- action: labelmap regex: __meta_kubernetes_node_label_(.+)
- job_name: 'apps'
kubernetes_sd_configs: [{ role: pod }]
relabel_configs:
- source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_scrape]
action: keep regex: "true"
- source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_path]
target_label: __metrics_path__
regex: (.+)
- source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_port]
target_label: __address__
regex: (.+)
replacement: $1
Adnotacje strąków:
yaml prometheus. io/scrape: "true"
prometheus. io/path: /metrics prometheus. io/port: "8080"

4) Histogramy i opóźnienia

Użyj wyraźnych wiader dla swoich SLO:
  • Web/API: „[10ms, 25,50,100,200,400,800,1600]”
  • Płatności/wypłaty: Dodaj ogon do 5-10.
PromQL p95:
promql histogram_quantile(0. 95,
sum by (le) (rate(http_request_duration_seconds_bucket[5m]))
)
Z przykładami (jeśli są włączone):
promql histogram_quantile(0. 95,
sum by (le, route) (rate(traces_spanmetrics_duration_bucket{route="/withdraw"}[5m]))
)

5) Zasady rejestracji

Zmniejszyć ciężkie żądania, standaryzować SLI.

yaml groups:
- name: api_sli interval: 30s rules:
- record: job:http:success_ratio:rate5m expr: sum(rate(http_requests_total{status!~"5.."}[5m])) / sum(rate(http_requests_total[5m]))
- record: job:http:duration_p95:5m expr: histogram_quantile(0. 95, sum by (le) (rate(http_request_duration_seconds_bucket[5m])))

6) SLO i wpisy (oparzenie wielowarstwowe)

SLO 99. 9% Udane Requests/30d.

yaml groups:
- name: slo_burn rules:
- alert: ErrorBudgetBurnHighShort expr: (1 - job:http:success_ratio:rate5m) > (1 - 0. 999) 14 for: 5m labels: { severity: critical }
annotations: { summary: "Fast burn >14x for 5m" }

- alert: ErrorBudgetBurnHighLong expr: (1 - job:http:success_ratio:rate5m) > (1 - 0. 999) 6 for: 1h labels: { severity: critical }
annotations: { summary: "Long burn >6x for 1h" }
Alertmanager (uproszczony):
yaml route:
receiver: pager group_by: ["service"]
receivers:
- name: pager slack_configs:
- channel: "#oncall"
send_resolved: true

7) Higiena etykiet i gospodarka

Nazwy etykiet są stabilne i znormalizowane: „service”, „na”, „region”, „route”, „code”, „version”.
Kardynalność graniczna: Metryki z 'trasą' muszą używać wzoru 'http'. trasa "(nie pełny adres URL).
Pobieranie próbek logicznych - w ślad; w metrykach - bez user_id.
Właściwości uwolnienia ('service. wersja ") są przydatne do porównywania starych/nowych wersji.

8) Skalowanie i HA

Prometeusz - pionowo i za pomocą celu:
  • Dwa Prometeusz (A/B) skrobać te same cele (HA → wpisy są powielane).
  • Thanos: Sidecar do każdego Prometeusza, Sklep + Zapytanie o globalne zapytania i długoterminowe przechowywanie (S3/GCS).
  • Alternatywa: Cortex/Mimir (zdalne pisanie, wielopoziomowość, skalowanie poziome).
Remote write (przykład):
yaml remote_write:
- url: https://mimir. example. com/api/v1/push basic_auth: { username: tenantA, password: $MIMIR_TOKEN }
Lokalna retencja TSDB:
yaml
--storage. tsdb. retention. time=15d
--storage. tsdb. max-block-duration=2h

9) Grafana: deski rozdzielcze, wpisy, adnotacje

Standardowe deski rozdzielcze:

1. Przegląd platformy (SLO/RED, błąd w budżecie).

2. API by Route (RPS/5xx/p95, porównanie 'wersja').

3. K8s klaster/węzły (płaszczyzna sterowania, nasycenie).

4. DB/Cache/Kolejki (lag/locks/hit ratio/backlog).

5. Per-Release (przed/po, uwolnienie adnotacji z CI).

Grafana Alerting: wyzwalacze na PromQL, obroty dyżurów, mute-times „release windows”.

Adnotacje: CI dodaje wydarzenie uwolnienia z 'commit', 'image. znacznik ", odniesienie do rurociągu.

10) Kubernetes: co mierzyć

Płaszczyzna sterowania: 'apiserver _ request _ total', etcd leader/fsync, opóźnienie harmonogramu.
Obciążenia robocze: uruchamia się ponownie, 'container _ cpu _ cfs _ throttled _ seconds _ total', OOM, Pending/Evicted, Violacje PDB.
Sieć: krople, conntrack, błędy 'kube-proxy'.
Kontyngenty/limity: Wnioski vs Limits, HPA/VPA, nasycenie węzłów.

11) DB/caches/kolejki: sygnały kluczowe

PostgreSQL/MySQL: 'connections', 'locks', 'deadlocks _ total', 'xact _ commit/rollback', replikacja lag.
Redis: współczynnik trafienia, „eksmisje”, opóźnienie „chwilowe _ ops _ per _ sec”.
Kafka/RabbitMQ: consumer lag, unacked, ISR, use disk.

Przykłady PromQL:
promql
Queue backlog sum by (topic) (kafka_consumergroup_lag)> 1000

Postgres replication lag max(pg_replication_lag_seconds) > 2

12) Bezpieczeństwo i wielopoziomowość

RBAC do Prometheus/Grafana, datasource-permishens.
Łańcuch TLS/mTLS na ingress/między komponentami.
Izolacja najemcy: oddzielna etykieta Prometheusa lub najemcy w Cortex/Mimir; limity serii i żądania.
Sekrety w wpisach/powiadomieniach - zabronione (użyj identyfikatora biletu, a nie PII).

13) Integracja z wersjami i auto-rolkami

Zasady SLO → Szablon Argo Rollouts lub CI-gate.
Po uruchomieniu wpisów spalania - pauza/rollback canary; w dzienniku/adnotacji - link do wydania.
Porównanie wersji stabilnej i kanaryjskiej za pomocą etykiety „wersja”.

14) Typowe błędy (anty-wzorce)

Niekontrolowana kardynalność etykiet (user_id, url. pełne, dynamiczne klucze).
Wymieszać prod i etap w tej samej gromadzie bez 'env' abel.
Tylko skrajnia bez RED/USE; bez histogramów p95/p99.
Wpisy na sprzęcie bez wiązania z SLO → szum.
Brak zasad nagrywania → „ciężkie” wnioski w incydentach produkcyjnych.
Nie ma adnotacji wydania → trudno porównać zmiany i degradację.

15) Lista kontrolna realizacji (0-45 dni)

0-10 dni

Eksporterzy węzłów/kube-state/cAdvisor; „/metryki ”w usługach.
Podstawowe deski rozdzielcze RED/USE; standardowe wiadra histogramowe.
Dodaj adnotacje z CI.

11-25 dni

Zasady rejestracji SLI; Alerty z wieloma oknami.
HA Prometheus (double scrape), kopia zapasowa konfiguracji GitOps.
Alertmanager: trasy/tryb ciszy/obroty dyżurów.

26-45 dni

Remote-write w Thanos/Cortex/Mimir, przechowywanie długoterminowe.
Optymalizacja kardynalności, limity serii, prośby.
Zwolnienia SLO-gating i integracji auto-rollback.

16) Wskaźniki zapadalności

Zakres RED/USE dla kluczowych usług ≥ 95%.
Średni czas na wykonanie „ciężkiego” PromQL <2 s (p95) ze względu na zasady nagrywania.
Stosunek przydatnych/hałaśliwych wpisów wynosi> 3:1.
Kardynalność pod kontrolą: <10M partii aktywnych na klastra, bez kolców.
100% uwolnień jest zapisanych w Grafanie i skorelowanych metrykach przed/po.

17) Przydatne snippety

Stabilne porównanie kanaryjskie według wersji

promql histogram_quantile(0. 95,
sum by (le, version) (rate(http_request_duration_seconds_bucket{version=~"stable    canary"}[5m]))
)

5xx Błędy na trasie

promql topk(5,
sum by (route) (rate(http_requests_total{status=~"5.."}[5m]))
)

nasycenie procesora kontenerowego

promql rate(container_cpu_cfs_throttled_seconds_total[5m]) > 0. 1

Relacje metryczne do utworów (Przykłady włączone)

promql sum (rate (http_request_duration_seconds_bucket[5m])) by (le) # clickable to the track

18) Wniosek

Prometheus + Grafana jest de facto standardem dla metryk. Semantyka i dyscyplina wygrywa: RED/USE, schludne etykiety, histogramy SLO, zasady nagrywania i wpisy SLO. Dodaj HA i długoterminowe przechowywanie, uwolnij adnotacje i integrację z automatycznymi rolkami - i masz szybką, skalowalną i ekonomiczną pętlę metryczną, która pomaga podejmować decyzje w sprzedaży.

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.