GH GambleHub

Colectia Metrics: Prometheus, Grafana

Colectia Metrics: Prometheus, Grafana

1) Scop și cadru

Sarcina buclei metrice este de a colecta și stoca în mod fiabil serii de timp, da PromQL rapid pentru alerte RCA, SLO și tablouri de bord ușor de înțeles. Pereche de bază: Prometheus (răzuire → magazin → interogare) și Grafana (vizualizare, alerte, adnotări de lansare). Pentru stocare lungă și interogare globală - Thanos/Cortex/Mimir.

2) Modelul de date și semantica

Serie = nume metric + set de etichete (cheie = valoare).
Tipuri: contra, ecartament, histogramă, rezumat (în prod - mai des histogramă).

Semantică:
  • RED (API): „rată”, „erori”, „durată” (histograme).
  • UTILIZARE (ресурсы): Utilizare, saturație, erori (CPU/RAM/Disk/Net).
  • Denumire: 'namespace _ subsystem _ metric _ unit' (de exemplu, 'http _ server _ requires _ total', 'db _ connections _ current').

Anti-cardinalitate: minimizarea diferitelor valori ale etichetei (fără user_id request_id în etichetă).

3) Descoperirea expunerii și a serviciului

Exportatori: , kube-state-metrics, cAdvisor, DB/Queues ( , ,.
Servicii native: biblioteci client (Go/Java/Node/Python) → "/metrics'.
Service Discovery: Kubernetes, EC2/ASG, Consul, fișiere statice.

Basic 'prometheus. yml '(fragment):
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
Adnotări de păstăi:
yaml prometheus. io/scrape: "true"
prometheus. io/path: /metrics prometheus. io/port: "8080"

4) Histograme și latență

Utilizați găleți explicite pentru SLO-urile dvs:
  • Web/API: '[10ms, 25,50,100,200,400,800,1600]'
  • Plăți/plăți: Adăugați coada la 5-10.
PromQL p95:
promql histogram_quantile(0. 95,
sum by (le) (rate(http_request_duration_seconds_bucket[5m]))
)
Cu exemplare (dacă este activat):
promql histogram_quantile(0. 95,
sum by (le, route) (rate(traces_spanmetrics_duration_bucket{route="/withdraw"}[5m]))
)

5) Reguli de înregistrare

Reduceți cererile grele, standardizați 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 alerte (multi-fereastră arde)

SLO 99. 9% Requests/30d de succes.

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 (simplificat):
yaml route:
receiver: pager group_by: ["service"]
receivers:
- name: pager slack_configs:
- channel: "#oncall"
send_resolved: true

7) Etichetă-igienă și economie

Numele etichetelor sunt stabile și standardizate: „service”, „env”, „region”, „route”, „code”, „version”.
Limită cardinalitate: Metrics cu „traseu” trebuie să utilizeze „http” model. traseu "(nu URL-ul complet).
Eșantionare logică - în urmă; în valori - fără user_id.
Release properties ('service. versiunea ") sunt utile pentru compararea versiunilor vechi/noi.

8) Scalare și HA

Prometeu - vertical și prin răzuire-țintă:
  • Două Prometheus (A/B) răzuiesc aceleași ținte (alerte HA → sunt duplicate).
  • Thanos: Sidecar pentru fiecare Prometheus, Store + interogare pentru interogări globale și stocare pe termen lung (S3/GCS).
  • Alternativă: Cortex/Mimir (scriere la distanță, multi-chirie, scalare orizontală).
Scriere la distanță (exemplu):
yaml remote_write:
- url: https://mimir. example. com/api/v1/push basic_auth: { username: tenantA, password: $MIMIR_TOKEN }
Retenție locală TSDB:
yaml
--storage. tsdb. retention. time=15d
--storage. tsdb. max-block-duration=2h

9) Grafana: tablouri de bord, alerte, adnotări

Tablouri de bord standard:

1. Prezentare generală a platformei (SLO/RED, buget de erori).

2. API by Route (RPS/5xx/p95, comparație „versiune”).

3. K8s Cluster/Noduri (plan de control, saturație).

4. DB/Cache/Queues (lag/locks/hit ratio/restlog).

5. Per-Release (înainte/după, eliberați adnotări din CI).

Grafana Alerting: declanșează pe PromQL, rotații de gardă, mute-times „windows de lansare”.

Adnotări: CI adaugă un eveniment de lansare cu "comite", "imagine. tag ", o trimitere la conducta.

10) Kubernetes: ce să măsoare

Control-plane: 'apiserver _ request _ total', etcd leader/fsync, scheduler latency.
Volume de lucru: reporniri, 'container _ cpu _ cfs _ throttled _ seconds _ total', OOM, în așteptare/evacuate, încălcări PDB.
Rețea: picături, conntrack, „kube-proxy” erori.
Cote/limite: Cereri vs limite, HPA/VPA, saturație nod.

11) DB/cache/cozi: semnale cheie

PostgreSQL/MySQL: 'conexiuni', 'blocări', 'deadlocks _ total', 'xact _ commit/rollback', lag replicare.
Redis: hit ratio, 'evacuări', latență 'instantaneous _ ops _ per _ sec'.
Kafka/RabbitMQ: lag de consum, dezactivat, ISR, utilizarea discului.

Exemple de PromQL:
promql
Queue backlog sum by (topic) (kafka_consumergroup_lag)> 1000

Postgres replication lag max(pg_replication_lag_seconds) > 2

12) Siguranță și multi-chirie

RBAC la Prometheus/Grafana, datasource-permishens.
Lanț TLS/mTLS pe pătrundere/între componente.
Izolarea chiriașilor: etichetă separată Prometheus sau chiriaș în Cortex/Mimir; serii și limite de cerere.
Secretele în alerte/notificări - interzise (folosiți ID-ul biletului, nu PII).

13) Integrarea cu versiuni și auto-rollback

Regulile SLO → AnalysisTemplate (Argo Rollouts) sau CI-gate.
Când sunt declanșate alerte de arsură - pauză/rollback canar; în jurnalul/adnotarea - un link către eliberare.
Compararea versiunii stabile și canare prin eticheta „versiune”.

14) Erori tipice (anti-modele)

Cardinalitatea necontrolată a etichetelor (user_id, url. chei complete, dinamice).
Se amestecă prod și etapa în același grup fără 'env' label.
Numai ecartament fără RED/UTILIZARE; fără histograme p95/p99.
Alerte pe hardware fără legare la zgomotul → SLO.
Lipsa regulilor de înregistrare → cererile „grele” în incidentele de producție.
Nu există adnotări de eliberare → este dificil să se compare modificările și degradarea.

15) Lista de verificare a implementării (0-45 zile)

0-10 zile

Node/kube-state/cAdvisor exportatori; "/metrics' în servicii.
Tablouri de bord de bază RED/USE; găleți standard histogramă.
Includeți adnotările de eliberare de la CI.

11-25 zile

Reguli de înregistrare pentru SLI; multi-fereastră arde alerte.
HA Prometheus (dublu racla), backup de configurații GitOps.
Alertmanager: rute/mod silențios/rotații de gardă.

26-45 zile

Scrieți de la distanță în Thanos/Cortex/Mimir, stocare pe termen lung.
Optimizarea cardinalității, limite de serie, cereri.
Versiuni SLO-gating și integrare auto-rollback.

16) Valorile maturității

RED/UTILIZARE acoperire pentru servicii cheie ≥ 95%.
Timpul mediu pentru a efectua „grele” PromQL <2 s (p95) din cauza regulilor de înregistrare.
Raportul de alerte utile/zgomotoase este> 3:1.
Cardinalitatea sub control: <10M loturi active pe grup, fără vârfuri.
100% din versiuni sunt adnotate în Grafana și măsurători corelate înainte/după.

17) Fragmente utile

Comparație stabilă vs canar în funcție de versiune

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

Erori 5xx pe traseu

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

saturație CPU container

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

Relația metrică cu piesele (Exemplare activate)

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

18) Concluzie

Prometheus + Grafana este standardul de facto pentru metrici. Câștigă semantica și disciplina: RED/USE, etichete îngrijite, histograme pentru SLO, reguli de înregistrare și alerte SLO. Adăugați HA și stocare pe termen lung, lansați adnotări și integrați cu rollback-uri automate - și aveți o buclă metrică rapidă, scalabilă și economică care vă ajută să luați decizii în vânzări.

Contact

Contactați-ne

Scrieți-ne pentru orice întrebare sau solicitare de suport.Suntem mereu gata să ajutăm!

Telegram
@Gamble_GC
Pornește integrarea

Email-ul este obligatoriu. Telegram sau WhatsApp sunt opționale.

Numele dumneavoastră opțional
Email opțional
Subiect opțional
Mesaj opțional
Telegram opțional
@
Dacă indicați Telegram — vă vom răspunde și acolo, pe lângă Email.
WhatsApp opțional
Format: cod de țară și număr (de exemplu, +40XXXXXXXXX).

Apăsând butonul, sunteți de acord cu prelucrarea datelor dumneavoastră.