أدوات مراقبة الخوادم: Grafana و Prometheus و Netdata
إعداد حزمة Prometheus + Grafana، Netdata، node_exporter، قواعد التنبيه، إنشاء لوحات المعلومات ومراقبة مقاييس الخادم.
جدول المحتويات
أدوات مراقبة الخوادم: Grafana و Prometheus و Netdata
مراقبة البنية التحتية للخوادم بشكل فعال أمر ضروري للكشف المبكر عن مشاكل الأداء ومنع فترات التوقف. في هذا الدليل، سنقوم بإعداد نظام شامل لمراقبة الخوادم باستخدام Prometheus و Grafana و Netdata.
ما هو Prometheus؟
Prometheus هو نظام مفتوح المصدر لجمع المقاييس والمراقبة مدعوم من Cloud Native Computing Foundation (CNCF). بفضل بنيته القائمة على السحب (Pull)، يقوم بجمع المقاييس بانتظام من الأنظمة المستهدفة عبر HTTP وتخزينها في قاعدة بيانات السلاسل الزمنية.
الميزات الرئيسية لـ Prometheus:
- PromQL: لغة استعلام قوية لتحليل المقاييس
- نموذج السحب: جمع المقاييس من الأهداف عبر HTTP
- اكتشاف الخدمات: اكتشاف تلقائي للأهداف (Kubernetes، Consul، DNS)
- مدير التنبيهات: إدارة التنبيهات بناءً على الشروط
- بيانات متعددة الأبعاد: نموذج بيانات مرن قائم على التسميات
- الاتحاد: ربط هرمي لعدة خوادم Prometheus
تثبيت Node Exporter
Node Exporter هو مُصدّر Prometheus يجمع مقاييس الأجهزة ونظام التشغيل من خوادم Linux.
التثبيت مع Systemd
# تحميل Node Exporter
cd /tmp
curl -LO https://github.com/prometheus/node_exporter/releases/download/v1.7.0/node_exporter-1.7.0.linux-amd64.tar.gz
tar xzf node_exporter-1.7.0.linux-amd64.tar.gz
# نقل الملف التنفيذي
sudo mv node_exporter-1.7.0.linux-amd64/node_exporter /usr/local/bin/
# إنشاء مستخدم
sudo useradd --no-create-home --shell /bin/false node_exporter
# ملف خدمة systemd
sudo tee /etc/systemd/system/node_exporter.service > /dev/null <<EOF
[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 \\
--collector.systemd \\
--collector.processes \\
--web.listen-address=:9100
[Install]
WantedBy=multi-user.target
EOF
# بدء الخدمة
sudo systemctl daemon-reload
sudo systemctl enable --now node_exporter
sudo systemctl status node_exporter
Node Exporter مع Docker
# docker-compose.yml
version: '3.8'
services:
node-exporter:
image: prom/node-exporter:latest
container_name: node-exporter
restart: unless-stopped
ports:
- "9100:9100"
volumes:
- /proc:/host/proc:ro
- /sys:/host/sys:ro
- /:/rootfs:ro
command:
- '--path.procfs=/host/proc'
- '--path.sysfs=/host/sys'
- '--path.rootfs=/rootfs'
- '--collector.filesystem.mount-points-exclude=^/(sys|proc|dev|host|etc)($$|/)'
التحقق من المقاييس:
curl http://localhost:9100/metrics | head -50
تثبيت Prometheus
حزمة Prometheus مع Docker Compose
# docker-compose.yml
version: '3.8'
services:
prometheus:
image: prom/prometheus:latest
container_name: prometheus
restart: unless-stopped
ports:
- "9090:9090"
volumes:
- ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml
- ./prometheus/alert_rules.yml:/etc/prometheus/alert_rules.yml
- prometheus_data:/prometheus
command:
- '--config.file=/etc/prometheus/prometheus.yml'
- '--storage.tsdb.path=/prometheus'
- '--storage.tsdb.retention.time=30d'
- '--web.enable-lifecycle'
volumes:
prometheus_data:
تكوين Prometheus
# prometheus/prometheus.yml
global:
scrape_interval: 15s
evaluation_interval: 15s
scrape_timeout: 10s
alerting:
alertmanagers:
- static_configs:
- targets:
- alertmanager:9093
rule_files:
- "alert_rules.yml"
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
- job_name: 'node-exporter'
static_configs:
- targets:
- 'node-exporter:9100'
- '192.168.1.10:9100'
- '192.168.1.11:9100'
labels:
env: 'production'
قواعد التنبيه
aكتشف الحالات الحرجة باستخدام قواعد تنبيه Prometheus:
# prometheus/alert_rules.yml
groups:
- name: server_alerts
rules:
- alert: HighCPUUsage
expr: 100 - (avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 85
for: 5m
labels:
severity: warning
annotations:
summary: "استخدام عالي لوحدة المعالجة ({{ $labels.instance }})"
description: "استخدام CPU يبلغ {{ $value | printf \"%.1f\" }}% - أعلى من 85% لمدة 5 دقائق."
- alert: HighMemoryUsage
expr: (1 - (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes)) * 100 > 90
for: 5m
labels:
severity: critical
annotations:
summary: "استخدام عالي للذاكرة ({{ $labels.instance }})"
description: "استخدام الذاكرة يبلغ {{ $value | printf \"%.1f\" }}% - أعلى من 90%."
- alert: DiskAlmostFull
expr: (1 - (node_filesystem_avail_bytes{fstype!~"tmpfs|overlay"} / node_filesystem_size_bytes{fstype!~"tmpfs|overlay"})) * 100 > 85
for: 10m
labels:
severity: warning
annotations:
summary: "القرص ممتلئ تقريباً ({{ $labels.instance }})"
description: "{{ $labels.mountpoint }} استخدام القرص {{ $value | printf \"%.1f\" }}%"
- alert: InstanceDown
expr: up == 0
for: 2m
labels:
severity: critical
annotations:
summary: "الخادم غير متاح ({{ $labels.instance }})"
description: "{{ $labels.job }} الهدف غير متاح منذ دقيقتين."
إعداد Alertmanager
# alertmanager/alertmanager.yml
global:
resolve_timeout: 5m
route:
group_by: ['alertname', 'severity']
group_wait: 30s
group_interval: 5m
repeat_interval: 4h
receiver: 'telegram'
receivers:
- name: 'telegram'
telegram_configs:
- bot_token: 'رمز_البوت_الخاص_بك'
chat_id: معرف_المحادثة
parse_mode: 'HTML'
message: |
<b>{{ .Status | toUpper }}</b>
<b>تنبيه:</b> {{ .CommonLabels.alertname }}
<b>الخطورة:</b> {{ .CommonLabels.severity }}
<b>الخادم:</b> {{ .CommonLabels.instance }}
تثبيت Grafana
Grafana مع Docker Compose
services:
grafana:
image: grafana/grafana:latest
container_name: grafana
restart: unless-stopped
ports:
- "3000:3000"
volumes:
- grafana_data:/var/lib/grafana
environment:
- GF_SECURITY_ADMIN_USER=admin
- GF_SECURITY_ADMIN_PASSWORD=كلمة_مرور_قوية123!
- GF_USERS_ALLOW_SIGN_UP=false
volumes:
grafana_data:
لوحات معلومات Grafana الشائعة
# Node Exporter Full Dashboard
Dashboard ID: 1860
مصدر البيانات: Prometheus
# Docker Container Monitoring
Dashboard ID: 893
# Prometheus Stats
Dashboard ID: 2
استعلامات PromQL مخصصة
# نسبة استخدام CPU
100 - (avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)
# نسبة استخدام RAM
(1 - (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes)) * 100
# نسبة استخدام القرص
(1 - (node_filesystem_avail_bytes{mountpoint="/"} / node_filesystem_size_bytes{mountpoint="/"})) * 100
# حركة الشبكة (بايت/ثانية)
rate(node_network_receive_bytes_total{device="eth0"}[5m])
rate(node_network_transmit_bytes_total{device="eth0"}[5m])
# وقت تشغيل النظام
node_time_seconds - node_boot_time_seconds
تثبيت Netdata
Netdata هي أداة مراقبة خوادم في الوقت الفعلي. التثبيت سهل للغاية ويوفر مقاييس مفصلة فوراً.
التثبيت بأمر واحد
bash <(curl -Ss https://my-netdata.io/kickstart.sh)
sudo systemctl status netdata
واجهة الويب: http://عنوان_IP_الخادم:19999
Netdata مع Docker
version: '3.8'
services:
netdata:
image: netdata/netdata:latest
container_name: netdata
restart: unless-stopped
ports:
- "19999:19999"
cap_add:
- SYS_PTRACE
- SYS_ADMIN
security_opt:
- apparmor:unconfined
volumes:
- netdataconfig:/etc/netdata
- netdatalib:/var/lib/netdata
- netdatacache:/var/cache/netdata
- /proc:/host/proc:ro
- /sys:/host/sys:ro
- /var/run/docker.sock:/var/run/docker.sock:ro
volumes:
netdataconfig:
netdatalib:
netdatacache:
حزمة المراقبة الكاملة (Docker Compose)
# docker-compose.monitoring.yml
version: '3.8'
services:
prometheus:
image: prom/prometheus:latest
container_name: prometheus
restart: unless-stopped
ports:
- "9090:9090"
volumes:
- ./prometheus:/etc/prometheus
- prometheus_data:/prometheus
networks:
- monitoring
grafana:
image: grafana/grafana:latest
container_name: grafana
restart: unless-stopped
ports:
- "3000:3000"
volumes:
- grafana_data:/var/lib/grafana
depends_on:
- prometheus
networks:
- monitoring
node-exporter:
image: prom/node-exporter:latest
container_name: node-exporter
restart: unless-stopped
ports:
- "9100:9100"
networks:
- monitoring
alertmanager:
image: prom/alertmanager:latest
container_name: alertmanager
restart: unless-stopped
ports:
- "9093:9093"
networks:
- monitoring
networks:
monitoring:
driver: bridge
volumes:
prometheus_data:
grafana_data:
docker compose -f docker-compose.monitoring.yml up -d
من خلال إعداد حزمة Prometheus + Grafana + Netdata، يمكنك مراقبة البنية التحتية الكاملة لخوادم REXE من لوحة معلومات واحدة. تتيح قواعد التنبيه الكشف الاستباقي عن المشاكل.
مقالات ذات صلة
إعداد خادم البروكسي: دليل Squid و HAProxy
Squid forward proxy، HAProxy موازن الأحمال، إنهاء SSL، قواعد ACL، التخزين المؤقت، فحوصات الصحة والتوافر العالي.
إعداد Nginx Proxy Manager: بروكسي عكسي بواجهة ويب
تثبيت Nginx Proxy Manager عبر Docker، تجديد شهادات SSL تلقائياً، إضافة proxy host، قوائم الوصول، إعادة التوجيه، البث والمواقع المخصصة.
إعداد CrowdSec: محرك أمان مدعوم من المجتمع
تثبيت CrowdSec، تكوين bouncer، كشف الهجمات، حظر IP، لوحة المعلومات، إدارة المجموعات والسيناريوهات.