مراقبة بروميثيوس: الإعداد الكامل وممارسات الأفضل
قم بتكوين مراقبة البنية التحتية القوية باستخدام بروميثيوس
Prometheus أصبح المعيار الافتراضي لمراقبة التطبيقات والبنية التحتية المستندة إلى السحابة، حيث يوفر جمع البيانات، والسؤال عنها، والتكامل مع أدوات الرسم البياني.

ما هو Prometheus؟
Prometheus هو أداة مفتوحة المصدر لمراقبة وإرسال التنبيهات، تم تطويرها في البداية في SoundCloud عام 2012، وهو الآن مشروع تخرج من مؤسسة Cloud Native Computing Foundation (CNCF). تم تصميمه خصيصًا لتحقيق الموثوقية والتوسع في البيئات السحابية الديناميكية، مما يجعله الحل المثالي لمراقبة الخدمات الموزعة، والحاويات، والكластرات Kubernetes.
الميزات الرئيسية
قاعدة بيانات السلاسل الزمنية: تخزن Prometheus جميع البيانات كسلسلة زمنية، تُحدد بواسطة أسماء المقاييس ومحطات المفاتيح (العلامات)، مما يتيح إمكانية سؤال قوية ومرنة.
نموذج سحب البيانات: على عكس الأنظمة التقليدية ذات النموذج القائم على الدفع، يقوم Prometheus بسحب المقاييس من الأهداف المُعدة في فترات زمنية محددة، مما يجعله أكثر موثوقية وسهولة في التكوين.
لغة الاستعلام PromQL: تتيح لغة الاستعلام الوظيفية القوية قص وفرز بيانات المقاييس في الوقت الفعلي، مع إمكانية إجراء التجميعات، والتحويلات، والحسابات المعقدة.
اكتشاف الخدمة: اكتشاف تلقائي للأهداف المُراقبة عبر آليات متعددة بما في ذلك Kubernetes، Consul، EC2، والتكوينات الثابتة.
لا تعتمد على المكونات الخارجية: تعمل Prometheus كملف واحد دون أي اعتماديات خارجية مطلوبة، مما يبسط عملية التثبيت ويقلل من تعقيد التشغيل.
تنبيه مدمج: يعالج AlertManager التنبيهات القادمة من Prometheus، مما يوفر تكرارًا، وتقسيمًا، وتحويلًا إلى قنوات الإخطار مثل البريد الإلكتروني، PagerDuty، أو Slack.
مقدمة عن هيكل Prometheus
فهم هيكل Prometheus ضروري للنشر الفعال. تتضمن المكونات الرئيسية:
- خادم Prometheus: يسحب ويحفظ المقاييس، ويقيّم القواعد، ويقدم الاستعلامات
- مكتبات العملاء: تُعدّد كود التطبيق لعرض المقاييس
- الصادرات: تربط الأنظمة الخارجية بتنسيق Prometheus
- AlertManager: يعالج التنبيهات والإشعارات
- Pushgateway: يستقبل المقاييس من الوظائف المؤقتة التي لا يمكن سحبها
تدفق البيانات المعتاد: تُعرض تطبيقات المُقاييس نقاط الواجهة → يسحب Prometheus هذه النقاط → تُخزن البيانات في قاعدة بيانات السلاسل الزمنية → تُستخرج وتحليل البيانات عبر استعلامات PromQL → تُنتج التنبيهات بناءً على القواعد → يعالج AlertManager ويوجه الإشعارات.
عند نشر البنية التحتية على Ubuntu 24.04، توفر Prometheus أساسًا ممتازًا لمراقبة شاملة.
تثبيت Prometheus على Ubuntu
لنمشي عبر تثبيت Prometheus على نظام Linux. سنستخدم Ubuntu كمثال، ولكن العملية مشابهة لبقية التوزيعات.
تنزيل وتثبيت
أولًا، أنشئ مستخدمًا مخصصًا لـ Prometheus:
sudo useradd --no-create-home --shell /bin/false prometheus
تنزيل أحدث إصدار من Prometheus:
cd /tmp
wget https://github.com/prometheus/prometheus/releases/download/v2.48.0/prometheus-2.48.0.linux-amd64.tar.gz
tar xvf prometheus-2.48.0.linux-amd64.tar.gz
cd prometheus-2.48.0.linux-amd64
نسخ الملفات الثنائية وإنشاء المجلدات:
sudo cp prometheus /usr/local/bin/
sudo cp promtool /usr/local/bin/
sudo chown prometheus:prometheus /usr/local/bin/prometheus
sudo chown prometheus:prometheus /usr/local/bin/promtool
sudo mkdir /etc/prometheus
sudo mkdir /var/lib/prometheus
sudo chown prometheus:prometheus /etc/prometheus
sudo chown prometheus:prometheus /var/lib/prometheus
sudo cp -r consoles /etc/prometheus
sudo cp -r console_libraries /etc/prometheus
sudo cp prometheus.yml /etc/prometheus/prometheus.yml
sudo chown -R prometheus:prometheus /etc/prometheus
لإدارة الحزم على Ubuntu، راجع دليلنا الشامل إدارة الحزم في Ubuntu.
تكوين Prometheus
تحرير /etc/prometheus/prometheus.yml:
global:
scrape_interval: 15s
evaluation_interval: 15s
alerting:
alertmanagers:
- static_configs:
- targets: ['localhost:9093']
rule_files:
- 'alert_rules.yml'
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
- job_name: 'node_exporter'
static_configs:
- targets: ['localhost:9100']
إنشاء خدمة systemd
إنشاء /etc/systemd/system/prometheus.service:
[Unit]
Description=Prometheus
Wants=network-online.target
After=network-online.target
[Service]
User=prometheus
Group=prometheus
Type=simple
ExecStart=/usr/local/bin/prometheus \
--config.file=/etc/prometheus/prometheus.yml \
--storage.tsdb.path=/var/lib/prometheus/ \
--web.console.templates=/etc/prometheus/consoles \
--web.console.libraries=/etc/prometheus/console_libraries \
--storage.tsdb.retention.time=30d
[Install]
WantedBy=multi-user.target
تشغيل وتفعيل Prometheus:
sudo systemctl daemon-reload
sudo systemctl start prometheus
sudo systemctl enable prometheus
sudo systemctl status prometheus
قم بالوصول إلى واجهة Prometheus عبر http://localhost:9090.
إعداد Node Exporter
يعرض Node Exporter مقاييس الأجهزة والأنظمة التشغيلية لأنظمة Linux. قم بتثبيته لمراقبة خوادمك:
cd /tmp
wget https://github.com/prometheus/node_exporter/releases/download/v1.7.0/node_exporter-1.7.0.linux-amd64.tar.gz
tar xvf node_exporter-1.7.0.linux-amd64.tar.gz
sudo cp node_exporter-1.7.0.linux-amd64/node_exporter /usr/local/bin/
sudo chown prometheus:prometheus /usr/local/bin/node_exporter
إنشاء خدمة systemd /etc/systemd/system/node_exporter.service:
[Unit]
Description=Node Exporter
After=network.target
[Service]
User=prometheus
Group=prometheus
Type=simple
ExecStart=/usr/local/bin/node_exporter
[Install]
WantedBy=multi-user.target
تشغيل Node Exporter:
sudo systemctl daemon-reload
sudo systemctl start node_exporter
sudo systemctl enable node_exporter
يعرض Node Exporter الآن المقاييس عبر منفذ 9100.
فهم PromQL
PromQL (لغة استعلام Prometheus) هي القلب من استعلام بيانات Prometheus. إليك أنماط الاستعلام الأساسية:
الاستعلامات الأساسية
اختر جميع سلاسل الزمنية للمقاييس:
node_cpu_seconds_total
فلترة حسب العلامة:
node_cpu_seconds_total{mode="idle"}
فلترة متعددة للعلامات:
node_cpu_seconds_total{mode="idle",cpu="0"}
المتجهات الزمنية والتوسيعات
حساب معدل عبر الزمن:
rate(node_cpu_seconds_total{mode="idle"}[5m])
جمع عبر جميع المعالجات:
sum(rate(node_cpu_seconds_total{mode="idle"}[5m]))
تجميع حسب العلامة:
sum by (mode) (rate(node_cpu_seconds_total[5m]))
أمثلة عملية
نسبة استخدام المعالج:
100 - (avg by (instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)
استخدام الذاكرة:
(node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes) / node_memory_MemTotal_bytes * 100
استخدام القرص:
(node_filesystem_size_bytes - node_filesystem_avail_bytes) / node_filesystem_size_bytes * 100
معدل حركة المرور الشبكي:
rate(node_network_receive_bytes_total[5m])
نشر Prometheus في Docker
يقدم تشغيل Prometheus في حاويات Docker المرونة وإدارة أسهل:
إنشاء ملف docker-compose.yml:
version: '3.8'
services:
prometheus:
image: prom/prometheus:latest
container_name: prometheus
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
- prometheus_data:/prometheus
command:
- '--config.file=/etc/prometheus/prometheus.yml'
- '--storage.tsdb.path=/prometheus'
- '--storage.tsdb.retention.time=30d'
ports:
- "9090:9090"
restart: unless-stopped
node_exporter:
image: prom/node-exporter:latest
container_name: node_exporter
command:
- '--path.rootfs=/host'
volumes:
- '/:/host:ro,rslave'
ports:
- "9100:9100"
restart: unless-stopped
alertmanager:
image: prom/alertmanager:latest
container_name: alertmanager
volumes:
- ./alertmanager.yml:/etc/alertmanager/alertmanager.yml
- alertmanager_data:/alertmanager
ports:
- "9093:9093"
restart: unless-stopped
volumes:
prometheus_data:
alertmanager_data:
تشغيل المجموعة:
docker-compose up -d
مراقبة Kubernetes
يتفوق Prometheus في مراقبة كластرات Kubernetes. يوفر مخطط kube-prometheus-stack Helm حلًا متكاملًا لمراقبة.
تثبيت باستخدام Helm:
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo update
helm install prometheus prometheus-community/kube-prometheus-stack
هذا يثبيت:
- Prometheus Operator
- مثيل Prometheus
- AlertManager
- Grafana
- Node Exporter
- kube-state-metrics
- لوحات تحكم وتنبيهات مسبقة التكوين
الوصول إلى Grafana:
kubectl port-forward svc/prometheus-grafana 3000:80
الاعتماديات الافتراضية: admin/prom-operator
للموزعات المختلفة من Kubernetes، فإن عملية النشر مشابهة مع تعديلات بسيطة لخصائص المنصات.
إعداد التنبيهات
يتعامل AlertManager مع التنبيهات المرسلة من Prometheus. قم بتكوين قواعد التنبيه والقنوات الإخطار.
قواعد التنبيه
إنشاء /etc/prometheus/alert_rules.yml:
groups:
- name: system_alerts
interval: 30s
rules:
- alert: HighCPUUsage
expr: 100 - (avg by (instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 80
for: 5m
labels:
severity: warning
annotations:
summary: "استخدام المعالج مرتفع على {{ $labels.instance }}"
description: "استخدام المعالج أعلى من 80% (القيمة الحالية: {{ $value }}%)"
- alert: HighMemoryUsage
expr: (node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes) / node_memory_MemTotal_bytes * 100 > 85
for: 5m
labels:
severity: warning
annotations:
summary: "استخدام الذاكرة مرتفع على {{ $labels.instance }}"
description: "استخدام الذاكرة أعلى من 85% (القيمة الحالية: {{ $value }}%)"
- alert: DiskSpaceLow
expr: (node_filesystem_avail_bytes / node_filesystem_size_bytes) * 100 < 15
for: 10m
labels:
severity: critical
annotations:
summary: "مساحة القرص منخفضة على {{ $labels.instance }}"
description: "مساحة القرص المتاحة أقل من 15% على {{ $labels.mountpoint }}"
- alert: InstanceDown
expr: up == 0
for: 2m
labels:
severity: critical
annotations:
summary: "الخادم {{ $labels.instance }} متوقف"
description: "الخادم {{ $labels.job }} {{ $labels.instance }} متوقف منذ أكثر من 2 دقيقة"
تكوين AlertManager
إنشاء /etc/prometheus/alertmanager.yml:
global:
resolve_timeout: 5m
smtp_smarthost: 'smtp.gmail.com:587'
smtp_from: 'alerts@example.com'
smtp_auth_username: 'alerts@example.com'
smtp_auth_password: 'your-password'
route:
group_by: ['alertname', 'cluster', 'service']
group_wait: 10s
group_interval: 10s
repeat_interval: 12h
receiver: 'team-email'
routes:
- match:
severity: critical
receiver: 'team-pagerduty'
- match:
severity: warning
receiver: 'team-slack'
receivers:
- name: 'team-email'
email_configs:
- to: 'team@example.com'
headers:
Subject: '{{ .GroupLabels.alertname }}: {{ .Status | toUpper }}'
- name: 'team-slack'
slack_configs:
- api_url: 'https://hooks.slack.com/services/YOUR/SLACK/WEBHOOK'
channel: '#alerts'
title: 'تنبيه: {{ .GroupLabels.alertname }}'
text: '{{ range .Alerts }}{{ .Annotations.description }}{{ end }}'
- name: 'team-pagerduty'
pagerduty_configs:
- service_key: 'your-pagerduty-key'
التكامل مع Grafana
بينما يحتوي Prometheus على واجهة وبسيطة، تُقدم Grafana رؤية أفضل لخلق لوحات تحكم شاملة.
إضافة Prometheus كمصدر بيانات
- افتح Grafana وانتقل إلى التكوين → مصادر البيانات
- انقر على “إضافة مصدر بيانات”
- اختر “Prometheus”
- ضع عنوان URL إلى
http://localhost:9090(أو خادم Prometheus الخاص بك) - انقر على “حفظ واختبار”
أرقام لوحات تحكم شائعة
استيراد لوحات تحكم مُعدة مسبقًا من grafana.com:
- Node Exporter Full (ID: 1860): مقاييس Linux الشاملة
- Kubernetes Cluster Monitoring (ID: 7249): ملخص K8s
- Docker Container Monitoring (ID: 193): مقاييس الحاويات
- Prometheus Stats (ID: 2): مقاييس Prometheus الداخلية
إنشاء لوحات تحكم مخصصة
أنشئ لوحات باستخدام استعلامات PromQL:
{
"title": "استخدام المعالج",
"targets": [{
"expr": "100 - (avg(rate(node_cpu_seconds_total{mode=\"idle\"}[5m])) * 100)"
}]
}
صادرات شائعة
امتد Prometheus المراقبة مع صادرات متخصصة:
Blackbox Exporter
يحقق نقاط الواجهة عبر HTTP، HTTPS، DNS، TCP، وICMP:
scrape_configs:
- job_name: 'blackbox'
metrics_path: /probe
params:
module: [http_2xx]
static_configs:
- targets:
- https://example.com
- https://api.example.com
relabel_configs:
- source_labels: [__address__]
target_label: __param_target
- source_labels: [__param_target]
target_label: instance
- target_label: __address__
replacement: localhost:9115
صادرات قواعد البيانات
- mysqld_exporter: مقاييس MySQL/MariaDB
- postgres_exporter: مقاييس PostgreSQL
- mongodb_exporter: مقاييس MongoDB
- redis_exporter: مقاييس Redis
صادرات التطبيقات
- nginx_exporter: مقاييس خادم NGINX
- apache_exporter: مقاييس خادم Apache HTTP
- haproxy_exporter: مقاييس موزع الحوافز HAProxy
صادرات السحابة
- cloudwatch_exporter: مقاييس AWS CloudWatch
- stackdriver_exporter: مقاييس Google Cloud
- azure_exporter: مقاييس Azure Monitor
الممارسات الجيدة
الاحتفاظ بالبيانات
قم بتكوين الاحتفاظ المناسب بناءً على احتياجاتك:
--storage.tsdb.retention.time=30d
--storage.tsdb.retention.size=50GB
قواعد التسجيل
احسب مسبقًا التعبيرات التي يتم استعلامها بشكل متكرر:
groups:
- name: example_rules
interval: 30s
rules:
- record: job:node_cpu_utilization:avg
expr: 100 - (avg by (job) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)
إدارة العلامات
- حافظ على عدد العلامات منخفضًا
- استخدم مسميات متسقة
- تجنب العلامات ذات الكثافة العالية (IDs المستخدمين، تواريخ)
الأمان
- قم بتفعيل المصادقة وHTTPS
- قم بقيود الوصول إلى واجهة API لـ Prometheus
- استخدم سياسات الشبكة في Kubernetes
- قم بتطبيق RBAC للمقاييس الحساسة
التوافر العالي
- ركز عدة مثيلات لـ Prometheus
- استخدم Thanos أو Cortex لتخزين المدى الطويل
- قم بتطبيق التجميع للاعدادات الهرمية
تصحيح المشكلات الشائعة
استخدام الذاكرة المرتفع
- قلل تكرار عملية السحب
- قلل فترة الاحتفاظ
- تحسين استعلامات PromQL
- قم بتطبيق قواعد تسجيل
مقاييس مفقودة
- تحقق من حالة الأهداف في
/targets - تحقق من الاتصال الشبكي
- تحقق من تكوين السحب
- تحقق من سجلات صادرات
استعلامات بطيئة
- استخدم قواعد تسجيل للتوسيعات المعقدة
- تحسين فلاتر العلامات
- قلل المدى الزمني
- أضف الفهارس إذا كنت تستخدم تخزينًا عن بُعد
تحسين الأداء
تحسين الاستعلامات
# سيء: كثافة عالية
sum(rate(http_requests_total[5m]))
# جيد: تجميع حسب العلامات ذات الصلة
sum by (status, method) (rate(http_requests_total[5m]))
حدود الموارد
للنشر في Kubernetes:
resources:
requests:
memory: "2Gi"
cpu: "1000m"
limits:
memory: "4Gi"
cpu: "2000m"
الخاتمة
يوفر Prometheus حلًا قويًا ومُوسّعًا لمراقبة البنية التحتية الحديثة. نموذجه القائم على السحب، ولغة الاستعلام القوية، ونظام صادرات موسّع يجعلاه مثاليًا لمراقبة كل شيء من الخوادم المعدنية إلى الكластرات Kubernetes المعقدة.
بجمع Prometheus مع Grafana لعرض البيانات وAlertManager لإشعارات التنبيه، يمكنك إنشاء منصة مراقبة شاملة قادرة على التعامل مع متطلبات مراقبة المهام الكبيرة. يضمن المجتمع النشط والدعم من مؤسسة CNCF التطوير المستمر والدعم.
ابدأ بجمع المقاييس الأساسية، أضف تدريجيًا صادرات لخدماتك الخاصة، وقم بتحسين قواعد التنبيه بناءً على الخبرة العملية. يتوسع Prometheus مع البنية التحتية الخاصة بك، من النشر على خوادم فردية إلى معمارية مراقبة متعددة المراكز.
الموارد المرتبطة
- كيفية تثبيت Ubuntu 24.04 والأدوات المفيدة
- إدارة حزم Ubuntu: دليل مختصر لـ APT و dpkg
- تثبيت وتشغيل Grafana على Ubuntu: دليل كامل
- دليل Kubernetes
- موزعات Kubernetes - ملخص سريع لـ kubeadm، k3s، MicroK8s، Minikube، Talos Linux و RKE2
- دليل Docker