Prometheus: metrik toplama
(Bölmə: Texnologiya və Infrastruktur)
Qısa xülasə
Prometheus vaxt metrləri üçün sənaye standartıdır: HTTP-də hədəfləri sürüşdürür, TSDB-də seriyaları saxlayır, PromQL-də aqreqatları və Alertmanager vasitəsilə alert tetikleyicilərini nəzərdən keçirir. iGaming üçün SLO yanaşmasının (RED/USE, ödənişlərin biznes metrikası), p95/p99 sürətli diaqnostikasının və avtomatik həllərin (freeze/rollback) əsasını təşkil edir.
1) Data modeli və kardinallıq
Metrika:' name {label1 =» v1», label2 =» v2»} value @ timestamp'.
Kardinallıq = bütün unikal etiket dəstlərinin gücünün hasilatı; əsas dəyər faktoru.
- базовые: `service`, `env`, `region`, `instance`, `pod`, `container`, `version`;
- domenlər: 'route', 'psp', 'tenant' (diqqətli olun!), 'game _ provider'.
- 'user _ id', 'session _ id', təsadüfi/yüksək kardinal qiymətlər qoymaq olmaz.
2) Metrik növləri
Counter - yalnız böyüyür (məsələn, 'http _ requests _ total').
Gauge - ani qiymətlər (məsələn, 'queue _ depth').
Histogram/Summary - gizli paylanması. Prod - Histogram ('histogram _ quantile ()' və exemplars dəstəyi ilə).
Native Histograms - dəyişən baketlər, dəqiqliyi artırır və ölçüyə qənaət edir (mövcud olan yerdə daxil edin).
go var httpLatency = prometheus. NewHistogramVec(
prometheus. HistogramOpts{
Name: "http_request_duration_seconds",
Help: "HTTP latency",
Buckets: prometheus. DefBuckets ,//or custom
},
[]string{"route","method"},
)
3) İxracatçılar və nə ölçmək
Xidmət: kodunuz (Go/Java/Node/Python üçün SDK), RED API metrikası, biznes metrikası (ödəniş çevirməsi).
Sistem: node_exporter, cAdvisor/kubelet.
Üçüncü tərəf: DB/caches (mysqld_exporter, postgres_exporter, redis_exporter), NGINX/HAProxy, Kafka/RabbitMQ.
OTEL metrika: OpenTelemetry Collector → Prometheus Remote Write və ya Prometheus-receiver → vasitəsilə ümumi yığın.
4) Scrape və relabel: hədəfləri necə qoşmaq olar
Əsas 'prometheus. yml`
yaml global:
scrape_interval: 15s evaluation_interval: 15s external_labels:
env: "prod"
region: "eu-west"
scrape_configs:
- job_name: 'node'
static_configs:
- targets: ['10. 0. 1. 10:9100','10. 0. 1. 11:9100']
- job_name: 'payments-api'
metrics_path: /metrics scheme: https tls_config:
ca_file: /etc/ssl/ca. crt cert_file: /etc/ssl/tls. crt key_file: /etc/ssl/tls. key relabel_configs:
- source_labels: [__address__]
regex: '(.):\d+'
target_label: instance replacement: '$1'
Kubernetes через Prometheus Operator
Əl 'scrape _ configs' əvəzinə ServiceMonitor/PodMonitor istifadə edin.
yaml apiVersion: monitoring. coreos. com/v1 kind: ServiceMonitor metadata: { name: payments-api }
spec:
selector: { matchLabels: { app: payments-api } }
namespaceSelector: { matchNames: [ "prod" ] }
endpoints:
- port: metrics interval: 15s scheme: http relabelings:
- action: replace targetLabel: service replacement: "payments-api"
K8s şərhlər (Operator olmadan, sadələşdirilmiş)
yaml metadata:
annotations:
prometheus. io/scrape: "true"
prometheus. io/port: "9102"
prometheus. io/path: "/metrics"
5) Saxlama: TSDB, WAL və retenshn
WAL (Write-Ahead Log) → bərpa sonra sürətli bərpa.
Compaction: blokların sıxılması, disk/CPU qənaət.
Retenshn: isti məlumatları 7-30 gün saxlayın; uzunmüddətli - çıxarın (bax: «Miqyas»).
- `--storage. tsdb. retention. time=15d`
- `--storage. tsdb. max-block-chunk-segment-size`
- Disk: sürətli SSD/NVMe; ehtiyac olmadan şəbəkə cildlərindən çəkinin.
6) PromQL: əsasları və tez-tez nümunələr
Rate/irate
promql rate(http_requests_total{route="/deposit"}[5m])
Səhvlər və uğurlu payı
promql sum(rate(http_requests_total{status=~"2.. 3.."}[5m]))
/ sum(rate(http_requests_total[5m]))
p95 gecikmə
promql histogram_quantile(0. 95,
sum by (le, route) (rate(http_request_duration_seconds_bucket[5m]))
)
Növbələr/doyma
promql max(queue_depth{queue="withdrawals"}) by (region)
7) Recording rules və performans
Ağır ifadələri əvvəlcədən hesablayın və seriya kimi saxlayın.
yaml groups:
- name: api. rules interval: 30s rules:
- record: job:http:request_duration_seconds:p95 expr:
histogram_quantile(0. 95,
sum by (le, job) (rate(http_request_duration_seconds_bucket[5m])))
- record: job:http:success_ratio expr:
sum(rate(http_requests_total{status=~"2.. 3.."}[5m]))
/ sum(rate(http_requests_total[5m]))
Plus: sürətli dashboard, Prometheus CPU-da daha az yük.
8) Alerting и SLO (burn rate)
Burn-rate alert (multi-window, multi-burn)
yaml groups:
- name: slo. payments rules:
- alert: PaymentsSLOFastBurn expr: (1 - job:http:success_ratio{job="payments-api"}) > (1 - 0. 999) 14 for: 5m labels: { severity: "page" }
annotations:
summary: "SLO fast burn"
runbook: "https://runbooks/payments/slo"
- alert: PaymentsSLOSlowBurn expr: (1 - job:http:success_ratio{job="payments-api"}) > (1 - 0. 999) 6 for: 1h labels: { severity: "ticket" }
Alertmanager: xidmətlər/regionlar üzrə marşrutlaşdırma, dublikatların boğulması, ChatOps.
9) Tracking və log ilə korrelyasiya
exemplars-ı daxil edin: histoqram baketlərində 'trace _ id' tıklayın.
«release compare» üçün 'service', 'version', 'region' etiketlərini metriklərə qoyun.
Daşbordlarda - relizlərin şərhləri (Git SHA/versiyası).
10) Miqyaslı və uzunmüddətli saxlama
Federasiya: üst Prometheus alt (job/label-filters) birləşdirir.
Remote Write: uzun saxlama backends/klasterlər (Thanos/Cortex/Mimir) sıraları göndərmək.
Üstünlüklər: sonsuz retenshn, üfüqi miqyas, qlobal görünüş.
Mənfi cəhətləri: daha çətin əməliyyat, dəyəri.
Funksiyalara görə şardinq: sistem metrikləri, biznes, təhlükəsizlik üçün ayrı-ayrı instansiyalar.
11) Təhlükəsizlik
TLS/mTLS/Alertmanager/remote _ write.
/ targets və API üçün əsas/token autentifikasiyası (proksasiya şlüzündən əvvəl).
RBAC: UI/rollar seriyasına girişi məhdudlaşdırın; şəxsi etiketləri gizlətmək.
PII-gigiyena: PII metrik yazmayın; hash/təxəllüslər istifadə edin.
12) Kubernetes-praktikalar
Prometheus Operator: CRD (ServiceMonitor, PodMonitor, Alertmanager, Prometheus).
kube-state-metrics + cAdvisor → klaster tam şəkil.
Teyninqlər və resurslar: monitorinq üçün ayrılmış nodlar; CPU/RAM limitləri.
Səs-küy azaldılması: «istehsal» nişanlar üçün etiket seçiciləri, paddinq scrape_interval mümkün olan yerlərdə.
13) Biznes metrika və məhsul
Платежи: `payments_success_total{psp, currency}`, `payment_conversion_ratio`, `ttw_seconds_histogram`.
Oyun fəaliyyəti: bahislər/dəq, gauge kimi sessiyaların saxlanması, səhvlər zamanı drop-off.
Risk/frod: sürət anomaliyaları/geo; ayrıca loging, metrik - aqreqatlar.
14) Qiymət və performans (FinOps)
Kardinallığa nəzarət edin (yeni etiket əlavə etməzdən əvvəl teq-revyu).
Sampling histogram/nadir ixracatçılar → 'scrape _ interval' ↑ qeyri-kritik hədəflər üçün.
Uzun saxlama arxalarında Downsampling.
Dashboard caching və recording rules geniş dayaq.
15) «Sürətli başlanğıc» nümunələri
Tətbiqdə RED ixracatçısı (Python)
python from prometheus_client import Counter, Histogram, start_http_server reqs = Counter('http_requests_total','', ['route','method','status'])
lat = Histogram('http_request_duration_seconds','', ['route','method'])
start_http_server(8000)
def handle(req):
with lat. labels(req. route, req. method). time():
status = app(req)
reqs. labels(req. route, req. method, str(status)). inc()
return status
P95 həddi
promql alert: HighLatencyP95 expr: histogram_quantile(0. 95,
sum by (le, service) (rate(http_request_duration_seconds_bucket[5m]))) > 0. 25 for: 10m labels: { severity: "page", service: "api" }
16) Giriş çek siyahısı
1. Əsas metrlər (RED/USE) və domen göstəriciləri toplusunu təyin edin.
2. Kardinallığa görə etiketləri və bələdçiləri razılaşdırın.
3. scrape/ServiceMonitor, TLS/mTLS, relabel.
4. Əsas yollar və exemplars üçün histoqramları daxil edin.
5. p95, success ratio, biznes aqreqatları üçün recording rules yaradın.
6. SLO-alertləri (burn rate) və Alertmanager rutinqini daxil edin.
7. Dashboard qaldırın: service map, release compare, ödənişlər.
8. Federasiya/remote _ write və retenshn haqqında qərar.
9. Giriş məhdudlaşdırın (RBAC), PII olmadığını yoxlayın.
10. Runbooks və game-day yoxlamalar daxil edin.
17) Anti-nümunələr
Yüksək kardinallığa malik leybllar (user/session/request_id).
Summary əsas SLO üçün Histogram əvəzinə → no 'histogram _ quantile'.
Scrape «bütün ardıcıl» filtrasiya/rotasiya olmadan → artan xərclər və səs-küy.
SLO → alert phetig olmadan xam metrik alertlər.
recording rules → «ağır» dashboard yoxdur.
TLS/mTLS → saxtakarlıq/sızma riski olmadan metriklərə inam.
Nəticələr
Prometheus iGaming platformasına hədəflərə bağlı müşahidə imkanı verir: dəqiq histoqramlar, sabit aqreqatlar, aydın SLO alertləri və çox regional xəritəyə qədər ölçmək. Etiketlərin nizam-intizamı, düzgün recording rules, izləmə/log əlaqələri və düşünülmüş saxlama arxitekturası hətta pik anlarda sürətli buraxılışlar və proqnozlaşdırıla bilən p99 təmin edir.