مجموعه معیارها: پرومتئوس، گرافانا
مجموعه معیارها: پرومتئوس، گرافانا
1) هدف و قاب
وظیفه حلقه متریک این است که به طور قابل اعتماد جمع آوری و ذخیره سری زمانی، PromQL سریع برای RCA، هشدار SLO و داشبورد قابل فهم است. جفت پایه: Prometheus (scrape → store → query) و Grafana (تجسم، هشدار، حاشیه نویسی انتشار). برای ذخیره سازی طولانی و پرس و جو جهانی - Thanos/Cortex/Mimir.
2) مدل داده ها و معانی
سری = نام متریک + مجموعه ای از برچسب ها (کلید = مقدار).
انواع: شمارنده، سنج، هیستوگرام، خلاصه (در prod - اغلب هیستوگرام).
- RED (API): «نرخ»، «خطاها»، «مدت زمان» (هیستوگرام).
- USE (ресурсы): استفاده، اشباع، خطاها (CPU/RAM/دیسک/خالص).
- نامگذاری: 'namespace _ subsystem _ metric _ unit' (به عنوان مثال، 'http _ server _ requests _ total'، 'db _ connections _ current').
ضد کاردینالیتی: مقادیر مختلف برچسب را به حداقل برسانید (بدون user_id request_id در برچسب).
3) قرار گرفتن در معرض و کشف خدمات
صادر کنندگان: ، kube-state-metrics، cAdvisor، DB/صف ( ، ،.
خدمات بومی: کتابخانههای کلاینت (Go/Java/Node/Python) → '/metrics '.
کشف سرویس: Kubernetes، EC2/ASG، کنسول، فایل های استاتیک.
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
حاشیه نویسی از غلاف:
yaml prometheus. io/scrape: "true"
prometheus. io/path: /metrics prometheus. io/port: "8080"
4) هیستوگرام و تاخیر
از سطل های صریح برای SLO های خود استفاده کنید:- وب/API: [10 ms، 25 50 100 200 400 800 1600]
- پرداخت/پرداخت: اضافه کردن دم به 5-10S.
promql histogram_quantile(0. 95,
sum by (le) (rate(http_request_duration_seconds_bucket[5m]))
)
با نمونه ها (در صورت فعال بودن):
promql histogram_quantile(0. 95,
sum by (le, route) (rate(traces_spanmetrics_duration_bucket{route="/withdraw"}[5m]))
)
5) قوانین ضبط
درخواست های سنگین را کاهش دهید، SLI را استاندارد کنید.
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 و هشدار (سوزاندن چند پنجره)
SLO 99 9% 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 (ساده شده):
yaml route:
receiver: pager group_by: ["service"]
receivers:
- name: pager slack_configs:
- channel: "#oncall"
send_resolved: true
7) برچسب بهداشت و اقتصاد
نام برچسب ها پایدار و استاندارد هستند: «سرویس»، «env»، «منطقه»، «مسیر»، «کد»، «نسخه».
محدود کردن کاردینالیتی: معیارهای دارای «مسیر» باید از الگوی «http» استفاده کنند. مسیر '(نه URL کامل).
نمونه برداری منطق - در ردیابی ؛ در متریک - بدون user_id.
خواص انتشار ("سرویس. version ") برای مقایسه نسخه های قدیمی/جدید مفید هستند.
8) پوسته پوسته شدن و HA
Prometheus - به صورت عمودی و با خراش دادن هدف:- دو Prometheus (A/B) اهداف مشابه را خراب می کنند (HA → هشدارها تکرار می شوند).
- Thanos: Sidecar به هر Prometheus، Store + پرس و جو برای نمایش داده های جهانی و ذخیره سازی طولانی مدت (S3/GCS).
- جایگزین: Cortex/Mimir (از راه دور نوشتن، چند اجاره، مقیاس افقی).
yaml remote_write:
- url: https://mimir. example. com/api/v1/push basic_auth: { username: tenantA, password: $MIMIR_TOKEN }
نگهداری TSDB محلی:
yaml
--storage. tsdb. retention. time=15d
--storage. tsdb. max-block-duration=2h
9) Grafana: داشبورد، هشدار، حاشیه نویسی
داشبورد استاندارد:1. بررسی اجمالی پلت فرم (SLO/RED، خطا بودجه).
2. API توسط مسیر (RPS/5xx/p95، مقایسه 'نسخه').
3. K8s خوشه/گره (کنترل صفحه، اشباع).
4. DB/کش/صف (تاخیر/قفل/نسبت ضربه/backlog).
5. Per-Release (قبل/بعد، حاشیه نویسی انتشار از CI).
هشدار Grafana: باعث PromQL، چرخش در تماس، بی صدا بار «پنجره انتشار».
حاشیه نویسی: CI یک رویداد انتشار را با «commit»، «image» اضافه می کند. برچسب '، اشاره به خط لوله.
10) Kubernetes: چه برای اندازه گیری
صفحه کنترل: 'apiserver _ request _ total'، رهبر etcd/fsync، تأخیر زمانبندی.
بارهای کاری: راه اندازی مجدد، 'container _ cpu _ cfs _ throttled _ seconds _ total'، OOM، در انتظار/اخراج، نقض PDB.
شبکه: قطره، اتصال، خطاهای 'kube-proxy'.
سهمیه ها/محدودیت ها: درخواست ها در مقابل محدودیت ها، HPA/VPA، اشباع گره.
11) DB/کش/صف: سیگنال های کلیدی
PostgreSQL/MySQL: «اتصالات»، «قفل»، «بن بست _ کل»، «xact _ commit/rollback»، تاخیر تکرار.
Redis: نسبت ضربه، 'اخراج'، تاخیر 'فوری _ ops _ per _ sec'.
Kafka/RabbitMQ: تاخیر مصرف کننده، unacked، ISR، استفاده از دیسک.
promql
Queue backlog sum by (topic) (kafka_consumergroup_lag)> 1000
Postgres replication lag max(pg_replication_lag_seconds) > 2
12) ایمنی و چند اجاره ای
RBAC به Prometheus/Grafana, data source-permishens.
زنجیره TLS/mTLS در ورود/بین اجزاء.
جداسازی مستاجر: Prometheus یا برچسب مستاجر در Cortex/Mimir جداگانه ؛ محدودیت های سری و درخواست
اسرار در هشدارها/اطلاعیه ها - ممنوع است (استفاده از شناسه بلیط، نه PII).
13) ادغام با انتشار و بازگشت خودکار
قوانین SLO → AnalysisTemplate (Argo Rollouts) یا CI-gate.
هنگامی که هشدار سوختگی باعث - مکث/عقب قناری; در ورود به سیستم/حاشیه نویسی - یک لینک به انتشار.
مقایسه نسخه پایدار و قناری از طریق برچسب «نسخه».
14) خطاهای معمول (ضد الگوهای)
کاردینالیتی کنترل نشده برچسب ها (user_id، URL. کلیدهای دینامیک و کامل)
ضرب و مرحله را در همان خوشه بدون برچسب 'env' مخلوط کنید.
فقط سنج بدون RED/استفاده ؛ بدون هیستوگرام p95/p99.
هشدار در سخت افزار بدون اتصال به SLO → سر و صدا.
فقدان قوانین ضبط → درخواست های «سنگین» در حوادث تولید.
هیچ حاشیه نویسی انتشار → آن دشوار است برای مقایسه تغییرات و تخریب وجود دارد.
15) چک لیست پیاده سازی (0-45 روز)
0-10 روز
صادر کنندگان گره/kube-state/cAdvisor ؛ «/metrics »در خدمات.
داشبورد اصلی RED/USE ؛ سطل هیستوگرام استاندارد.
شامل حاشیه نویسی انتشار از CI.
11-25 روز
قوانین ضبط برای SLI ؛ هشدار سوختگی چند پنجره ای
HA Prometheus (خراش دو)، پشتیبان گیری از تنظیمات GitOps.
Alertmanager: مسیرها/حالت آرام/چرخش در تماس.
26-45 روز
نوشتن از راه دور در Thanos/Cortex/Mimir، ذخیره سازی طولانی مدت.
بهینه سازی کاردینالیتی، محدودیت های سری، درخواست ها.
نسخه های SLO-Gating و ادغام خودکار برگشت.
16) معیارهای بلوغ
پوشش RED/USE برای خدمات کلیدی ≥ 95٪.
متوسط زمان برای انجام «سنگین» PromQL <2 s (p95) با توجه به قوانین ضبط.
نسبت هشدارهای مفید/پر سر و صدا> 3:1 است.
کاردینالیتی تحت کنترل: <10M دسته فعال در هر خوشه، بدون سنبله.
100٪ از نسخه ها در Grafana و معیارهای مرتبط قبل/بعد حاشیه نویسی شده اند.
17) قطعه های مفید
مقایسه پایدار در مقابل قناری توسط نسخه
promql histogram_quantile(0. 95,
sum by (le, version) (rate(http_request_duration_seconds_bucket{version=~"stable canary"}[5m]))
)
5xx خطا در مسیر
promql topk(5,
sum by (route) (rate(http_requests_total{status=~"5.."}[5m]))
)
اشباع CPU ظرف
promql rate(container_cpu_cfs_throttled_seconds_total[5m]) > 0. 1
رابطه متریک با آهنگ ها (نمونه فعال)
promql sum (rate (http_request_duration_seconds_bucket[5m])) by (le) # clickable to the track
18) نتیجه گیری
Prometheus + Grafana استاندارد واقعی برای معیارها است. معانی و نظم و انضباط برنده: RED/USE، برچسب های شسته و رفته، هیستوگرام برای SLO، قوانین ضبط و هشدارهای SLO. HA و ذخیره سازی طولانی مدت، حاشیه نویسی انتشار و ادغام با بازگشت خودکار را اضافه کنید - و شما یک حلقه متریک سریع، مقیاس پذیر و اقتصادی دارید که به شما در تصمیم گیری در فروش کمک می کند.