مراقبة النظام والخدمات (Monitoring) باستخدام Prometheus و Grafana


أهلاً يا شباب! اليوم راح ندخل في صلب موضوع مهم جداً لأي مهندس أنظمة Linux: مراقبة الأنظمة والخدمات. راح نستخدم اثنين من أشهر وأقوى الأدوات في هذا المجال: Prometheus لجمع البيانات و Grafana لتصويرها.

ليش المراقبة (Monitoring) مهمة أصلاً؟

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

أولاً: Prometheus - جامع البيانات القوي

Prometheus هو نظام مفتوح المصدر لجمع البيانات الزمنية (time-series data) والتنبيهات. فكرته بسيطة: هو ما ينتظر أحد يرسل له بيانات، هو يروح يسحب البيانات (pull model) من أهداف معينة (targets) بشكل دوري. الأهداف هذي تكون عندها "مصدر" للبيانات اسمه Exporter.

كيف يعمل Prometheus؟

  • Metric Exporters: تطبيقات صغيرة تشغلها على السيرفرات أو الخدمات اللي تبي تراقبها. وظيفتها إنها تعرض مقاييس معينة (CPU usage, memory, disk I/O, network traffic) بصيغة يفهمها Prometheus.
  • Prometheus Server: هذا هو القلب النابض. يروح يسحب البيانات من Exporters، يخزنها، ويعالجها.
  • Alertmanager: جزء من منظومة Prometheus مسؤول عن إرسال التنبيهات بناءً على قواعد معينة (مثلاً: لو الـCPU تعدى 90% لمدة 5 دقايق).
  • Grafana: عادةً يستخدم لتصوير البيانات اللي يجمعها Prometheus بشكل رسومي جميل ومفهوم.

تثبيت Prometheus

راح نفترض إنك على سيرفر Linux (CentOS/Ubuntu). أول شيء، حمل أحدث إصدار من موقع Prometheus الرسمي. أنا بستخدم مثال على Linux 64-bit:

wget https://github.com/prometheus/prometheus/releases/download/v2.x.x/prometheus-2.x.x.linux-amd64.tar.gz
tar xvfz prometheus-2.x.x.linux-amd64.tar.gz
cd prometheus-2.x.x.linux-amd64

بعد كذا، انقل الملفات لمكان مناسب، مثلاً:

sudo mv prometheus /usr/local/bin/
sudo mv promtool /usr/local/bin/
sudo mv console_libraries /etc/prometheus
sudo mv consoles /etc/prometheus
sudo mv prometheus.yml /etc/prometheus

لازم تسوي مستخدم خاص بـPrometheus عشان الأمان:

sudo useradd --no-create-home --shell /bin/false prometheus
sudo chown prometheus:prometheus /usr/local/bin/prometheus
sudo chown prometheus:prometheus /usr/local/bin/promtool
sudo chown -R prometheus:prometheus /etc/prometheus
sudo mkdir /var/lib/prometheus
sudo chown prometheus:prometheus /var/lib/prometheus

إعداد Prometheus

ملف الإعداد الرئيسي هو prometheus.yml. افتحه للتعديل:

sudo nano /etc/prometheus/prometheus.yml

هذا مثال لإعداد بسيط. ركز على الجزء الخاص بـscrape_configs:

global:
  scrape_interval:     15s # By default, scrape targets every 15 seconds.
  evaluation_interval: 15s # Evaluate rules every 15 seconds.

scrape_configs:
  - job_name: 'prometheus'
    static_configs:
      - targets: ['localhost:9090'] # Prometheus server itself

ملاحظة: localhost:9090 هو المنفذ الافتراضي اللي Prometheus يعرض فيه مقاييسه الخاصة. يعني Prometheus يراقب نفسه بنفسه!

تشغيل Prometheus كخدمة (systemd)

عشان نضمن إن Prometheus يشتغل تلقائي مع إقلاع النظام، نسوي له ملف خدمة systemd:

sudo nano /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

[Install]
WantedBy=multi-user.target

احفظ الملف، وبعدين سوي إعادة تحميل لـsystemd وشغل الخدمة:

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

المفروض تشوف Prometheus شغال على المنفذ 9090. تقدر تتصفحه من متصفح الويب: http://Your_Server_IP:9090/targets عشان تشوف الأهداف اللي يراقبها.

ثانياً: Node Exporter - مراقبة السيرفرات

Node Exporter هو الأداة اللي نحتاجها عشان Prometheus يقدر يسحب مقاييس نظام التشغيل (CPU, RAM, Disk, Network) من السيرفر. لازم تثبته على كل سيرفر تبي تراقبه.

تثبيت Node Exporter

نفس طريقة Prometheus تقريباً. حمل أحدث إصدار:

wget https://github.com/prometheus/node_exporter/releases/download/v1.x.x/node_exporter-1.x.x.linux-amd64.tar.gz
tar xvfz node_exporter-1.x.x.linux-amd64.tar.gz
cd node_exporter-1.x.x.linux-amd64

انقل الملف التنفيذي لمكان مناسب:

sudo mv node_exporter /usr/local/bin/

أنشئ مستخدم خاص بـNode Exporter:

sudo useradd --no-create-home --shell /bin/false node_exporter
sudo chown node_exporter:node_exporter /usr/local/bin/node_exporter

تشغيل Node Exporter كخدمة (systemd)

إنشاء ملف خدمة systemd لـNode Exporter:

sudo nano /etc/systemd/system/node_exporter.service

الصق هذا المحتوى:

[Unit]
Description=Node Exporter
Wants=network-online.target
After=network-online.target

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

[Install]
WantedBy=multi-user.target

احفظ الملف، وبعدين:

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

المفروض Node Exporter يشتغل على المنفذ الافتراضي 9100. تقدر تتأكد منه من متصفح الويب: http://Your_Server_IP:9100/metrics.

إضافة Node Exporter لـPrometheus

الآن، نرجع لملف إعداد Prometheus (/etc/prometheus/prometheus.yml) ونضيف Node Exporter كهدف جديد:

sudo nano /etc/prometheus/prometheus.yml

أضف هذا الجزء تحت scrape_configs (أو عدّل عليه إذا كان موجود):

- job_name: 'node_exporter'
    static_configs:
      - targets: ['Your_Server_IP:9100'] # Replace with the IP of the server running Node Exporter

بعد التعديل، لازم تسوي إعادة تشغيل لخدمة Prometheus عشان يقرأ الإعدادات الجديدة:

sudo systemctl restart prometheus

ارجع لصفحة Prometheus Targets (http://Your_Server_IP:9090/targets) وتأكد إن node_exporter ظهر باللون الأخضر.

ثالثاً: Grafana - لوحات المعلومات الجمالية

Grafana هي أداة مفتوحة المصدر لتصوير البيانات. هي اللي بتحول الأرقام اللي يجمعها Prometheus لرسوم بيانية ولوحات معلومات سهلة الفهم.

تثبيت Grafana

تثبيت Grafana يختلف شوي حسب توزيعة Linux. على Debian/Ubuntu:

sudo apt-get install -y apt-transport-https software-properties-common wget
wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add -
echo "deb https://packages.grafana.com/oss/deb stable main" | sudo tee -a /etc/apt/sources.list.d/grafana.list
sudo apt-get update
sudo apt-get install grafana

على CentOS/RHEL:

sudo yum install -y https://dl.grafana.com/oss/release/grafana-8.x.x-1.x86_64.rpm # Check for latest version

بعد التثبيت، شغل الخدمة وخليها تشتغل مع الإقلاع:

sudo systemctl daemon-reload
sudo systemctl start grafana-server
sudo systemctl enable grafana-server
sudo systemctl status grafana-server

Grafana يشتغل افتراضياً على المنفذ 3000. افتح متصفحك وروح لـ http://Your_Server_IP:3000.

ملاحظة: اسم المستخدم الافتراضي هو admin وكلمة المرور الافتراضية أيضاً admin. أول ما تسجل دخول، راح يطلب منك تغير كلمة المرور.

إضافة Prometheus كـData Source في Grafana

بعد ما تسجل دخول لـGrafana:

  1. من القائمة الجانبية، روح لـ Configuration (أيقونة الترس).
  2. اختار Data Sources.
  3. اضغط على Add data source.
  4. اختار Prometheus.
  5. في حقل URL، حط عنوان Prometheus Server حقك (مثلاً: http://localhost:9090 إذا كان Grafana و Prometheus على نفس السيرفر، أو http://Prometheus_Server_IP:9090 إذا كانوا على سيرفرات مختلفة).
  6. اضغط Save & Test. المفروض تشوف رسالة Data source is working.

إنشاء لوحات معلومات (Dashboards)

هنا يجي الجزء الممتع! عندك خيارين رئيسيين:

  1. استيراد لوحة معلومات جاهزة: مجتمع Prometheus و Grafana كبير جداً، وفيه آلاف لوحات المعلومات الجاهزة اللي تقدر تستوردها. أشهر لوحة معلومات لـNode Exporter هي ID: 1860.

    • من القائمة الجانبية، روح لـ Dashboards (أيقونة الأربع مربعات).
    • اضغط Import.
    • في حقل Import via grafana.com, حط 1860 واضغط Load.
    • اختار الـData Source اللي سويته لـPrometheus، واضغط Import.

    راح تشوف لوحة معلومات كاملة تعرض لك كل مقاييس السيرفر اللي يجمعها Node Exporter!

  2. إنشاء لوحة معلومات من الصفر: لو حبيت تسوي لوحتك الخاصة:

    • من القائمة الجانبية، روح لـ Dashboards، ثم New dashboard.
    • اضغط Add an empty panel.
    • في قسم Query، اختار الـData Source حق Prometheus.
    • اكتب استعلام PromQL (لغة الاستعلام الخاصة بـPrometheus). مثلاً، عشان تشوف استخدام الـCPU: node_cpu_seconds_total{mode="idle"}.
    • اختار نوع الرسم البياني (Graph, Stat, Gauge, etc.) وعدّل الإعدادات زي ما تحب.
    • اضغط Apply، ثم احفظ لوحة المعلومات.

خلاصة الكلام

بهذا الدرس، سوينا منظومة مراقبة متكاملة:

  • Prometheus: يجمع البيانات من السيرفرات والخدمات.
  • Node Exporter: يخلي Prometheus يقدر يسحب بيانات نظام التشغيل.
  • Grafana: يعرض البيانات هذي بطريقة حلوة ومفهومة عشان تقدر تراقب صحة نظامك بسهولة.

هذي بس البداية! تقدر تضيف Exporters ثانية لخدمات مختلفة (مثل MySQL Exporter, Nginx Exporter)، وتضبط التنبيهات مع Alertmanager، وتتعمق أكثر في PromQL عشان تسوي لوحات معلومات واستعلامات أقوى. عالم المراقبة واسع وممتع!

أتمنى يكون الدرس واضح ومفيد. أي أسئلة، أنا موجود!