GH GambleHub

Մետրի հավաքումը '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:

Կարդինալությունը վերահսկողության տակ է <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-ն և երկարաժամկետ պահպանումը, ածխաջրածինները և ինտեգրումը ավտոմեքենաների արձագանքների հետ, և դուք կստանաք արագ, մեծացված և տնտեսական ստանդարտ, որը օգնում է լուծումներ ընդունել։

Contact

Կապ հաստատեք մեզ հետ

Կապ հաստատեք մեզ հետ ցանկացած հարցի կամ աջակցության համար։Մենք միշտ պատրաստ ենք օգնել։

Telegram
@Gamble_GC
Սկսել ինտեգրացիան

Email-ը՝ պարտադիր է։ Telegram կամ WhatsApp — ըստ ցանկության։

Ձեր անունը ըստ ցանկության
Email ըստ ցանկության
Թեմա ըստ ցանկության
Նամակի բովանդակություն ըստ ցանկության
Telegram ըստ ցանկության
@
Եթե նշեք Telegram — մենք կպատասխանենք նաև այնտեղ՝ Email-ի дополнение-ով։
WhatsApp ըստ ցանկության
Ձևաչափ՝ երկրի կոդ և համար (օրինակ՝ +374XXXXXXXXX)։

Սեղմելով կոճակը՝ դուք համաձայնում եք տվյալների մշակման հետ։