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';
- دامنه: 'مسیر'، 'psp'، 'مستاجر' (احتیاط!)، 'game _ provider'.
- شما نمی توانید «user _ id»، «session _ id»، مقادیر کاردینال تصادفی/بالا را قرار دهید.
2) انواع معیارها
شمارنده - فقط رشد می کند (به عنوان مثال، 'http _ requests _ total').
Gauge - مقادیر لحظه ای (به عنوان مثال، «queue _ depth»).
هیستوگرام/خلاصه- توزیعهای تأخیر. در prod - هیستوگرام (با پشتیبانی از «هیستوگرام _ چندک ()» و نمونه).
هیستوگرام های بومی سطل های متغیر هستند که دقت را بهبود می بخشند و اندازه را ذخیره می کنند (شامل موارد موجود).
go var httpLatency = prometheus. NewHistogramVec(
prometheus. HistogramOpts{
Name: "http_request_duration_seconds",
Help: "HTTP latency",
Buckets: prometheus. DefBuckets ,//or custom
},
[]string{"route","method"},
)
3) صادر کنندگان و آنچه باید اندازه گیری شود
سرویس: کد شما (SDK برای Go/Java/Node/Python)، معیارهای RED API، معیارهای تجاری (تبدیل پرداخت).
سیستم: node_exporter، cAdvisor/kubelet.
شخص ثالث: DB/caches (mysqld_exporter، postgres_exporter، redis_exporter)، NGINX/HAProxy، Kafka/RabbitMQ.
معیارهای OTel: از طریق OpenTelemetry Collector → Prometheus Remote Write یا Prometheus-receiver → به یک پشته مشترک.
4) Scrape and relabel: نحوه اتصال اهداف
«پرومتئوس» اصلي. من..
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'
کوبرنتس через اپراتور پرومتئوس
استفاده از 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) → بازیابی سریع از راه اندازی مجدد.
تراکم: فشرده سازی بلوک، صرفه جویی در دیسک/CPU.
نگهداری: نگه داشتن داده های داغ برای 7-30 روز ؛ بلند مدت - حرکت (نگاه کنید به پوسته پوسته شدن).
- "- ذخیره سازی. TSDB. حفظ و نگهداری زمان = 15 ثانیه
- "- ذخیره سازی. TSDB. max-block-chunk-segment-size '
- درایو: SSD سریع/NVMe ؛ اجتناب از حجم شبکه غیر ضروری.
6) PromQL: اصول و الگوهای مکرر
نرخ/خشم
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) ضبط قوانین و عملکرد
عبارات سنگین را از قبل در نظر بگیرید و به صورت سری ذخیره کنید.
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]))
به علاوه: داشبورد سریع، بار کمتر در CPU Prometheus.
8) هشدار и SLO (میزان سوختگی)
هشدار سوختگی (چند پنجره، چند سوختگی)
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) ارتباط با آثار و سیاهههای مربوط
فعالسازی نمونهها: قابل کلیک 'trace _ id' در سطلهای سابقهنما.
برچسب های «service»، «version»، «region» را برای «release compare» در معیارها قرار دهید.
در داشبورد - حاشیه نویسی انتشار (Git SHA/نسخه).
10) مقیاس بندی و ذخیره سازی طولانی مدت
فدراسیون: تجمع Prometheus بالا از پایین (توسط فیلتر کار/برچسب).
نوشتن از راه دور: ارسال سطرها به backends/clusters ذخیره سازی طولانی مدت (Thanos/Cortex/Mimir).
مزایا: نگهداری بی نهایت، مقیاس افقی، نمای جهانی.
منفی: سخت تر برای کار، هزینه.
Sharding by function: نمونه های جداگانه برای معیارهای سیستم، کسب و کار، امنیت.
11) ایمنی
TLS/mTLS بین اهداف Prometheus ↔/Alertmanager/remote _ write.
احراز هویت عمومی/نشانه برای/اهداف و API (در مقابل دروازه پروکسی).
RBAC: محدود کردن دسترسی به UI/سری توسط نقش ؛ برچسب های خصوصی را مخفی کنید
بهداشت PII: PII را در معیارها ننویسید ؛ از hashes/aliases استفاده کنید.
12) شیوه های Kubernetes
اپراتور Prometheus: CRD (ServiceMonitor، PodMonitor، Alertmanager، Prometheus).
kube-state-metrics + cAdvisor → یک تصویر کامل از خوشه.
Tainings and resources: گره های اختصاصی برای نظارت ؛ محدودیت های CPU/RAM
کاهش نویز: انتخابگرهای برچسب برای فضای نام «تولید»، scrape_interval padding در صورت امکان.
13) معیارهای کسب و کار و محصول
Платежи: 'payments _ success _ total {psp, currency}', 'payment _ conversion _ ratio', 'ttw _ seconds _ histogram'.
فعالیت بازی: شرط/دقیقه، جلسات برگزاری به عنوان سنج، رها کردن زمانی که اشتباهات.
ریسک/تقلب: باعث ناهنجاری های سرعت/جغرافیایی می شود ؛ ورود به سیستم به طور جداگانه, معیارهای - aggregates.
14) هزینه و عملکرد (FinOps)
کنترل کاردینالیتی (بررسی برچسب قبل از اضافه کردن یک برچسب جدید).
نمونه برداری هیستوگرام/صادرکنندگان نادر → 'scrape_interval'↑ برای اهداف غیر بحرانی.
Downsampling در ذخیره سازی طولانی مدت.
ذخیره سازی داشبورد و وابستگی گسترده به قوانین ضبط.
15) نمونه هایی از «شروع سریع»
صادر کننده قرمز در برنامه (پایتون)
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. هماهنگی برچسب ها و راهنمای توسط cardinality.
3. پیکربندی خراش/ServiceMonitor, TLS/mTLS, برچسب.
4. شامل هیستوگرام برای مسیرهای کلیدی و نمونه.
5. ایجاد قوانین ضبط برای p95، نسبت موفقیت، جمع آوری کسب و کار.
6. هشدارهای SLO (نرخ سوختن) و Alertmanager ریشه را وارد کنید.
7. بالا بردن داشبورد: نقشه خدمات، مقایسه انتشار، پرداخت.
8. تصمیم گیری در مورد فدراسیون/remote _ write و حفظ.
9. محدود کردن دسترسی (RBAC)، عدم وجود PII را بررسی کنید.
10. فعال کردن کتاب های اجرا و چک های روز بازی.
17) ضد الگوهای
برچسب ها با کاردینالیتی بالا (user/session/request_id).
خلاصه به جای هیستوگرام برای SLO های کلیدی → هیچ «histogram _ quantle» وجود ندارد.
خراش «همه در یک ردیف» بدون فیلتر کردن/چرخش → افزایش هزینه ها و سر و صدا.
هشدارها در معیارهای خام بدون SLO → هشدار phatig.
عدم وجود قوانین ضبط → داشبورد «سنگین».
اعتماد به معیارهای بدون TLS/mTLS → خطر کلاهبرداری/نشت.
خلاصه
Prometheus به پلت فرم iGaming قابلیت مشاهده هدف را می دهد: هیستوگرام دقیق، aggregates پایدار، هشدارهای SLO روشن و مقیاس بندی به یک نقشه چند منطقه ای. نظم و انضباط برچسب، قوانین ضبط صحیح، پیوندهای ردیابی/ورود به سیستم و یک معماری ذخیره سازی متفکر، نسخه های سریع و قابل پیش بینی p99 را حتی در زمان های اوج ارائه می دهد.