تثبيت Prometheus لجمع مقاييس السيرفر (استهلاك الذاكرة، المعالج، الشبكة)

دقائق القراءة: 5

مقدمة

في أي بيئة تشغيل حديثة، لا يكفي أن يكون التطبيق يعمل فقط، بل يجب أن تعرف بدقة كيف يتصرف السيرفر تحت الضغط، وكيف يستهلك الذاكرة، وما إذا كان المعالج يقترب من الاختناق، وهل الشبكة تتعرض لتشبع أو فقدان حزم. هنا تظهر أهمية أنظمة المراقبة القائمة على المقاييس، وعلى رأسها Prometheus الذي أصبح مكوناً أساسياً في بيئات DevOps الحديثة.

إذا كنت قد قرأت مقال لماذا المراقبة حتمية في الـ DevOps؟ مقدمة في Prometheus و Grafana فهذه المقالة تمثل التطبيق العملي التالي: سنثبت Prometheus مع Node Exporter لجمع مؤشرات الذاكرة والمعالج والشبكة من سيرفر Linux بطريقة مستقرة وقابلة للتوسع.

كيف تعمل بنية Prometheus مع السيرفر؟

يعتمد Prometheus على نموذج Pull، أي أنه لا ينتظر من السيرفرات أن ترسل البيانات إليه، بل يقوم هو بسحب المقاييس دورياً من نقاط كشف تسمى /metrics.

في حالة مراقبة الخوادم، لا نثبت Prometheus وحده فقط، بل نضيف أداة خفيفة اسمها Node Exporter. هذه الأداة تقرأ من نظام التشغيل معلومات مثل:

  • نسبة استخدام CPU.
  • استهلاك RAM والذاكرة الحرة.
  • إحصائيات واجهات الشبكة Network Interfaces.
  • أقراص التخزين وعمليات I/O.

المتطلبات قبل التثبيت

قبل بدء العمل، تأكد من وجود سيرفر Ubuntu أو توزيعة مشابهة، مع صلاحيات sudo. كما يفضل أن تكون قد جهزت الاتصال الآمن عبر SSH Keys بدلاً من كلمات المرور.

لا تفتح المنافذ الخاصة بـ Prometheus أو Node Exporter للإنترنت العام بدون قيود. الأفضل هو تقييد الوصول عبر جدار ناري، أو ربط الخدمة بشبكة داخلية فقط، أو وضعها خلف Reverse Proxy محمي.

تثبيت Node Exporter لجمع مقاييس النظام

أول خطوة عملية هي تثبيت Node Exporter لأنه المصدر الذي سيكشف بيانات السيرفر إلى Prometheus.

sudo useradd --no-create-home --shell /bin/false node_exporter

cd /tmp
curl -LO https://github.com/prometheus/node_exporter/releases/download/v1.8.1/node_exporter-1.8.1.linux-amd64.tar.gz
tar xvf node_exporter-1.8.1.linux-amd64.tar.gz

sudo cp node_exporter-1.8.1.linux-amd64/node_exporter /usr/local/bin/
sudo chown node_exporter:node_exporter /usr/local/bin/node_exporter

الآن ننشئ خدمة systemd حتى تعمل الأداة تلقائياً بعد إعادة تشغيل السيرفر.

sudo tee /etc/systemd/system/node_exporter.service > /dev/null <<EOF
[Unit]
Description=Node Exporter
After=network.target

[Service]
User=node_exporter
Group=node_exporter
Type=simple
ExecStart=/usr/local/bin/node_exporter

[Install]
WantedBy=multi-user.target
EOF

sudo systemctl daemon-reload
sudo systemctl enable node_exporter
sudo systemctl start node_exporter
sudo systemctl status node_exporter

بعد التشغيل، ستكون المقاييس متاحة غالباً على المنفذ 9100.

تثبيت Prometheus على السيرفر

الخطوة التالية هي تثبيت خادم Prometheus نفسه، وهو الذي يسحب البيانات، يخزنها كسلاسل زمنية، ثم يتيح لك الاستعلام عنها لاحقاً.

sudo useradd --no-create-home --shell /bin/false prometheus
sudo mkdir /etc/prometheus
sudo mkdir /var/lib/prometheus

cd /tmp
curl -LO https://github.com/prometheus/prometheus/releases/download/v2.53.0/prometheus-2.53.0.linux-amd64.tar.gz
tar xvf prometheus-2.53.0.linux-amd64.tar.gz

sudo cp prometheus-2.53.0.linux-amd64/prometheus /usr/local/bin/
sudo cp prometheus-2.53.0.linux-amd64/promtool /usr/local/bin/
sudo cp -r prometheus-2.53.0.linux-amd64/consoles /etc/prometheus
sudo cp -r prometheus-2.53.0.linux-amd64/console_libraries /etc/prometheus
sudo chown -R prometheus:prometheus /etc/prometheus /var/lib/prometheus /usr/local/bin/prometheus /usr/local/bin/promtool

ملف الإعداد الأساسي

هذا الملف يحدد دورة السحب scrape_interval والأهداف التي يجب مراقبتها.

global:
  scrape_interval: 15s

scrape_configs:
  - job_name: "prometheus"
    static_configs:
      - targets: ["localhost:9090"]

  - job_name: "node_exporter"
    static_configs:
      - targets: ["localhost:9100"]

احفظ الملف باسم /etc/prometheus/prometheus.yml.

تشغيل الخدمة

sudo tee /etc/systemd/system/prometheus.service > /dev/null <<EOF
[Unit]
Description=Prometheus
After=network.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.listen-address=:9090

[Install]
WantedBy=multi-user.target
EOF

sudo systemctl daemon-reload
sudo systemctl enable prometheus
sudo systemctl start prometheus
sudo systemctl status prometheus

التحقق من أن المقاييس تُجمع فعلياً

بعد تشغيل الخدمة، افتح واجهة Prometheus UI على المنفذ 9090 ثم جرّب بعض الاستعلامات الأساسية:

  • up للتأكد من أن الهدف حي.
  • node_memory_MemAvailable_bytes لمراقبة الذاكرة المتاحة.
  • rate(node_cpu_seconds_total[5m]) لقراءة نشاط المعالج.
  • rate(node_network_receive_bytes_total[5m]) لحركة الشبكة الواردة.

ميزة هذه الصيغة أنها تسمح ببناء لوحات تحليلية لاحقاً أو تمرير المقاييس إلى أدوات مثل Grafana بسهولة.

ماذا تعني المقاييس الأساسية عملياً؟

مقاييس الذاكرة

لا تنظر فقط إلى الذاكرة المستخدمة، بل قارن بين الذاكرة الحرة والمتاحة وذاكرة cache. في Linux قد يبدو الاستهلاك مرتفعاً بينما النظام فقط يستخدم الذاكرة للتخزين المؤقت لتحسين الأداء.

مقاييس المعالج

مقياس CPU يجب تفسيره زمنياً، وليس كلحظة منفردة. ارتفاع قصير لمدة ثوانٍ قد يكون طبيعياً أثناء عمليات Backup أو CI/CD كما شرحنا في مقال ما هو الـ CI/CD؟ ولماذا نؤتمت عمليات اختبار ونشر الأكواد؟.

مقاييس الشبكة

تحليل الشبكة لا يقتصر على عدد bytes الداخلة والخارجة فقط، بل يشمل مراقبة الأخطاء وعمليات الإسقاط drops. هذه البيانات تساعدك على اكتشاف مشاكل في واجهة الشبكة أو حمل غير متوقع من العملاء أو الروبوتات.

تشغيل Prometheus بالحاويات بدلاً من التثبيت التقليدي

إذا كانت بنيتك تعتمد على الحاويات، فيمكنك تشغيله عبر Docker. وإن كنت جديداً على هذا المسار فراجع مقال مشكلة “الكود يعمل على جهازي فقط” وكيف يحلها Docker نهائياً؟ ثم ما هو Docker Compose؟ ولماذا نحتاجه لتشغيل المشاريع المعقدة؟.

version: "3.8"

services:
  prometheus:
    image: prom/prometheus:latest
    container_name: prometheus
    ports:
      - "9090:9090"
    volumes:
      - ./prometheus.yml:/etc/prometheus/prometheus.yml
    restart: unless-stopped

  node_exporter:
    image: prom/node-exporter:latest
    container_name: node_exporter
    ports:
      - "9100:9100"
    restart: unless-stopped

هذا الأسلوب مناسب جداً عندما تكون بقية الخدمات تعمل ضمن بيئة Containerization موحدة، أو عندما تريد دمجه لاحقاً مع مسارات نشر آلي باستخدام GitHub Actions أو منصات أكثر تقدماً.

أفضل الممارسات التشغيلية والأمنية

  • اجعل فترة السحب 15s أو 30s لمعظم الخوادم العامة.
  • خزّن بيانات TSDB على قرص مستقر وليس مؤقتاً.
  • استخدم أتمتة مثل Ansible إذا كنت ستنشر Node Exporter على عدة خوادم.
  • قسّم الأهداف ضمن job_name واضح لتسهيل الاستعلامات والتنبيهات.

في بيئات الإنتاج، لا تعتمد على التثبيت اليدوي طويل المدى. الأفضل تحويل إعداد Prometheus إلى كود قابل لإعادة الاستخدام عبر Ansible أو بنية IaC كما ناقشنا في البنية التحتية ككود، حتى تمنع اختلاف الإعدادات بين الخوادم وتقلل احتمالات Downtime.

الخاتمة

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

المرحلة التالية الطبيعية بعد هذا الإعداد هي بناء لوحات بصرية في Grafana، ثم إعداد تنبيهات ذكية عند تجاوز عتبات حرجة، لتنتقل من المراقبة السلبية إلى المراقبة الاستباقية التي تميز فرق SRE وDevOps الناضجة.

5 comments

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *