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).
- 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.
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 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).
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.
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.