مجموعة المقاييس: بروميثيوس، جرافانا
مجموعة المقاييس: بروميثيوس، جرافانا
1) الغرض والإطار
تتمثل مهمة حلقة المقاييس في جمع وتخزين السلاسل الزمنية بشكل موثوق، وإعطاء PromQL سريع لـ RCA وتنبيهات SLO ولوحات القيادة المفهومة. الزوج الأساسي: Prometheus (scrape → store → query) و Grafana (التصور، التنبيهات، شروح الإصدار). للتخزين الطويل والاستعلام العالمي - Thanos/Cortex/Mimir.
2) نموذج البيانات والدلالات
Series = metric name + set of labels (key = value).
الأنواع: كاونتر، قياس، مخطط نسيجي، ملخص (في prod - في كثير من الأحيان histogram).
- RED (API): «معدل»، «أخطاء»، «مدة» (مخطط).
- الاستخدام (ресурсы): الاستخدام والتشبع والأخطاء (CPU/RAM/Disk/Net).
- التسمية: "namespace _ subsystem _ metric _ unit' (على سبيل المثال،" http _ server _ requests _ total "،" db _ connections _ current ").
مضاد الكاردينالية: تقليل قيم التسمية المختلفة (لا user_id request_id في التسمية).
3) التعرض واكتشاف الخدمة
المصدرون: node_exporter، kube-state-metrics، cAdvisor، DB/Queues (postgres_exporter، redis_exporter، kafka_exporter).
الخدمات المحلية: مكتبات العملاء (Go/Java/Node/Python) → '/المقاييس '.
Service Discovery: Kubernetes, EC2/ASG, Consul, static files.
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) النسيج والكمون
استخدم دلاء صريحة لـ SLOs الخاصة بك:- Web/API: «[10 ms، 25 50 100 200 400 800 1600]»
- المدفوعات/المدفوعات: أضف ذيل إلى 5-10.
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.
تحرير الخصائص ('الخدمة. النسخة ') مفيدة لمقارنة الإصدارات القديمة/الجديدة.
8) التحجيم و HA
بروميثيوس - رأسياً وبهدف الكشط:- يقوم اثنان من Prometheus (A/B) بكشط نفس الأهداف (يتم تكرار تنبيهات HA →).
- ثانوس: Sidecar لكل Prometheus و Store + Query للاستفسارات العالمية والتخزين طويل الأجل (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) جرافانا: لوحات القيادة، التنبيهات، الشروح
لوحات القيادة القياسية:1. نظرة عامة على المنصة (SLO/RED، خطأ - ميزانية).
2. واجهة برمجة التطبيقات حسب الطريق (RPS/5xx/p95، المقارنة «نسخة»).
3. K8s العنقود/العقد (مستوى التحكم، التشبع).
4. DB/Cache/Queues (lag/locks/hit rato/backlog).
5. لكل إصدار (قبل/بعد، إصدار شروح من CI).
تنبيه Grafana: المشغلات على PromQL، التناوب عند الطلب، «نوافذ إطلاق» الأوقات الصامتة.
الشروح: تضيف CI حدث إصدار مع صورة «التزام». ، إشارة إلى خط الأنابيب.
10) Kubernetes: ماذا تقيس
Control-plane: 'apiserver _ request _ total', etcd leader/fsync, culter latency.
أعباء العمل: إعادة التشغيل، «الحاوية _ cpu _ cfs _ chottled _ seconds _ total»، OOM، انتهاكات معلقة/مطرودة، PDB.
الشبكة: قطرات، وصلة، أخطاء «kube-proxy».
الحصص/الحدود: الطلبات مقابل الحدود، HPA/VPA، تشبع العقدة.
11) DB/المخابئ/قوائم الانتظار: الإشارات الرئيسية
PostgreSQL/MySQL: «الاتصالات»، «الأقفال»، «الجمود _ الكلي»، «xact _ commission/rollback»، تأخر النسخ.
Redis: نسبة الضرب، «الإخلاء»، الكمون «الفوري _ العمليات _ في الثانية».
كافكا/RabbitMQ: تأخر المستهلك، غير معبأ، ISR، استخدام القرص.
promql
Queue backlog sum by (topic) (kafka_consumergroup_lag)> 1000
Postgres replication lag max(pg_replication_lag_seconds) > 2
12) السلامة وتعدد الحيازات
RBAC إلى Prometheus/Grafana، datasource-permishens.
سلسلة TLS/mTLS على الدخول/بين المكونات.
عزل المستأجر: بروميثيوس منفصل أو علامة المستأجر في كورتكس/ميمير ؛ وحدود الطلب.
الأسرار في التنبيهات/الإشعارات - ممنوعة (استخدم معرف التذكرة، وليس PII).
13) التكامل مع الإطلاقات والتراجع التلقائي
قواعد SLO → AnalysisTemplate (Argo Rollouts) أو CI-gate.
عندما يتم تشغيل تنبيهات الحرق - توقف مؤقتًا/تراجع الكناري ؛ في السجل/الشرح - وصلة بالإصدار.
مقارنة النسخة المستقرة والنسخة الكنارية عن طريق التسمية «نسخة».
14) الأخطاء النموذجية (الأنماط المضادة)
كاردينالية الملصقات غير المنضبطة (user_id، url. مفاتيح كاملة ودينامية).
اخلطي الحث والمرحلة في نفس المجموعة بدون «env» label.
قياس فقط بدون RED/USE ؛ بدون p95/p99 histograms.
تنبيهات على الأجهزة دون ربط SLO → الضوضاء.
عدم وجود قواعد تسجيل → الطلبات «الثقيلة» في حوادث الإنتاج.
لا توجد شروح للإصدار → من الصعب مقارنة التغيرات والتدهور.
15) قائمة التنفيذ المرجعية (0-45 يوما)
0-10 أيام
مصدرو العقدة/الكوب/الدولة/المستشارون ؛ '/المقاييس 'في الخدمات.
لوحات القيادة الأساسية RED/USE ؛ دلاء النسيج القياسية.
تضمين شروح الإصدار من CI.
11-25 يومًا
) أ (تسجيل القواعد المتعلقة بالمبادرة ؛ إنذارات الحرق متعددة النوافذ.
HA Prometheus (كشط مزدوج)، نسخة احتياطية من تكوينات GitOps.
Alertmanager: الطرق/الوضع الهادئ/التناوب عند الطلب.
26-45 يومًا
الكتابة عن بعد في Thanos/Cortex/Mimir، التخزين طويل الأجل.
تحسين الكاردينالية، حدود السلسلة، الطلبات.
إصدارات بوابات SLO وتكامل التراجع التلقائي.
16) مقاييس النضج
تغطية RED/USE للخدمات الرئيسية ≥ 95٪.
متوسط الوقت لأداء PromQL «الثقيل» <2 s (p95) بسبب قواعد التسجيل.
نسبة التنبيهات المفيدة/الصاخبة هي> 3:1.
الكاردينالية تحت السيطرة: <10 مليون دفعة نشطة لكل مجموعة، بدون مسامير.
100٪ من الإطلاقات مشروحة في غرافانا والمقاييس المترابطة قبل/بعد.
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]))
)
تشبع وحدة المعالجة المركزية بالحاوية
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، الملصقات الأنيقة، histograms لـ SLO، قواعد التسجيل وتنبيهات SLO. أضف HA والتخزين طويل الأجل، وشروح الإصدار والتكامل مع التراجع التلقائي - ولديك حلقة مترية سريعة وقابلة للتطوير واقتصادية تساعدك على اتخاذ قرارات في المبيعات.