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)、RED API度量、業務指標(付款轉換)。
系統:node_exporter,cAdvisor/kubelet。
第三方:DB/緩存(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
使用ServiceMonitor/PodMonitor代替手動的「scrape_configs」。
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]))
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)記錄規則和性能
提前讀取沈重的表達式,並存儲為系列。
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 alerta(多窗口、多燃燒)
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」。
將「服務」,「版本」和「區域」標簽設置為「發布比較」。
在行車記錄板上-版本註釋(Git SHA/版本)。
10)擴展和長期存儲
聯邦:頂部Prometheus從底部(通過工作/標簽過濾器)聚集。
遠程寫作:將行發送到長期存儲/群集後端(Thanos/Cortex/Mimir)。
優點:無限重構、水平縮放、全局視圖。
缺點:更難操作,成本。
按功能劃分:系統指標的單獨實例、業務、安全。
11)安全性
Prometheus ↔ 目標/Alertmanager/remote_write之間的TLS/mTLS。
基本/令牌身份驗證/目標和API(在滾動網關之前)。
RBAC:限制按角色訪問UI/系列;隱藏私人標簽。
PII衛生:不要將PII寫成指標;使用哈希/別名。
12) Kubernetes練習
Prometheus Operator: CRD (ServiceMonitor, PodMonitor, Alertmanager, Prometheus).
kube-state-metrics+cAdvisor →群集的完整圖片。
Teynings和資源:用於監測的專用記號;CPU/RAM限制。
降低噪音:「生產」neyspace的標簽選擇器,在可能的情況下scrape_interval圍場。
13)商業指標和產品
Платежи: `payments_success_total{psp, currency}`, `payment_conversion_ratio`, `ttw_seconds_histogram`.
遊戲活動:投註/分鐘,保持會話為高格,失誤時失效。
風險/風險:速度/地理異常觸發因素;單獨編寫,度量是聚合。
14)成本和性能(FinOps)
控制基數(在添加新標簽之前進行標記)。
Sampling直方圖/罕見的出口商→ 'scrape_interval'↑用於非關鍵目標。
在長期存儲後端下載。
行車記錄緩存和廣泛依賴記錄規則。
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、成功率、業務單元創建記錄規則。
6.輸入SLO-Alerta(燃燒率)和Alertmanager Ruting。
7.提高行車記錄:服務地圖,發布比較,付款。
8.決定聯盟/remote_write和重建。
9.限制訪問(RBAC),檢查是否缺少PII。
10.啟用runbooks和遊戲日檢查。
17)反模式
高基數標簽(user/session/request_id)。
用於關鍵SLO的摘要而不是Histogram →沒有「histogram_quantile」。
沒有過濾/旋轉的Scrape「全部連續」→成本和噪音上升。
根據沒有SLO的原始度量標準,Alerta → alert-fattig。
缺乏記錄規則→「沈重」的行列。
對沒有TLS/mTLS的指標的信心→欺騙/泄漏風險。
結果
Prometheus為iGaming平臺提供了與目標相關的可觀察性:精確的直方圖,穩定的聚集,清晰的SLO同位素以及縮放到多個區域圖。標簽紀律,正確的記錄規則,跟蹤/記錄鏈接以及經過深思熟慮的存儲體系結構即使在高峰時段也能提供快速發布和可預測的p99。