دليل النشر

مراقبة VPS باستخدام Grafana وPrometheus

انشر على VPS Cloud ←

دليل عملي

مراقبة VPS باستخدام Grafana وPrometheus

الأمان والمراقبة11 دقيقةً للقراءةعدد الخطوات: 8

عندما تريد مقاييس تاريخية ولوحات معلومات مخصصة وتنبيهات دقيقة، فإن ثنائي Prometheus + Grafana هو المرجع مفتوح المصدر. يجمع Prometheus 3.x السلاسل الزمنية ويخزنها، ويعرضها Grafana 13.x بصريًا. إليك كيفية نشر هذه الحزمة الكاملة — Node Exporter وcAdvisor وAlertmanager — على خادمك الافتراضي VPS الخاص.

المحتويات· لماذا تستضيف Prometheus وGrafana ذاتيًا على خادم VPS1/11
  1. 01لماذا تستضيف Prometheus وGrafana ذاتيًا على خادم VPS
  2. 02ما تقدمه هذه الحزمة على خادمك VPS
  3. 03المتطلبات الأساسية للخادم VPS والموارد اللازمة
  4. 04نشر الحزمة باستخدام Docker Compose
  5. 05استيراد لوحات معلومات Grafana المجتمعية
  6. 06إعداد التنبيهات مع Alertmanager
  7. 07Prometheus مقابل InfluxDB مقابل Zabbix: أيهما تختار؟
  8. 08التصليب: لا تعرض Prometheus للعموم أبدًا
  9. 09إضافة مراقبة حاويات Docker مع cAdvisor
  10. 10استكشاف الأخطاء: الأخطاء الأكثر شيوعًا
  11. 11للمزيد من التعمق

لماذا تستضيف Prometheus وGrafana ذاتيًا على خادم VPS

على خلاف الأداة الشاملة، تفصل حزمة Prometheus + Grafana بوضوح بين الجمع (يجمع Prometheus المقاييس التي تعرضها المُصدِّرات) والتخزين (قاعدة بيانات السلاسل الزمنية المدمجة) والعرض البصري (Grafana). هذه الوحدوية هي بالضبط ما يجعلها معيارًا: تراقب الخادم VPS نفسه باستخدام Node Exporter، وحاوياتك باستخدام cAdvisor، وقاعدة بيانات PostgreSQL أو MySQL باستخدام المُصدِّر المخصص، وتزود تطبيقاتك الخاصة بأدوات القياس بتنسيق Prometheus.

كل ذلك على خادم VPS تتحكم فيه، مما يجنبك إرسال مقاييس بنية تحتية حساسة إلى خدمة SaaS تُحاسَب بحسب الاستيعاب. تحتفظ بالسجل طالما سمح قرصك بذلك، وتبني لوحات معلومات خاصة بحزمتك، وتحدد قواعد التنبيه الخاصة بك عبر Alertmanager.

مع إصدار Prometheus 3.x (أحدث إصدار مستقر: v3.15.0، سبتمبر 2026)، تم تحسين محرك تخزين TSDB لتقليل استهلاك الذاكرة بنسبة 15 إلى 20% — ميزة مباشرة للخوادم VPS. يجلب Grafana 13.x (الإصدار v13.2.3، نهاية سبتمبر 2026) محررًا محسنًا للوحات المعلومات ونظام تنبيه موحدًا.

ما تقدمه هذه الحزمة على خادمك VPS

  • مقاييس نظام مفصلة (CPU وRAM وإدخال/إخراج القرص والشبكة) عبر Node Exporter v1.12.1، محفوظة كسجل على المدى الطويل.
  • مراقبة حاويات Docker باستخدام cAdvisor: الاستهلاك لكل حاوية في الوقت الفعلي.
  • لوحات معلومات Grafana مخصصة، قابلة للاستيراد من مكتبة مجتمعية تضم آلاف القوالب.
  • تنبيهات قوية عبر Alertmanager v0.34.1: عتبات وتجميع وكتم وتوجيه متعدد القنوات (البريد الإلكتروني وSlack وPagerDuty...).
  • مراقبة توفر نقاط نهاية HTTP/TCP مع Blackbox Exporter: اكتشاف وقت الاستجابة وانتهاء صلاحية شهادة TLS.
  • جمع سجلات التطبيقات مع Loki (نفس الناشر Grafana): ربط السجلات والمقاييس في لوحة معلومات واحدة.
  • لغة الاستعلام PromQL لإنشاء مؤشرات مشتقة ومعدلات التغيير.
  • تزويد تطبيقاتك الخاصة بأدوات القياس بتنسيق Prometheus، دون تكلفة استيعاب خارجية.

المتطلبات الأساسية للخادم VPS والموارد اللازمة

هذه الحزمة أكثر استهلاكًا للموارد من مراقب بسيط، لأن Prometheus يحتفظ بالسلاسل الزمنية في الذاكرة قبل كتابتها على القرص. احسب خادم VPS بـ 2 vCPU وذاكرة RAM من 2 إلى 4 غيغابايت لمراقبة خادم واحد أو أكثر. أضف Loki وAlertmanager واستهدف 4 غيغابايت كحد أدنى.

التخزين هو النقطة الحرجة: يولد Prometheus ما يقارب 1 إلى 2 ميغابايت لكل سلسلة زمنية يوميًا. لـ 500 سلسلة على مدى 30 يومًا، خطط لـ 15 إلى 30 غيغابايت. ابدأ بـ 40 غيغابايت من SSD، واضبط --storage.tsdb.retention.time حسب احتياجاتك.

المتطلبات البرمجية: Docker 26+ وDocker Compose v2، واسم نطاق يشير إلى خادم VPS الخاص بك (لوكيل HTTPS العكسي الخاص بـ Grafana)، وufw أو ما يعادله لتقييد المنافذ.

نشر الحزمة باستخدام Docker Compose

  1. إنشاء هيكل مجلد المشروع

    على خادم VPS الخاص بك، أنشئ مجلدًا مخصصًا وهيكل الملفات:

    mkdir -p ~/monitoring/{prometheus,alertmanager,loki}
    cd ~/monitoring

    يعزل هذا التنظيم كل إعداد في مجلده الخاص، مما يبسط التحديثات.

  2. كتابة ملف docker-compose.yml

    عرِّف الخدمات التالية في ملف docker-compose.yml: prometheus (صورة prom/prometheus:v3.15.0)، وgrafana (صورة grafana/grafana:13.2.3)، وnode-exporter (صورة prom/node-exporter:v1.12.1)، وcadvisor (صورة gcr.io/cadvisor/cadvisor:latest)، وalertmanager (صورة prom/alertmanager:v0.34.1).

    قم بتحميل ملفات الإعداد كوحدات تخزين bind-mount وأنشئ وحدات تخزين مُسمَّاة لاستمرارية البيانات: prometheus_data وgrafana_data. مثال على bind لـ node-exporter:

    volumes:
      - /proc:/host/proc:ro
      - /sys:/host/sys:ro
      - /:/rootfs:ro

    ثم شغِّل docker compose up -d لبدء الحزمة.

  3. إعداد prometheus.yml مع جميع مهام الجمع

    في prometheus/prometheus.yml، أعلن عن الأهداف في قسم scrape_configs. أربع مهام أساسية:

    scrape_configs:
      - job_name: 'node'
        static_configs:
          - targets: ['node-exporter:9100']
      - job_name: 'cadvisor'
        static_configs:
          - targets: ['cadvisor:8080']
      - job_name: 'alertmanager'
        static_configs:
          - targets: ['alertmanager:9093']
      - job_name: 'prometheus'
        static_configs:
          - targets: ['localhost:9090']

    أعد تحميل الإعداد دون إعادة التشغيل: curl -X POST http://localhost:9090/-/reload.

  4. إعداد Alertmanager (alertmanager.yml)

    أنشئ alertmanager/alertmanager.yml. إعداد أدنى يوجه التنبيهات إلى Slack:

    route:
      receiver: 'slack-notifications'
      group_wait: 30s
      group_interval: 5m
      repeat_interval: 4h
    receivers:
      - name: 'slack-notifications'
        slack_configs:
          - api_url: 'https://hooks.slack.com/services/YOUR/WEBHOOK'
            channel: '#vps-alerts'
            title: '{{ .CommonAnnotations.summary }}'

    للبريد الإلكتروني، استبدل slack_configs بـ email_configs مع حقول to وfrom وsmarthost وauth_username وauth_password.

  5. إنشاء قواعد التنبيه في Prometheus

    في prometheus/rules.yml، عرِّف قواعدك. ثلاثة أساسية لخادم VPS:

    groups:
      - name: vps
        rules:
          - alert: CPUMرتفع
            expr: 100 - (avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 85
            for: 5m
            annotations:
              summary: 'CPU > 85% لمدة 5 دقائق'
          - alert: ذاكرةMنخفضة
            expr: node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes < 0.10
            for: 5m
            annotations:
              summary: 'الذاكرة المتاحة < 10%'
          - alert: قرصMمتلئ
            expr: (node_filesystem_size_bytes - node_filesystem_avail_bytes) / node_filesystem_size_bytes > 0.85
            for: 10m
            annotations:
              summary: 'القرص > 85%'

    استشهد بهذا الملف في prometheus.yml ضمن rule_files: ['rules.yml'].

  6. ربط Grafana بـ Prometheus (وLoki)

    افتح Grafana على المنفذ 3000. بيانات الاعتماد الافتراضية: admin / admin — غيِّرها فورًا.

    أضف مصدر بيانات Prometheus بالرابط http://prometheus:9090. اختبر الاتصال: يجب أن يعيد 'Data source is working'.

    إذا أضفت Loki إلى Compose (إصدار grafana/loki:3.3.2)، أضف مصدر بيانات Loki ثانيًا بالرابط http://loki:3100. ستتمكن بعد ذلك من ربط ارتفاعات CPU في لوحة Prometheus بسجلات التطبيقات في Loki دون تغيير الأداة.

  7. إتاحة Grafana عبر HTTPS بوكيل عكسي

    لا يجب أبدًا إتاحة Grafana عبر HTTP غير آمن. أعدّ Nginx كوكيل عكسي:

    server {
      listen 443 ssl;
      server_name grafana.your-domain.com;
      ssl_certificate /etc/letsencrypt/live/grafana.your-domain.com/fullchain.pem;
      ssl_certificate_key /etc/letsencrypt/live/grafana.your-domain.com/privkey.pem;
      location / {
        proxy_pass http://127.0.0.1:3000;
        proxy_set_header Host $host;
      }
    }

    أغلق المنافذ الداخلية في جدار الحماية: ufw deny 9090، ufw deny 9093، ufw deny 3000. يجب أن يكون المنفذ 443 فقط (Nginx) مفتوحًا للعموم.

  8. التحقق من جمع Prometheus لجميع الأهداف

    انتقل إلى http://localhost:9090/targets (عبر SSH أو من خلال الوكيل العكسي). يجب أن تُظهر جميع الأهداف المعلنة الحالة UP باللون الأخضر. الحالة DOWN تشير إلى مشكلة في شبكة Docker (اسم خدمة خاطئ) أو منفذ أو إعداد. أصلح قبل المتابعة.

استيراد لوحات معلومات Grafana المجتمعية

يوفر Grafana مكتبة من لوحات المعلومات الجاهزة على grafana.com/grafana/dashboards. معرِّفان أساسيان لخادم VPS:

المعرف 1860 — Node Exporter Full: لوحة المعلومات المرجعية لمقاييس النظام. تعرض في الوقت الفعلي وعلى المدى الطويل: حمل CPU لكل نواة، استخدام الذاكرة (بما فيها المخازن المؤقتة)، إدخال/إخراج القرص لكل جهاز، تشبع الشبكة والطابور. قابلة للتصفية حسب النسخة، مما يجعلها صالحة لمراقبة عدة خوادم VPS من Grafana واحد.

المعرف 893 — cAdvisor: مقاييس Docker لكل حاوية — تقييد CPU، استخدام الذاكرة، إدخال/إخراج وأخطاء الشبكة. مفيد للكشف عن حاوية تستهلك بشكل غير طبيعي دون إبطاء خادم VPS بأكمله.

لاستيراد لوحة معلومات: في Grafana، انتقل إلى Dashboards → Import، أدخل المعرف، حدد مصدر بيانات Prometheus الخاص بك وأكد. تُستورَد اللوحة في ثوانٍ دون بناء أي شيء يدويًا.

إعداد التنبيهات مع Alertmanager

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

التجميع: تُجمَّع تنبيهات متعددة تُطلَق في نفس الوقت (انقطاع الشبكة → CPU مرتفع + قرص غير متاح + خدمة متوقفة) في إشعار واحد. هذا هو الحقل group_by: ['alertname', 'instance'] في alertmanager.yml.

الكتم: قبل صيانة مخططة، أنشئ كتمًا في واجهة Alertmanager (http://localhost:9093) أو عبر واجهة برمجة التطبيقات: amtool silence add --duration=2h alertname=~'.*'. تستمر التنبيهات في التقييم بواسطة Prometheus لكنها لا تُرسَل خلال النافذة.

التوجيه متعدد القنوات: التنبيهات الحرجة (CPU > 95%) تذهب إلى PagerDuty أو Slack مع ذكر @channel، والتحذيرات (CPU > 85%) إلى قناة مراقبة أقل إلحاحًا.

بعد كل تعديل على alertmanager.yml، أعد التحميل دون إعادة التشغيل: curl -X POST http://localhost:9093/-/reload.

Prometheus مقابل InfluxDB مقابل Zabbix: أيهما تختار؟

مرّر الجدول أفقيًا

المعيارPrometheusInfluxDBZabbix
نموذج الجمعسحب (جمع نشط)دفع (عملاء أو API)وكيل + SNMP + JMX
التخزينTSDB مدمج، فعال على VPSInfluxDB مفتوح المصدر أو سحابيPostgreSQL / MySQL، ثقيل
لغة الاستعلامPromQL (قوية، منحنى تعلم حاد)Flux / InfluxQL (مشابهة SQL)ماكرو Zabbix (محدودة)
التنبيهAlertmanager مخصص، مرنمدمج (محدود في النسخة المجانية)مدمج، غني لكن معقد
منحنى التعلممعتدل (PromQL)منخفض (مشابه SQL)مرتفع (واجهة كثيفة، عملاء)
حالة الاستخدام المثاليةبنية تحتية محاوية، تطبيقات مُجهَّزةإنترنت الأشياء، سلاسل زمنية عالية الترددشبكات المؤسسات، SNMP

التصليب: لا تعرض Prometheus للعموم أبدًا

لا يملك Prometheus نظام مصادقة أصليًا. تكشف واجهته الويب قائمة جميع أهدافك، وتسميات بنيتك التحتية، وقواعد التنبيه الخاصة بك — معلومات قيّمة للمهاجم.

ثلاثة قواعد غير قابلة للتفاوض:
1. ربط Prometheus على 127.0.0.1:9090 فقط (--web.listen-address=127.0.0.1:9090 في Compose).
2. حظر المنافذ 9090 و9093 و9100 و8080 في جدار الحماية (ufw deny 9090).
3. حماية Grafana بكلمة مرور قوية وتعطيل الحساب المجهول (GF_AUTH_ANONYMOUS_ENABLED=false كمتغير بيئة).

إذا احتجت إلى الوصول لواجهة Prometheus من الخارج لأغراض التشخيص، استخدم نفقًا SSH (ssh -L 9090:localhost:9090 [email protected]) بدلًا من وكيل عكسي عام.

إضافة مراقبة حاويات Docker مع cAdvisor

يعرض cAdvisor (Container Advisor) مقاييس حاوية Docker لكل حاوية بتنسيق Prometheus: استخدام CPU كنسبة من الحصة المخصصة، استهلاك الذاكرة مع وبدون ذاكرة التخزين المؤقت، إدخال/إخراج الشبكة والقرص، وإعادة التشغيل.

في docker-compose.yml، أضف الخدمة:

cadvisor:
  image: gcr.io/cadvisor/cadvisor:latest
  volumes:
    - /:/rootfs:ro
    - /var/run:/var/run:ro
    - /sys:/sys:ro
    - /var/lib/docker/:/var/lib/docker:ro
  ports:
    - '127.0.0.1:8080:8080'
  restart: unless-stopped

ثم أضف المهمة المقابلة في prometheus.yml. تعرض لوحة Grafana ذات المعرف 893 (cAdvisor) بعد ذلك عرضًا لكل حاوية، مع مرشح على اسم خدمة Docker.

استكشاف الأخطاء: الأخطاء الأكثر شيوعًا

الهدف DOWN في Prometheus (/targets): تحقق أولًا من اسم الخدمة في docker-compose.yml — يحل Prometheus الأسماء عبر DNS الداخلي لـ Docker. إذا كانت الخدمة تسمى node-exporter في Compose، يجب أن يكون رابط الجمع node-exporter:9100 وليس localhost:9100.

لوحات معلومات فارغة بعد الاستيراد: السبب الأكثر شيوعًا هو مهمة جمع تسميتها لا تتطابق مع ما تتوقعه لوحة المعلومات. يتوقع Node Exporter Full (المعرف 1860) مهمة تسمى node — إذا سميتها node_exporter في prometheus.yml، فصِّل يدويًا في متغيرات لوحة المعلومات أو أعد تسمية المهمة.

Alertmanager لا يستقبل التنبيهات: تحقق من أن Prometheus يمكنه الوصول إلى Alertmanager. في prometheus.yml، يجب أن يشير قسم alerting إلى alertmanager:9093 (اسم خدمة Docker). اختبر بـ: docker compose exec prometheus curl http://alertmanager:9093/-/healthy.

خطأ 'context deadline exceeded' عند إعادة التحميل: يستغرق Prometheus أكثر من 30 ثانية لإعادة التحميل إذا كانت القواعد كثيرة أو هدف بطيء. زد مهلة الجمع في prometheus.yml: scrape_timeout: 20s ضمن global.

للمزيد من التعمق

تغطي هذه الحزمة أساسيات مراقبة خادم VPS. للاحتياجات الأكثر تقدمًا:

الاحتفاظ على المدى الطويل: يخزن Prometheus البيانات محليًا، مثالي لـ 30 إلى 90 يومًا. للحصول على تاريخ من 1 إلى 2 سنة دون إشباع القرص، اربط Thanos (مخزن كائنات متوافق مع S3) أو VictoriaMetrics كبديل مباشر للتخزين. VictoriaMetrics مناسب بشكل خاص لخوادم VPS المتواضعة: يستهلك 5 إلى 10 مرات أقل ذاكرة من Prometheus لنفس حجم السلاسل.

مراقبة نقاط نهاية HTTP: أضف Blackbox Exporter إلى Compose لاختبار توفر عناوين URL الخاصة بك، ورمز HTTP المُعاد، والكمون، وتاريخ انتهاء صلاحية شهادة TLS.

السجلات مع Loki: إذا أردت ربط المقاييس بسجلات التطبيقات، أضف Loki + Promtail إلى Compose. يعرض Grafana المقاييس والسجلات في نفس اللوحة.

للاطلاع على جميع خيارات الإعداد المتقدمة، راجع الوثائق الرسمية لـ Grafana ووثائق Prometheus.

انشر حزمة قابلية المراقبة الخاصة بك

يوفّر خادم ServOrbit Cloud VPS ما يلزم من CPU و RAM و SSD لتشغيل Prometheus و Grafana ومصدّراتها دون اختناق، مع قالب Docker جاهز للإعداد.

بحاجة إلى مساعدة؟

تصفّح مركز المساعدة والأسئلة الشائعة، أو تواصل مع فريقنا — معاودة اتصال أو WhatsApp أو بريد إلكتروني. الدعم بـالعربية والفرنسية والإنجليزية.

راسلنا على WhatsAppيُفتح في علامة تبويب جديدة