Մետրի հավաքումը 'Prometheus, Grafana
Մետրի հավաքումը 'Prometheus, Grafana
1) Նպատակը և շրջանակը
Ռուսական մետրիկի խնդիրն է վստահորեն հավաքել և պահել ժամանակային շարքերը, տալ արագ PromQL-ը RCA-ի համար, SLO-ի ալտերտերը և հասկանալի dashbords։ Ռուսական զույգը 'Prometheus (scrape www.store www.query) և Grafana (տեսողական, ալտերտեր, ածխաջրածիններ)։ Երկար պահեստավորման և գլոբալ հարցման համար 'Thanos/Wintex/Mimir։
2) Տվյալների և իմաստաբանության մոդել
Շարքը = մետրիկի անունը + label's հավաքածու (բանալին = արժեք)։
Տեսակներ ՝ counter, gauge, histogram, summary (վաճառքում ավելի հաճախ histogram)։
Սեմանտիկան
RED (API) ՝ «rate», «errors», «duration» (histrams)։
USE (ресурсы): Utilization, Saturation, Errors (CPU/RAM/Disk/Net).
Անվանումը '«namespace _ www.system _ metric _ unit» (օրինակ ՝ «htttp _ server _ reques.ru _ total», «db _ connections _ current»)։
Anti-կարդինալությունը 'նվազեցրեք label' s արժեքները (ոչ user _ id, request _ id label)։
3) Էքսպոնիզացիա և դիսկավերի ծառայություն
Դիսպետչերներ ՝ node _ exporter, kube-state-metrance, cAdvisor, BD/Հերթեր (postgres _ exporter, redis _ exporter, kafka _ exporter)։
Սեփական ծառայությունները 'հաճախորդների գրադարաններ (Go/Java/Node/Python) 2019 '/metr.ru "։
Service Discovery: Kubernetes, EC2/ASG, Consul, static files.
Հիմնական 'prometheus. yml '(հատված)
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's
yaml prometheus. io/scrape: "true"
prometheus. io/path: /metrics prometheus. io/port: "8080"
4) Histograms և latency
Օգտագործեք ցուցանմուշներ ձեր SLO-ի տակ
Վեբ/API: <<[1007, 2550,100,2000,4000.800,1600]>
Վճարումները/վճարումները 'ավելացնել պոչը մինչև 5-10s։
PromQL p95: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 և alerts (multi-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-ի անունները կայուն և ստանդարտացված են ՝ «ww.d.», «region», «rope», «code», «version»։
Սահմանափակեք կարդինալությունը 'մետրերը' «rope» -ի հետ պետք է օգտագործեն ձևանմուշը 'htttp։ rome '(ոչ թե ամբողջական URL)։
Տրամաբանության Սեմփլինգը թրեյսերում է։ մետրերում 'ոչ user _ id։
Ֆոսֆորի հատկությունները (")։ version ') օգտակար է համեմատել հին/նոր տարբերակը։
8) Լայնացում և HA
Prometheus-ը ուղղահայաց և շարդիզացիա է scrape-target-ով
Երկու Prometheus (A/B) կփակեն նույն նպատակները (HA) կրկնօրինակվում են)։
Thanos: Sidecar-ը յուրաքանչյուր Prometheus, Store + Query գլոբալ հարցումների և երկարաժամկետ պահեստավորման համար (S3/GCS)։
Այլընտրանքը ՝ Distex/Mimir (remote-write, բազմաբնույթ, հորիզոնական մեծացում)։
Remote write (օրինակ)
yaml remote_write:
- url: https://mimir. example. com/api/v1/push basic_auth: { username: tenantA, password: $MIMIR_TOKEN }
Retenshn no TSDB։
yaml
--storage. tsdb. retention. time=15d
--storage. tsdb. max-block-duration=2h
9) Grafana 'dashbords, alerts, ծանոթագրություններ,
Dashbords
1. Platform Overview (SLO/RED, error-budget).
2. API by Roult (RPS/5xx/p95, համեմատություն 'version')։
3. K8s Cluster/Nodes (control-plane, saturation).
4. DB/Cache/Queues (lag/locks/hit ratio/backlog).
5. Per-Rele.ru (մինչև/հետո, CI-ից ածխաջրածինների հայտնաբերումը)։
Grafana Alerting: PromQL-ի, on-call-times-times-ի հետ։
Annot.ru: CI-ն ավելացնում է ռելիզային իրադարձությունը "commit", "image. 111 ', հղում անելով www.pline-ին։
10) Kubernetes 'ինչ պետք է չափել
Control-plane: `apiserver_request_total`, etcd leader/fsync, scheduler latency.
Workloads: Workloads: Restarts, «www.ainer _ cu _ trottled _ seconds _ total», OFC, Pending/Evicted, PDB խախտումներ։
Ցանցը 'drops, conntrack, «kube-proxy» սխալներ։
Քվոտաներ/լիմիտներ ՝ Requesensvs Limits, HPA/SNA, saturation հանգույցներ։
11) BD/kashi/հերթը 'հիմնական ազդանշաններ
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-ի օրինակները
promql
Queue backlog sum by (topic) (kafka_consumergroup_lag)> 1000
Postgres replication lag max(pg_replication_lag_seconds) > 2
12) Անվտանգություն և մուլտֆիլմ-տենանտիզմ
RBAC-ը Prometheus/Grafana-ին, intasource-permishen-ին։
TFC/mTSA շղթան ingress/բաղադրիչների միջև։
Վարձակալների մեկուսացումը 'առանձին Prometheus կամ tenault-label Cortex/Mimir; սահմաններ շարքի և հարցման համար։
Գաղտնիքները ալերտներում/նոտացիաներում արգելված են (օգտագործեք ID ticet, ոչ թե PII)։
13) Էքսպոզիցիայի և մեքենայի արձագանքների հետ ինտեգրումը
SLO կանոնները կատարվում են AnalysTemplate (Argo Rollouts) կամ CI-gate։
Burn-alerts-ի աշխատելիս 'pause/rollback canary; բլոգում/ծանոթագրություններում հղում է թողարկմանը։
Կայուն և կանարական տարբերակի համեմատությունը label 'version-ի միջոցով։
14) Տիպիկ սխալներ (հակատիպեր)
Անվերահսկելի կարդինալություն label's (user _ id, ul. fox, դինամիկ բանալիներ)։
Մեկ կլաստերի մեջ կոդավորման և stage խառնուրդը առանց «env 'label» -ի։
Միայն gauge առանց RED/USE; առանց հիստոգրամ p95/p99։
Ալերտները «երկաթով» առանց SLO-ի ավելացման աղմուկը։
Recording rules-ի բացակայությունը բացատրում է «ծանր» հարցումները պրոդ միջադեպերում։
Ոչ մի օրինաչափություն չկա, որը դժվար է համեմատել փոփոխությունների և քայքայման հետ։
15) Ներդրման թուղթ (0-45 օր)
0-10 օր
Node/kube-state/cAdvisor բաժնետերերը; «/metr.ru »ծառայություններում։
Հիմնական RED/USE dashbords; Բակտիգիստոգրամ։
Միացրեք CI-ից ածխաջրածինների ծանոթությունները։
11-25 օր
Recording rules SLI-ի համար; multi-burn alerta։
HA Prometheus (կրկնակի scrape), GitOps-ի դելեգների պահեստային պատճենը։
Alertmanager: երթուղիներ/հանգիստ ռեժիմ/ռոտացիաներ on-call։
26-45 օր
Remote-write-ում Thanos/Wintex/Mimir-ում, երկար պահպանումը։
Կարդինալության օպտիմիզացումը, շարքի սահմանները, հարցումները։
SLO-geiting ածխաջրածինների և 71-rollback ինտեգրման։
16) Հասունության մետրերը
RED/USE-ի ծածկումը հիմնական ծառայություններում 95 տոկոսն է։
«Ծանր» PromQL <2 c (p95) կատարման միջին ժամանակը recording rules-ի միջոցով։
Օգտակար/աղմկոտ ալերտների հարաբերակցությունը> 3: 1։
Կարդինալությունը վերահսկողության տակ է <10M ակտիվ շարքը կլաստերի վրա, աճի բացակայությունը։
Ածխաջրածինների 100 տոկոսը ունեն Գրաֆանայում և համեմատելով մետրը մինչև/հետո։
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 - www.de ֆակտո մետրի համար։ Հաղթում են սեմանտիկան և կարգապահությունը 'RED/USE, կոկիկ label' a, histrams SLO-ի տակ, recording rules և SLO-alerts։ Ավելացրեք HA-ն և երկարաժամկետ պահպանումը, ածխաջրածինները և ինտեգրումը ավտոմեքենաների արձագանքների հետ, և դուք կստանաք արագ, մեծացված և տնտեսական ստանդարտ, որը օգնում է լուծումներ ընդունել։