Prometheus: метриканы жинау
(Бөлім: Технологиялар және Инфрақұрылым)
Қысқаша түйіндеме
Prometheus - уақыт бойынша метриктер үшін индустриялық стандарт: ол HTTP таргеттерін скрейпит, TSDB серияларын сақтайды, PromQL агрегаттарын есептейді және Alertmanager арқылы триггерит алгоритмдері. iGaming үшін бұл SLO-тәсілінің (RED/USE, төлемдердің бизнес-метрикасы), p95/p99 жылдам диагностикасының және автоматты шешімдердің (freeze/rollback) негізі.
1) Деректер моделі және түбегейлілігі
Метрика:' name {label1 =» v1», label2 =» v2»} value @ timestamp'.
Кардиналдылық = лейблдердің барлық бірегей жиынтықтарының қуаттарын шығару; құнның басты факторы.
- базовые: `service`, `env`, `region`, `instance`, `pod`, `container`, `version`;
- домендер: 'route', 'psp', 'tenant' (абайлаңыз!), 'game _ provider'.
- 'user _ id', 'session _ id', кездейсоқ/жоғары шекті мәндерді қоюға болмайды.
2) Метрика түрлері
Counter - тек қана өседі (мысалы, 'http _ requests _ total').
Gauge - сәттік мәндер (мысалы, 'queue _ depth').
Histogram/Summary - жасырындылықты бөлу. Сынамада - Histogram ('histogram _ quantile ()' және exemplars қолдауымен).
Native Histograms - айнымалы бакеттер, дәлдікті арттырады және өлшемін үнемдейді (бар жерде қосыңыз).
go var httpLatency = prometheus. NewHistogramVec(
prometheus. HistogramOpts{
Name: "http_request_duration_seconds",
Help: "HTTP latency",
Buckets: prometheus. DefBuckets ,//or custom
},
[]string{"route","method"},
)
3) Экспорттаушылар және не өлшеу керек
Сервистік: сіздің кодыңыз (Go/Java/Node/Python үшін SDK), RED-метрика API, бизнес-метрика (төлем конверсиясы).
Жүйелік: node_exporter, cAdvisor/kubelet.
Сыртқы: ДҚ/кэштер (mysqld_exporter, postgres_exporter, redis_exporter), NGINX/HAProxy, Kafka/RabbitMQ.
OTel-метриктер: OpenTelemetry Collector → Prometheus Remote Write немесе Prometheus-receiver → арқылы жалпы стек.
4) Scrape және relabel: таргеттерді қалай қосу керек
Негізгі '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
Қолмен 'scrape _ configs' дегеннің орнына ServiceMonitor/PodMonitor бағдарламасын пайдаланыңыз.
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 (операторсыз, оңайлатылған)
yaml metadata:
annotations:
prometheus. io/scrape: "true"
prometheus. io/port: "9102"
prometheus. io/path: "/metrics"
5) Сақтау: TSDB, WAL және ретеншн
WAL (Write-Ahead Log) → қайта бастаудан кейін жылдам қалпына келтіру.
Compaction: блоктарды қысу, дискіні/CPU үнемдеу.
Ретеншн: ыстық деректерді 7-30 күн сақтаңыз; ұзақ мерзімді - шығарыңыз («Масштабтауды» қараңыз).
- `--storage. tsdb. retention. time=15d`
- `--storage. tsdb. max-block-chunk-segment-size`
- Диск: жылдам SSD/NVMe; желілік томдарды қажетсіз болдырмау.
6) PromQL: негіздері және жиі үлгілер
Rate/irate
promql rate(http_requests_total{route="/deposit"}[5m])
Қателер және табысты
promql sum(rate(http_requests_total{status=~"2.. 3.."}[5m]))
/ sum(rate(http_requests_total[5m]))
p95 жасырындылық
promql histogram_quantile(0. 95,
sum by (le, route) (rate(http_request_duration_seconds_bucket[5m]))
)
Кезек/қанықтыру
promql max(queue_depth{queue="withdrawals"}) by (region)
7) Recording rules және өнімділігі
Ауыр сөздерді алдын ала санаңыз және сериялар ретінде сақтаңыз.
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]))
Плюс: жылдам дашбордтар, Prometheus CPU-ға жүктеме аз.
8) Alerting и SLO (burn rate)
Burn-rate алерты (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: сервистер/өңірлер бойынша бағыттау, телнұсқаларды басу, ChatOps.
9) Трассировкалармен және логтармен корреляция
exemplars: 'trace _ id' түймешігін гистограмма бакеттерінде қосыңыз.
«release compare» үшін 'service', 'version', 'region' белгілерін белгілеңіз.
Дашбордтарда - релиздер аңдатпалары (Git SHA/нұсқа).
10) Масштабтау және ұзақ уақыт сақтау
Федерация: жоғарғы Prometheus төменгілерден біріктіреді (job/label-сүзгілер бойынша).
Remote Write: қатарларды ұзақ сақтау backends/кластерлерге (Thanos/Cortex/Mimir) жіберу.
Артықшылықтары: шексіз ретеншн, көлденең масштабтау, global view.
Кемшіліктері: пайдалану қиын, құны.
Функциялары бойынша шардинг: жүйелік метрикаларға, бизнеске, қауіпсіздікке арналған жеке инстанциялар.
11) Қауіпсіздік
TLS/mTLS/Alertmanager/remote _ write.
/ targets және API үшін базалық/токен-аутентификация (проксирлеу шлюзінің алдында).
RBAC: рөлдер бойынша UI/серияларға қолжетімділікті шектеңіз; жеке таңбаларды жасырыңыз.
PII-гигиена: PII метрикаға жазбаңыз; хэштерді/бүркеншік атауларды пайдаланыңыз.
12) Kubernetes-практикасы
Prometheus Operator: CRD (ServiceMonitor, PodMonitor, Alertmanager, Prometheus).
kube-state-metrics + cAdvisor → кластердің толық көрінісі.
Тейнингтер және ресурстар: мониторинг үшін бөлінген нодтар; CPU/RAM лимиттері.
Шуды төмендету: «өндірістік» неймспейстерге арналған лейбл-селекторлар, паддинг scrape_interval мүмкін болған жерде.
13) Бизнес-метрика және өнім
Платежи: `payments_success_total{psp, currency}`, `payment_conversion_ratio`, `ttw_seconds_histogram`.
Ойын белсенділігі: ставкалар/мин, қателер кезінде gauge, дроп-офф сияқты сессияларды ұстап тұру.
Тәуекел/фрод: жылдамдық/гео аномалиялары бойынша триггерлер; жеке логикалау, метрика - агрегаттар.
14) Құны және өнімділігі (FinOps)
Кардиналдылықты бақылаңыз (жаңа лейблді қосар алдында тэг-ревью).
Гистограммалардың сэмплингі/сирек экспорттаушылар → 'scrape _ interval' ↑ сыни емес таргеттер үшін.
Ұзақ сақталатын бэкендтерде Downsampling.
Дашбордтарды кэштеу және recording rules-ке кең тіреу.
15) «Жылдам бастау» мысалдары
Қолданбадағы RED экспорттаушысы (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
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) Енгізу чек-парағы
1. Негізгі өлшемдер жиынтығын (RED/USE) және домендік көрсеткіштерді анықтаңыз.
2. Кардиналдық бойынша лейблдер мен гайдаларды келісіңіз.
3. scrape/ServiceMonitor, TLS/mTLS, relabel.
4. Негізгі жолдар мен exemplars үшін гистограммаларды қосыңыз.
5. p95, success ratio, бизнес агрегаттары үшін recording rules жасаңыз.
6. SLO-алерттерді (burn rate) және Alertmanager рутингін енгізіңіз.
7. Дашбордтарды көтеріңіз: service map, release compare, төлемдер.
8. / remote _ write және ретеншн туралы шешіңіз.
9. Рұқсатты шектеңіз (RBAC), PII жоқ екенін тексеріңіз.
10. Runbooks және game-day тексерулерін қосыңыз.
17) Қарсы үлгілер
Жоғары кардинальды лейблдер (user/session/request_id).
Негізгі SLO үшін Histogram орнына Summary → жоқ 'histogram _ quantile'.
Scrape «барлық қатарынан» сүзгісіз/ротациясыз → шығындар мен шудың өсуі.
SLO-сыз шикі метриктер бойынша алерттар → алерт-фэтиг.
Жоқ recording rules → «ауыр» дашбордтар.
TLS/mTLS → ауыстыру/ағу қаупі жоқ метриктерге сенім.
Prometheus iGaming-платформасына мақсаттарға байланыстырылған бақылау мүмкіндігін береді: дәл гистограммалар, тұрақты агрегаттар, анық SLO-алерттар және көп аймақтық картаға дейін масштабтау. Лейблдердің тәртібі, дұрыс recording rules, трассировкалармен/логтармен байланыстар және ойластырылған сақтау архитектурасы тез релиздерді және тіпті ең жоғары сәттерде де болжамды p99 қамтамасыз етеді.