Metrikler koleksiyonu: Prometheus, Grafana
Metrikler koleksiyonu: Prometheus, Grafana
1) Amaç ve çerçeve
Metrik döngüsünün görevi, zaman serilerini güvenilir bir şekilde toplamak ve depolamak, RCA, SLO uyarıları ve anlaşılır panolar için hızlı PromQL vermektir. Temel çift: Prometheus (kazıma> mağaza> sorgu) ve Grafana (görselleştirme, uyarılar, sürüm açıklamaları). Uzun depolama ve global sorgu için - Thanos/Cortex/Mimir.
2) Veri modeli ve semantik
Seri = metrik adı + etiket kümesi (anahtar = değer).
Türleri: sayaç, gauge, histogram, özet (prod - daha sık histogram).
- RED (API): 'rate', 'errors', 'duration' (histograms).
- KULLANIM (ресурсы): Kullanım, Doygunluk, Hatalar (CPU/RAM/Disk/Net).
- Adlandırma: 'namespace _ subsystem _ metric _ unit' (örneğin, 'http _ server _ requests _ total', 'db _ connections _ current').
Anti-kardinalite: farklı etiket değerlerini en aza indirin (etikette user_id request_id yok).
3) Pozlama ve hizmet keşfi
İhracatçılar: node_exporter, kube-state-metrics, cAdvisor, DB/Queues (postgres_exporter, redis_exporter, kafka_exporter).
Yerel hizmetler: istemci kütüphaneleri (Go/Java/Node/Python) -'/metrikler '.
Hizmet Keşfi: Kubernetes, EC2/ASG, Consul, statik dosyalar.
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
Bölmelerin ek açıklamaları:
yaml prometheus. io/scrape: "true"
prometheus. io/path: /metrics prometheus. io/port: "8080"
4) Histogramlar ve gecikme süresi
SLO'larınız için açık kovalar kullanın:- Web/API: '[10ms, 25,50,100,200,400,800,1600]'
- Ödemeler/ödemeler: 5-10'lara kuyruk ekleyin.
promql histogram_quantile(0. 95,
sum by (le) (rate(http_request_duration_seconds_bucket[5m]))
)
Exemplars ile (etkinse):
promql histogram_quantile(0. 95,
sum by (le, route) (rate(traces_spanmetrics_duration_bucket{route="/withdraw"}[5m]))
)
5) Kayıt kuralları
Ağır istekleri azaltın, SLI'yi standartlaştı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 ve uyarılar (çoklu pencere yanması)
SLO 99. %9 Başarılı Requests/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 (basitleştirilmiş):
yaml route:
receiver: pager group_by: ["service"]
receivers:
- name: pager slack_configs:
- channel: "#oncall"
send_resolved: true
7) Etiket-hijyen ve ekonomi
Etiket adları kararlı ve standarttır: 'hizmet', 'env', 'bölge', 'rota', 'kod', 'sürüm'.
Kardinaliteyi sınırla: 'Rota'ile metrikler' http 'desenini kullanmalıdır. route '(tam URL değil).
Mantık örneklemesi - izde; Metriklerde - user_id yok.
Sürüm özellikleri ('hizmeti. ') sürümü eski/yeni sürümleri karşılaştırmak için kullanışlıdır.
8) Ölçeklendirme ve HA
Prometheus - dikey olarak ve kazıma hedefiyle:- İki Prometheus (A/B) aynı hedefleri kazır (HA - uyarılar çoğaltılır).
- Thanos: Her Prometheus için Sidecar, global sorgular ve uzun süreli depolama (S3/GCS) için Store + Query.
- Alternatif: Cortex/Mimir (uzaktan yazma, çoklu kiracılık, yatay ölçeklendirme).
yaml remote_write:
- url: https://mimir. example. com/api/v1/push basic_auth: { username: tenantA, password: $MIMIR_TOKEN }
Yerel TSDB Tutma:
yaml
--storage. tsdb. retention. time=15d
--storage. tsdb. max-block-duration=2h
9) Grafana: gösterge panoları, uyarılar, ek açıklamalar
Standart panolar:1. Platforma Genel Bakış (SLO/RED, hata bütçesi).
2. API by Route (RPS/5xx/p95, karşılaştırma 'sürümü').
3. K8s Küme/Düğümler (kontrol düzlemi, doygunluk).
4. DB/Önbellek/Kuyruklar (lag/locks/hit ratio/backlog).
5. Serbest Bırakma Başına (CI'dan önce/sonra, serbest bırakma ek açıklamaları).
Grafana Uyarı: PromQL'deki tetikleyiciler, çağrı dönüşleri, sessiz zamanlar "serbest bırakma pencereleri".
Ek Açıklamalar: CI, 'commit','image'ile bir sürüm olayı ekler. Tag ', boru hattına bir gönderme.
10) Kubernetes: ne ölçülür
Denetim düzlemi: 'apiserver _ request _ total', etcd lideri/fsync, zamanlayıcı gecikmesi.
İş yükleri: yeniden başlatır, 'container _ cpu _ cfs _ throttled _ seconds _ total', OOM, Bekleyen/Tahliye, PDB ihlalleri.
Ağ: düşer, conntrack, 'kube-proxy' hataları.
Kotalar/limitler: İstekler vs Limitler, HPA/VPA, düğüm doygunluğu.
11) DB/önbellekler/kuyruklar: anahtar sinyaller
PostgreSQL/MySQL: 'connections', 'locks', 'deadlocks _ total', 'xact _ commit/rollback', replication lag.
Redis: isabet oranı, 'tahliyeler', gecikme 'anlık _ ops _ per _ sec'.
Kafka/RabbitMQ: tüketici gecikmesi, paketlenmemiş, ISR, disk kullanımı.
promql
Queue backlog sum by (topic) (kafka_consumergroup_lag)> 1000
Postgres replication lag max(pg_replication_lag_seconds) > 2
12) Güvenlik ve çoklu kiracılık
Prometheus/Grafana RBAC, veri kaynağı-permishens.
Giriş/bileşenler arasında TLS/mTLS zinciri.
Kiracı izolasyonu: Cortex/Mimir'de ayrı Prometheus veya kiracı etiketi; seri ve talep limitleri.
Uyarılar/bildirimlerdeki sırlar - yasaktır (PII değil bilet kimliği kullanın).
13) Sürümler ve otomatik geri dönüşlerle entegrasyon
SLO kuralları - AnalysisTemplate (Argo Rollouts) veya CI-gate.
Yanma uyarıları tetiklendiğinde - duraklatma/geri alma kanaryası; log/annotation - serbest bırakma için bir bağlantı.
Stabil ve kanarya versiyonlarının "versiyon" etiketi ile karşılaştırılması.
14) Tipik hatalar (anti-desenler)
Etiketlerin kontrolsüz kardinalitesi (user_id, url. tam, dinamik anahtarlar).
Prod karıştırın ve 'env' label olmadan aynı kümede sahne.
KIRMIZI/KULLANIM olmadan sadece ölçer; P95/p99 histogramları olmadan.
SLO'ya bağlanmadan donanımda uyarılar - gürültü.
Kayıt kurallarının eksikliği - üretim olaylarında'ağır "istekler.
Hiçbir sürüm ek açıklaması yoktur - değişiklikleri ve bozulmayı karşılaştırmak zordur.
15) Uygulama kontrol listesi (0-45 gün)
0-10 gün
Node/kube-state/cAdvisor ihracatçıları; Hizmetlerde'/metrikler '.
Temel KIRMIZI/KULLANIM panoları; Standart histogram kovaları.
CI'dan yayın ek açıklamaları ekleyin.
11-25 gün
SLI için kayıt kuralları; Çoklu pencere yakma uyarıları.
HA Prometheus (çift kazıma), GitOps yapılandırmalarının yedeklenmesi.
Alertmanager: rotalar/sessiz mod/çağrı üzerine rotasyonlar.
26-45 gün
Uzaktan yazma Thanos/Cortex/Mimir, uzun süreli depolama.
Kardinalite optimizasyonu, seri limitleri, istekler.
SLO-gating sürümleri ve otomatik geri alma entegrasyonu.
16) Olgunluk metrikleri
Kilit hizmetler için RED/USE kapsamı %95 ≥.
Kayıt kuralları nedeniyle'ağır "PromQL <2 s (p95) gerçekleştirmek için ortalama süre.
Yararlı/gürültülü uyarıların oranı> 3:1'dir.
Kontrol altında kardinalite: Küme başına <10M aktif partiler, sivri yok.
Yayınların %100'ü Grafana'da açıklanmıştır ve önce/sonra ilişkili metrikler.
17) Yararlı snippet'ler
Versiyona göre kararlı vs kanarya karşılaştırması
promql histogram_quantile(0. 95,
sum by (le, version) (rate(http_request_duration_seconds_bucket{version=~"stable canary"}[5m]))
)
5xx Rotaya Göre Hatalar
promql topk(5,
sum by (route) (rate(http_requests_total{status=~"5.."}[5m]))
)
konteyner CPU doygunluğu
promql rate(container_cpu_cfs_throttled_seconds_total[5m]) > 0. 1
Parçalarla metrik ilişkisi (Örnekler etkin)
promql sum (rate (http_request_duration_seconds_bucket[5m])) by (le) # clickable to the track
18) Sonuç
Prometheus + Grafana metrikler için fiili standarttır. Anlambilim ve disiplin kazanır: KIRMIZI/KULLANIM, düzgün etiketler, SLO için histogramlar, kayıt kuralları ve SLO uyarıları. HA ve uzun vadeli depolama, sürüm ek açıklamaları ve otomatik geri dönüşlerle entegrasyon ekleyin; satışlarda karar vermenize yardımcı olan hızlı, ölçeklenebilir ve ekonomik bir metrik döngünüz olur.