GH GambleHub

მეტრიკის შეგროვება: Prometheus, Grafana

მეტრიკის შეგროვება: Prometheus, Grafana

1) მიზანი და ჩარჩო

მეტრიკის მიკროსქემის ამოცანაა საიმედოდ შეაგროვოს და შეინახოს დროებითი რიგები, მისცეს სწრაფი PromQL RCA- სთვის, SLO- ს ალერტები და გასაგები დაშბორდები. ძირითადი წყვილი: Prometheus (scrape - store - query) და Grafana (ვიზუალიზაცია, ალერტები, გამოშვების სურათები). გრძელი შენახვისა და გლობალური მოთხოვნისთვის - Thanos/Cortex/Mimir.

2) მონაცემთა მოდელი და სემანტიკა

სერია = მეტრიკის სახელი + label's ნაკრები (გასაღები = მნიშვნელობა).
ტიპები: 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- ის სხვადასხვა მნიშვნელობები (არ არსებობს muser _ id, request _ id label).

3) გამოფენა და დისკუსია

ექსპორტიორები: node _ exporter, kube-state-metrics, cadisor, BD/ეტაპი (postgres _ exporter, redis _ exporter, kafka _ exporter).
საკუთარი სერვისები: კლიენტის ბიბლიოთეკები (Go/Java/Node/Python) - '/metrics '.
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: '[10ms, 25.50,200,400,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) ჩაწერის წესები

ისინი ამცირებენ მძიმე მოთხოვნებს, სტანდარტიზებენ 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 და alerty (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- ის სახელები სტაბილურია და სტანდარტიზებულია: 'service', 'env', 'region', 'route', 'code', 'version'.
შეზღუდეთ კარდინალობა: მეტრიკებმა 'მარშრუტით' უნდა გამოიყენონ შაბლონის 'http. მარშრუტი '(და არა სრული URL).
ლოგიკის სემპლინგი - ტრეისებში; მეტრიკებში - არა user _ id.
გამოშვების თვისებები ('სერვისი. ვერსია ') სასარგებლოა ძველი/ახალი ვერსიის შედარებისთვის.

8) მასშტაბები და HA

Prometheus - ვერტიკალური და შარდვა scrape-target- ზე:
  • ორი Prometheus (A/B) ერთსა და იმავე მიზნებს ამცირებს (HA Alertes დუბლირებულია).
  • Thanos: Sidecar თითოეული Prometheus, Store + Query გლობალური მოთხოვნებისა და გრძელვადიანი შენახვისთვის (S3/GCS).
  • ალტერნატივა: Cortex/Mimir (remote-write, მრავალმხრივი, ჰორიზონტალური სკალირება).
Remote write (მაგალითი):
yaml remote_write:
- url: https://mimir. example. com/api/v1/push basic_auth: { username: tenantA, password: $MIMIR_TOKEN }
Retenshn ადგილობრივი TSDB:
yaml
--storage. tsdb. retention. time=15d
--storage. tsdb. max-block-duration=2h

9) Grafana: Dashbords, alerty, ვიდეოები

სტანდარტული დაშბორდები:

1. Platform Overview (SLO/RED, error-budget).

2. API by Route (RPS/5xx/p95, შედარება 'ვერსია').

3. K8s Cluster/Nodes (control-plane, saturation).

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

5. Per-Release (CI- დან გამოცემების ჩანაწერები).

Grafana Alerting: PromQL გამომწვევი, rotation 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 დარღვევები.
ქსელი: ფრენები, კონტრაკი, 'kube-proxy' შეცდომები.
კვოტები/ლიმიტები: Requests vs Limits, HPA/VPA, saturation კვანძები.

11) BD/ქეში/ხაზები: საკვანძო სიგნალები

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, datasource permichens.
კომპონენტებს შორის TLS/mTLS ჯაჭვი.
მოიჯარეების იზოლაცია: ცალკეული Prometheus ან tenant-label Cortex/Mimir; სერიის ლიმიტები და მოთხოვნა.
საიდუმლოებები ალერტებში/ნოტიფიკაციებში - აკრძალულია (გამოიყენეთ ID თიკეტი და არა PII).

13) ინტეგრაცია გამოშვებებთან და მანქანებთან

SLO წესები AnalysisTemplate (Argo Rollouts) ან CI-gate.
როდესაც burn-alerts ხდება - pause/rollback canary; Dola/countations - ბმული გამოშვებაზე.
სტაბილური და კანარის ვერსიის შედარება label 'version- ის საშუალებით.

14) ტიპიური შეცდომები (ანტი-ნიმუშები)

ლაბელის უკონტროლო კარდინალობა (user _ id, url. სრული, დინამიური გასაღებები).
Stage და stage შერევა ერთ კლასტერში 'env' label- ის გარეშე.
მხოლოდ gauge RED/USE გარეშე; ჰისტოგრამების გარეშე p95/p99.
რკინის ალერტები SLO- ს მითითების გარეშე ხმაურია.
ჩანაწერების არარსებობა „მძიმე“ მოთხოვნაა პროდ ინციდენტებში.
არ არსებობს გამოცემების პრეზენტაციები - ძნელია შედარება ცვლილებებისა და დეგრადაციის შესახებ.

15) განხორციელების სიის სია (0-45 დღე)

0-10 დღე

Node/kube-state/caDadisor ექსპორტიორები; '/metrics 'სერვისებში.
ძირითადი RED/USE დაშბორდები; სტანდარტული ჰისტოგრამების ბაკეტები.
CI- სგან გამოცემების პრეზენტაციების ჩართვა.

11-25 დღე

ჩანაწერების რულეტები SLI- სთვის; multi window burn alerty.
HA Prometheus (ორმაგი სკრაპი), GitOps ჩამორთმევის სარეზერვო ასლი.
Alertmanager: მარშრუტები/მშვიდი რეჟიმი/rotation on-call.

26-45 დღე

Remote write in Thanos/Cortex/Mimir, გრძელი შენახვა.
კარდინალობის ოპტიმიზაცია, სერიების შეზღუდვები, მოთხოვნები.
SLO gating გამოშვებები და auto-rollback ინტეგრაცია.

16) სიმწიფის მეტრიკა

RED/USE დაფარვა საკვანძო სერვისებში 95% -ს შეადგენს.
„მძიმე“ PromQL <2 c (p95) შესრულების საშუალო დრო ჩანაწერების გამო.
სასარგებლო/ხმაურიანი ალერტების თანაფარდობა> 3:1.
კონტროლირებადი კარდინალობა: <10M აქტიური სერია კლასტერზე, ადიდების ნაკლებობა.
გამოშვებების 100% -ს აქვს Grafana- ს მენიუ და მეტრიკის შედარება/მის შემდეგ.

17) სასარგებლო snippets

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 კონტეინერი

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, სისუფთავე ლაბელი, ჰისტოგრამები SLO- ს, ჩანაწერების და SLO ალერტების ქვეშ. დაამატეთ HA და გრძელვადიანი შენახვა, რელიზების ვიდეოები და ავტომატური გამოტოვებით ინტეგრაცია - და თქვენ მიიღებთ სწრაფ, მასშტაბურ და ეკონომიურ მეტრულ მიკროსქემას, რაც ხელს უწყობს გადაწყვეტილების მიღებას გაყიდვაში.

Contact

დაგვიკავშირდით

დაგვიკავშირდით ნებისმიერი კითხვის ან მხარდაჭერისთვის.ჩვენ ყოველთვის მზად ვართ დაგეხმაროთ!

Telegram
@Gamble_GC
ინტეგრაციის დაწყება

Email — სავალდებულოა. Telegram ან WhatsApp — სურვილისამებრ.

თქვენი სახელი არასავალდებულო
Email არასავალდებულო
თემა არასავალდებულო
შეტყობინება არასავალდებულო
Telegram არასავალდებულო
@
თუ მიუთითებთ Telegram-ს — ვუპასუხებთ იქაც, დამატებით Email-ზე.
WhatsApp არასავალდებულო
ფორმატი: ქვეყნის კოდი და ნომერი (მაგალითად, +995XXXXXXXXX).

ღილაკზე დაჭერით თქვენ ეთანხმებით თქვენი მონაცემების დამუშავებას.