تثبيت Prometheus لجمع مقاييس السيرفر (استهلاك الذاكرة، المعالج، الشبكة)
مقدمة
في أي بيئة تشغيل حديثة، لا يكفي أن يكون التطبيق يعمل فقط، بل يجب أن تعرف بدقة كيف يتصرف السيرفر تحت الضغط، وكيف يستهلك الذاكرة، وما إذا كان المعالج يقترب من الاختناق، وهل الشبكة تتعرض لتشبع أو فقدان حزم. هنا تظهر أهمية أنظمة المراقبة القائمة على المقاييس، وعلى رأسها 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