Метриканы жинау: Prometheus, Grafana
Метриканы жинау: Prometheus, Grafana
1) Мақсат және шеңбер
Метриктер контурының міндеті - уақыт қатарларын сенімді жинау және сақтау, RCA үшін жылдам PromQL беру, SLO бойынша алерталар және түсінікті дашбордтар. Негізгі жұп: Prometheus (scrape → store → query) және Grafana (визуализация, аллергия, аннотация релиздері). Ұзақ сақтау және жаһандық сұраныс үшін - Thanos/Cortex/Mimir.
2) Деректер моделі және семантика
Серия = метрика атауы + label 'дердің жиынтығы (кілт = мән).
Түрлері: counter, gauge, histogram, summary (көбінесе histogram).
- RED (API): 'rate', 'errors', 'duration' (гистограммалар).
- USE (ресурсы): Utilization, Saturation, Errors (CPU/RAM/Disk/Net).
- Атауы: 'namespace _ subsystem _ metric _ unit' (мысалы, 'http _ server _ requests _ total', 'db _ connections _ current').
Анти-кардиналдық: label's түрлі мәндерін азайтыңыз (label user_id request_id жоқ).
3) Экспонаттау және сервис-дискавери
Экспорттаушылар: node_exporter, kube-state-metrics, cAdvisor, БД/Кезектер (postgres_exporter, redis_exporter, kafka_exporter).
Жеке сервистер: клиенттік кітапханалар (Go/Java/Node/Python) → '/metrics '.
Service Discovery: Kubernetes, EC2/ASG, Consul, static files.
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
Pod аңдатпалары:
yaml prometheus. io/scrape: "true"
prometheus. io/path: /metrics prometheus. io/port: "8080"
4) Гистограммалар мен latency
SLO үшін эксплицитті бакеттерді пайдаланыңыз:- Веб/API: '[10ms, 25,50,100,200,400,800,1600]'
- Төлемдер/төлемдер: 5-10s дейін артқы қосыңыз.
promql histogram_quantile(0. 95,
sum by (le) (rate(http_request_duration_seconds_bucket[5m]))
)
Exemplars (егер қосылған болса):
promql histogram_quantile(0. 95,
sum by (le, route) (rate(traces_spanmetrics_duration_bucket{route="/withdraw"}[5m]))
)
5) Жазу ережелері (recording rules)
Ауыр сұраныстарды қысқартады, 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 және алерталар (multi-window burn)
SLO 99. 9% табысты сұрау/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 (оңайлатылған):
yaml route:
receiver: pager group_by: ["service"]
receivers:
- name: pager slack_configs:
- channel: "#oncall"
send_resolved: true
7) Label-гигиена және үнемдеу
Label's атаулары тұрақты және стандартталған: 'service', 'env', 'region', 'route', 'code', 'version'.
Түбегейлікті шектеңіз: 'route' өлшемдері 'http' үлгісін пайдалануы керек. route '(толық URL емес).
Логика сэмплингі - тресте; метрикаларда - ешқандай user_id жоқ.
Шығу қасиеттері ('service. version ') ескі/жаңа нұсқасын салыстыру үшін пайдалы.
8) Масштабтау және HA
Prometheus - тік және scrape-target бойынша шардирлеу:- Екі Prometheus (A/B) бірдей мақсаттарды қамтиды (HA → алерталар қайталанады).
- Thanos: Sidecar жаһандық сұраныстар және ұзақ мерзімді сақтау (S3/GCS) үшін әрбір Prometheus, Store + Query.
- Балама: Cortex/Mimir (remote-write, көп денелілік, көлденең масштабтау).
yaml remote_write:
- url: https://mimir. example. com/api/v1/push basic_auth: { username: tenantA, password: $MIMIR_TOKEN }
Жергілікті TSDB ретеншн:
yaml
--storage. tsdb. retention. time=15d
--storage. tsdb. max-block-duration=2h
9) Grafana: дашбордтар, алерттар, аннотациялар
Стандартты дашбордтар:1. Platform Overview (SLO/RED, error-budget).
2. API by Route (RPS/5xx/p95, салыстыру 'version').
3. K8s Cluster/Nodes (control-plane, saturation).
4. DB/Cache/Queues (lag/locks/hit ratio/backlog).
5. Per-Release (CI-дегі релиздерге дейін/кейін, аңдатпалар).
Grafana Alerting: PromQL триггерлері, on-call ротациялары, mute-times «релиздер терезелері».
Annotations: CI 'commit', 'image' дегенді қоса береді. tag ', пайплайнға сілтеме.
10) Kubernetes: міндетті түрде өлшеу керек
Control-plane: `apiserver_request_total`, etcd leader/fsync, scheduler latency.
Workloads: restarts, 'container _ cpu _ cfs _ throttled _ seconds _ total', OOM, Pending/Evicted, PDB бұзушылықтары.
Желі: дроптар, conntrack, 'kube-proxy' қателері.
Квоталар/лимиттер: Requests vs Limits, HPA/VPA, түйіндердің saturation.
11) ДҚ/кэштер/кезектер: негізгі сигналдар
PostgreSQL/MySQL: `connections`, `locks`, `deadlocks_total`, `xact_commit/rollback`, replication lag.
Redis: hit ratio, `evictions`, latency `instantaneous_ops_per_sec`.
Kafka/RabbitMQ: consumer lag, unacked, ISR, disk usage.
promql
Queue backlog sum by (topic) (kafka_consumergroup_lag)> 1000
Postgres replication lag max(pg_replication_lag_seconds) > 2
12) Қауіпсіздік және мульти-тенанттық
RBAC к Prometheus/Grafana, datasource-пермишены.
ingress/компоненттер арасындағы TLS/mTLS тізбегі.
Жалға алушыларды оқшаулау: жеке Prometheus немесе tenant-label Cortex/Mimir; серияға және сұрау салуға арналған лимиттер.
Құпиялар - тыйым салынған (PII емес, ID-тикетті пайдаланыңыз).
13) Релиздермен және авто-кері қайтумен интеграциялау
SLO ережелері → AnalysisTemplate (Argo Rollouts) немесе CI-gate.
Burn-алерттер іске қосылғанда - pause/rollback canary; логында/аннотациясында - релизге сілтеме.
Тұрақты және канареялық нұсқаны label 'version' арқылы салыстыру.
14) Типтік қателер (анти-паттерндер)
Label 'дердің бақылаусыз кардиналдылығы (user_id, url. full, динамикалық кілттер).
'env' labelсіз бір кластердегі prod және stage араластыру.
Тек RED/USE жоқ gauge; p95/p99 гистограммасыз.
SLO байланыстырылмаған «темір» бойынша алерталар → шу.
Жоқ recording rules → прод-инциденттерде «ауыр» сұраулар.
Жарияланым аңдатпалары жоқ → өзгерістерді және деградацияларды салыстыру қиын.
15) Енгізу чек-парағы (0-45 күн)
0-10 күн
Node/kube-state/cAdvisor экспорттаушылары; '/metrics 'сервистерде.
Базалық RED/USE дашбордтар; гистограммалардың стандартты бакеттері.
CI бағдарламасынан аңдатпаларды қосу.
11-25 күн
SLI үшін Recording rules; multi-window burn алерта.
HA Prometheus (қос scrape), GitOps конфигурацияларының сақтық көшірмесі.
Alertmanager: маршруттар/тыныш режим/on-call ротация.
26-45 күн
Thanos/Cortex/Mimir-де Remote-write, ұзақ сақтау.
Түбегейлілікті оңтайландыру, серияларға арналған лимиттер, сұрау салулар.
SLO-гейтинг релиздері және auto-rollback интеграциясы.
16) Жетілу метрикасы
Негізгі сервистер бойынша RED/USE қамту 95% ≥.
recording rules есебінен «ауыр» PromQL <2 c (p95) орындаудың орташа уақыты.
Пайдалы/шулы тәуекелдердің қатынасы> 3:1.
Бақылаудағы түбегейлілік: кластерге <10M белсенді сериялары, жарылудың болмауы.
100% релиздерде Grafana аннотациясы және метриктерді дейін/кейін салыстыру бар.
17) Пайдалы сниппеттер
Stable vs canary нұсқасын салыстыру
promql histogram_quantile(0. 95,
sum by (le, version) (rate(http_request_duration_seconds_bucket{version=~"stable canary"}[5m]))
)
Маршруттар бойынша 5xx қателері
promql topk(5,
sum by (route) (rate(http_requests_total{status=~"5.."}[5m]))
)
CPU контейнер saturation
promql rate(container_cpu_cfs_throttled_seconds_total[5m]) > 0. 1
Метриктердің трейстермен байланысы (Exemplars қосылған)
promql sum (rate (http_request_duration_seconds_bucket[5m])) by (le) # clickable to the track
18) Қорытынды
Prometheus + Grafana - метриктер үшін де-факто стандарты. Семантика мен тәртіп жеңіске жетеді: RED/USE, ұқыпты label's, SLO гистограммалары, recording rules және SLO-алерты. HA және ұзақ мерзімді сақтау, релиздердің аннотациялары мен автоматты кері қайтару интеграциясын қосыңыз - сізде өнімдегі шешімдерді қабылдауға көмектесетін жылдам, масштабталатын және үнемді метрика контуры болады.