نظام المراقبة والتنبيهات: إعداد Prometheus + Grafana

CPU فوق 90%؟ قرص ممتلئ؟ التنبيه يوصلك قبل المشكلة. نشرح إعداد Prometheus + Grafana على سيرفرك.
لماذا المراقبة ضرورية؟
بدون نظام مراقبة فعال، أنت تعرف عن المشاكل فقط لما العميل يتصل يشتكي. هذا يعني إن المشكلة حصلت وأثرت على المستخدمين قبل ما تكتشفها. المراقبة الاستباقية تقلب المعادلة وتنبهك قبل ما تتحول المشكلة الصغيرة لكارثة.
نظام المراقبة الاحترافي يراقب 3 محاور أساسية: البنية التحتية (المعالج والذاكرة والتخزين)، التطبيقات (زمن الاستجابة والأخطاء)، والأعمال (عدد الطلبات والمبيعات). تجاهل أي محور منها يترك نقطة عمياء خطيرة.
المقاييس الأساسية للسيرفرات
مقاييس المعالج (CPU)
- استخدام المعالج: النسبة المئوية من قدرة المعالج المستخدمة. تنبيه عند تجاوز 80% لمدة 5 دقائق
- حمل النظام (Load Average): عدد العمليات المنتظرة. القيمة الطبيعية أقل من عدد الأنوية
- سرقة المعالج (CPU Steal): مهم في بيئات VPS. إذا تجاوز 10% فالسيرفر المادي محمل بشكل زائد
مقاييس الذاكرة (RAM)
- الذاكرة المستخدمة: تنبيه عند تجاوز 85%
- Swap المستخدم: أي استخدام للـ Swap يعني نقص ذاكرة. تنبيه فوري
- الذاكرة المتاحة: الأهم من الذاكرة الفارغة لأنها تشمل القابلة للتحرير
مقاييس التخزين
- المساحة المستخدمة: تنبيه عند 80%، حرج عند 90%
- IOPS: عمليات الإدخال والإخراج في الثانية
- زمن الاستجابة (Latency): تنبيه إذا تجاوز 20ms
- Inodes المستخدمة: نفادها يمنع إنشاء ملفات جديدة حتى لو في مساحة فارغة
مقاييس الشبكة
- حركة المرور (Bandwidth): الداخل والخارج بالميغابت
- الحزم المفقودة (Packet Loss): أي خسارة فوق 1% تحتاج تحقيق
- الاتصالات النشطة: ارتفاع مفاجئ قد يشير لهجمة DDoS
إعداد Prometheus و Grafana
الخطوة 1: تثبيت Prometheus
sudo useradd --no-create-home --shell /bin/false prometheus
sudo mkdir /etc/prometheus /var/lib/prometheus
wget https://github.com/prometheus/prometheus/releases/download/v2.52.0/prometheus-2.52.0.linux-amd64.tar.gz
tar xvf prometheus-2.52.0.linux-amd64.tar.gz
sudo cp prometheus-2.52.0.linux-amd64/prometheus /usr/local/bin/
sudo cp prometheus-2.52.0.linux-amd64/promtool /usr/local/bin/
الخطوة 2: إعداد Prometheus
# /etc/prometheus/prometheus.yml
global:
scrape_interval: 15s
evaluation_interval: 15s
rule_files:
- "alerts.yml"
alerting:
alertmanagers:
- static_configs:
- targets: ['localhost:9093']
scrape_configs:
- job_name: 'node'
static_configs:
- targets: ['localhost:9100']
- job_name: 'nginx'
static_configs:
- targets: ['localhost:9113']
الخطوة 3: تثبيت Node Exporter
Node Exporter يجمع مقاييس السيرفر ويقدمها لـ Prometheus:
wget https://github.com/prometheus/node_exporter/releases/download/v1.8.0/node_exporter-1.8.0.linux-amd64.tar.gz
tar xvf node_exporter-1.8.0.linux-amd64.tar.gz
sudo cp node_exporter-1.8.0.linux-amd64/node_exporter /usr/local/bin/
الخطوة 4: تثبيت Grafana
sudo apt install -y apt-transport-https software-properties-common
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 /etc/apt/sources.list.d/grafana.list
sudo apt update && sudo apt install grafana -y
sudo systemctl enable grafana-server && sudo systemctl start grafana-server
Grafana يعمل على المنفذ 3000. ادخل بالمتصفح وأضف Prometheus كمصدر بيانات.
إعداد قواعد التنبيهات
ملف التنبيهات
# /etc/prometheus/alerts.yml
groups:
- name: server_alerts
rules:
- alert: HighCPU
expr: 100 - (avg(rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 80
for: 5m
labels:
severity: warning
annotations:
summary: "استخدام المعالج مرتفع ({{ $value }}%)"
- alert: HighMemory
expr: (1 - node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes) * 100 > 85
for: 3m
labels:
severity: warning
annotations:
summary: "استخدام الذاكرة مرتفع ({{ $value }}%)"
- alert: DiskSpaceLow
expr: (1 - node_filesystem_avail_bytes / node_filesystem_size_bytes) * 100 > 80
for: 5m
labels:
severity: warning
annotations:
summary: "المساحة التخزينية منخفضة ({{ $value }}%)"
- alert: DiskSpaceCritical
expr: (1 - node_filesystem_avail_bytes / node_filesystem_size_bytes) * 100 > 90
for: 2m
labels:
severity: critical
annotations:
summary: "المساحة التخزينية حرجة ({{ $value }}%)"
إعداد Alertmanager
Alertmanager يستقبل التنبيهات من Prometheus ويوجهها للقنوات المناسبة:
# /etc/alertmanager/alertmanager.yml
global:
resolve_timeout: 5m
route:
receiver: 'default'
group_wait: 30s
group_interval: 5m
repeat_interval: 4h
routes:
- match:
severity: critical
receiver: 'critical-alerts'
repeat_interval: 1h
receivers:
- name: 'default'
email_configs:
- to: 'ops@example.com'
- name: 'critical-alerts'
email_configs:
- to: 'ops@example.com'
webhook_configs:
- url: 'https://hooks.slack.com/services/xxx'
قنوات التنبيه
| القناة | الاستخدام | وقت الاستجابة |
|---|---|---|
| البريد الإلكتروني | تنبيهات منخفضة الخطورة | دقائق لساعات |
| Slack/Teams | تنبيهات متوسطة | دقائق |
| SMS | تنبيهات حرجة | ثوان |
| PagerDuty | تصعيد تلقائي مع مناوبات | ثوان |
| Webhook | تكامل مع أنظمة مخصصة | فوري |
لوحات Grafana الأساسية
لوحة نظرة عامة
- استخدام المعالج لكل سيرفر (خطي)
- استخدام الذاكرة (مقياس)
- مساحة التخزين (شريطي)
- حركة الشبكة (خطي مزدوج)
- وقت التشغيل لكل خدمة
لوحة التطبيق
- عدد الطلبات في الثانية
- زمن الاستجابة (p50, p95, p99)
- معدل الأخطاء (4xx, 5xx)
- الاتصالات النشطة
أدوات مراقبة إضافية
| الأداة | التخصص | النوع |
|---|---|---|
| Uptime Kuma | مراقبة التوفر من الخارج | مفتوح المصدر |
| Blackbox Exporter | فحص HTTP/TCP/ICMP | مفتوح المصدر |
| Loki | تجميع وبحث في السجلات | مفتوح المصدر |
| Netdata | مراقبة فورية بواجهة جاهزة | مفتوح المصدر |
أخطاء شائعة
- تنبيهات كثيرة جدا: إرهاق التنبيهات يؤدي لتجاهلها. اضبط العتبات بعناية
- عدم اختبار التنبيهات: تنبيه لم يختبر قد لا يعمل عند الحاجة
- مراقبة المقاييس فقط: السجلات والتتبع مهمة بنفس القدر
- عدم توثيق الاستجابة: كل تنبيه يجب أن يرتبط بإجراء واضح
الخلاصة
نظام المراقبة الجيد يحول فريقك من رد الفعل للاستباق. ابدأ بـ Prometheus و Grafana وNode Exporter كأساس، ثم أضف المزيد حسب احتياجك. على سيرفرات كلاود (cloud.net.sa) تحصل على أداء ثابت مع زمن استجابة 8ms وSLA بنسبة 99.99%، لكن المراقبة من طرفك تبقى ضرورية لمتابعة تطبيقاتك وخدماتك.
ابدأ الآن
تبي تجرب بنفسك؟ اختر باقة الاستضافة المناسبة أو صمم سيرفرك الخاص بالمواصفات اللي تبيها.
