GH GambleHub

Metrlərin toplanması: Prometheus, Grafana

Metrlərin toplanması: Prometheus, Grafana

1) Məqsəd və çərçivə

Metrik konturun vəzifəsi zaman sıralarını etibarlı bir şəkildə toplamaq və saxlamaq, RCA üçün sürətli PromQL vermək, SLO-lar və başa düşülən dashboardlar. Əsas cütlük: Prometheus (scrape → store → query) və Grafana (vizualizasiya, alert, relizlərin izahları). Uzun saxlama və qlobal tələb üçün - Thanos/Cortex/Mimir.

2) Data modeli və semantika

Seriya = metrika adı + label's dəsti (açar = qiymət).
Növləri: counter, gauge, histogram, summary.

Semantika:
  • RED (API): 'rate', 'errors', 'duration' (histoqramlar).
  • USE (ресурсы): Utilization, Saturation, Errors (CPU/RAM/Disk/Net).
  • Adı: 'namespace _ subsystem _ metric _ unit' (məsələn, 'http _ server _ requests _ total', 'db _ connections _ current').

Anti-kardinallıq: müxtəlif etiket qiymətlərini minimuma endirin (etiketə user_id request_id yoxdur).

3) Ekspozisiya və dispers xidməti

İxracatçılar: node_exporter, kube-state-metrics, cAdvisor, DB/Növbələr (postgres_exporter, redis_exporter, kafka_exporter).
Öz xidmətləri: müştəri kitabxanaları (Go/Java/Node/Python) → '/metrics '.
Service Discovery: Kubernetes, EC2/ASG, Consul, static files.

Əsas 'prometheus. yml '(fraqment):
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 'ların şərhləri:
yaml prometheus. io/scrape: "true"
prometheus. io/path: /metrics prometheus. io/port: "8080"

4) Histoqramlar və latency

SLO-larınız üçün sərfəli baketlərdən istifadə edin:
  • Veb/API: '10ms, 25,50,100,200,400,800,1600]'
  • Ödənişlər/ödənişlər: 5-10s qədər quyruq əlavə edin.
PromQL p95:
promql histogram_quantile(0. 95,
sum by (le) (rate(http_request_duration_seconds_bucket[5m]))
)
Exemplars ilə (daxil olduqda):
promql histogram_quantile(0. 95,
sum by (le, route) (rate(traces_spanmetrics_duration_bucket{route="/withdraw"}[5m]))
)

5) Qeydiyyat qaydaları (recording rules)

Ağır sorğuları azaltın, SLI standartlaşdırın.

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 və alertlər (multi-window burn)

SLO 99. 9% uğurlu sorğular/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 (sadələşdirilmiş):
yaml route:
receiver: pager group_by: ["service"]
receivers:
- name: pager slack_configs:
- channel: "#oncall"
send_resolved: true

7) Label gigiyena və qənaət

Label adları sabitdir və standartlaşdırılmışdır: 'service', 'env', 'region', 'route', 'code', 'version'.
Kardinallığı məhdudlaşdırın: 'route' metrikləri 'http' şablonundan istifadə etməlidir. route '(tam URL deyil).
Sampling məntiq - treys; metrik - heç bir user_id.
Reliz xüsusiyyətləri ('service. version ') köhnə/yeni versiyasını müqayisə etmək üçün faydalıdır.

8) Ölçmə və HA

Prometheus - şaquli və scrape-target charding:
  • İki Prometheus (A/B) eyni hədəfləri gizlədir (HA → alertlər təkrarlanır).
  • Thanos: Sidecar hər Prometheus, Store + Query qlobal sorğular və uzunmüddətli saxlama üçün (S3/GCS).
  • Alternativ: Cortex/Mimir (remote-write, multitenant, üfüqi miqyas).
Remote write (nümunə):
yaml remote_write:
- url: https://mimir. example. com/api/v1/push basic_auth: { username: tenantA, password: $MIMIR_TOKEN }
Yerli TSDB Retenshn:
yaml
--storage. tsdb. retention. time=15d
--storage. tsdb. max-block-duration=2h

9) Grafana: daşbordlar, alertlər, izahatlar

Standart daşbordlar:

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

2. API by Route (RPS/5xx/p95, müqayisə 'version').

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

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

5. Per-Release (əvvəl/sonra, CI buraxılışlarının şərhləri).

Grafana Alerting: PromQL, on-call rotasiyaları, mute-times «buraxılış pəncərələri» ilə tetikləyicilər.

Annotations: CI 'commit', 'image' ilə buraxılış hadisəsini əlavə edir. tag ', paypline-ə keçid.

10) Kubernetes: ölçmək lazımdır

Control-plane: `apiserver_request_total`, etcd leader/fsync, scheduler latency.
Workloads: restarts, 'container _ cpu _ cfs _ throttled _ seconds _ total', OOM, Pending/Evicted, PDB pozuntuları.
Şəbəkə: damcılar, conntrack, 'kube-proxy' səhvləri.
Kvotalar/Limitlər: Requests vs Limits, HPA/VPA, düyünlərin saturasiyası.

11) BD/caches/növbələr: açar siqnallar

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 nümunələri:
promql
Queue backlog sum by (topic) (kafka_consumergroup_lag)> 1000

Postgres replication lag max(pg_replication_lag_seconds) > 2

12) Təhlükəsizlik və çox tenant

RBAC Prometheus/Grafana, datasource-permishen.
ingress/komponentlər arasında TLS/mTLS zənciri.
Kirayəçilərin izolyasiyası: Cortex/Mimir-də ayrı Prometheus və ya tenant-label; seriya və sorğu üçün limitlər.
Alert/notifikasiyalarda sirrlər qadağandır (PII deyil, şəxsiyyət vəsiqəsindən istifadə edin).

13) Relizlər və avtomatik geri dönüşlərlə inteqrasiya

SLO qaydaları → AnalysisTemplate (Argo Rollouts) və ya CI-gate.
Burn-alertlər işə salındıqda - pause/rollback canary; log/izahında - buraxılışa keçid.
label 'version' vasitəsilə sabit və kanarya versiyası müqayisə.

14) Tipik səhvlər (anti-nümunələr)

Label 'lerin nəzarətsiz kardinallığı (user_id, url. full, dinamik açarlar).
env 'label olmadan bir klasterdə prod və stage qarışdırın.
RED/USE olmadan yalnız gauge; histoqramsız p95/p99.
SLO → səs-küy bağlı olmadan «dəmir» Alerts.
No recording rules → «ağır» prob-insidentlər sorğular.
No Release elanları → Dəyişiklik və deqradasiyanı müqayisə etmək çətindir.

15) Giriş çek siyahısı (0-45 gün)

0-10 gün

Node/kube-state/cAdvisor ixracatçıları; '/metrics 'xidmətlərində.
Əsas RED/USE dashboard; standart histoqram baketləri.
CI-dən buraxılış qeydlərini daxil edin.

11-25 gün

SLI üçün Recording rules; multi-window burn alert.
HA Prometheus (ikiqat scrape), GitOps konfiqurasiya ehtiyat.
Alertmanager: marşrutlar/sakit rejimi/on-call rotasiya.

26-45 gün

Thanos/Cortex/Mimir Remote-write, uzun müddət saxlama.
Kardinallığın optimallaşdırılması, seriya limitləri, sorğular.
SLO-geytinq relizlər və auto-rollback inteqrasiya.

16) Yetkinlik metrikası

Əsas xidmətlər üzrə RED/USE əhatə dairəsi ≥ 95%.
recording rules hesabına «ağır» PromQL <2 c (p95) orta vaxt.
Faydalı/səs-küylü alertlərin nisbəti> 3:1.
nəzarət altında kardinallıq: <10M aktiv seriyası, heç bir sıçrayış.
100% relizlər Qrafana və/sonra metrik müqayisə bir açıqlama var.

17) Faydalı snippet

Versiyası üzrə stable vs canary müqayisə

promql histogram_quantile(0. 95,
sum by (le, version) (rate(http_request_duration_seconds_bucket{version=~"stable    canary"}[5m]))
)

Marşrutlar üzrə 5xx səhvləri

promql topk(5,
sum by (route) (rate(http_requests_total{status=~"5.."}[5m]))
)

CPU saturation konteyner

promql rate(container_cpu_cfs_throttled_seconds_total[5m]) > 0. 1

Metriklərin treyslərlə əlaqəsi (Exemplars daxildir)

promql sum (rate (http_request_duration_seconds_bucket[5m])) by (le) # clickable to the track

18) Nəticə

Prometheus + Grafana metriklər üçün faktiki standartdır. Semantika və nizam-intizam qazanır: RED/USE, səliqəli etiketlər, SLO altında histoqramlar, recording rules və SLO-alertlər. HA və uzunmüddətli saxlama, buraxılış qeydləri və avtomatik geri dönüşlərlə inteqrasiya əlavə edin - və siz məhsulda qərar qəbul etməyə kömək edən sürətli, ölçülə bilən və qənaətli bir metrik kontura sahib olacaqsınız.

Contact

Bizimlə əlaqə

Hər hansı sualınız və ya dəstək ehtiyacınız varsa — bizimlə əlaqə saxlayın.Həmişə köməyə hazırıq!

Telegram
@Gamble_GC
İnteqrasiyaya başla

Email — məcburidir. Telegram və ya WhatsApp — istəyə bağlıdır.

Adınız istəyə bağlı
Email istəyə bağlı
Mövzu istəyə bağlı
Mesaj istəyə bağlı
Telegram istəyə bağlı
@
Əgər Telegram daxil etsəniz — Email ilə yanaşı orada da cavab verəcəyik.
WhatsApp istəyə bağlı
Format: ölkə kodu + nömrə (məsələn, +994XXXXXXXXX).

Düyməyə basmaqla məlumatların işlənməsinə razılıq vermiş olursunuz.