📖 لماذا المراقبة؟
Observability — الرؤية الكاملة
بدون مراقبة، أنت أعمى. المراقبة تتيح لك اكتشاف المشاكل قبل أن يلاحظها المستخدمون، فهم أداء النظام، واتخاذ قرارات مبنية على بيانات.
📈
Metrics (المقاييس)
أرقام رقمية: استخدام CPU، الذاكرة، الطلبات/ثانية. Prometheus يجمعها.
📋
Logs (السجلات)
نصوص تفصيلية: أخطاء، تحذيرات، أحداث. Loki و Elasticsearch يخزنانها.
🔔
Alerts (التنبيهات)
إشعارات فورية عند تجاوز الحدود. عبر Slack, Email, PagerDuty.
📊
Dashboards (اللوحات)
عرض مرئي لكل المقاييس. Grafana يوفر لوحات جميلة وقابلة للتخصيص.
🔥 Prometheus
قاعدة بيانات المقاييس
Prometheus يجمع المقاييس من التطبيقات والبنية التحتية عبر scraping. يستخدم PromQL للاستعلام.
global:
scrape_interval: 15s
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
- job_name: 'node-exporter'
static_configs:
- targets: ['localhost:9100']
- job_name: 'nginx'
static_configs:
- targets: ['localhost:9113']
rate(node_cpu_seconds_total{mode="idle"}[5m])
node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes * 100
rate(http_requests_total[5m])
rate(http_requests_total{status=~"5.."}[5m])
📊 Grafana
لوحات تحكم مرئية
Grafana يتصل بـ Prometheus (ومصادر أخرى) ويعرض البيانات في لوحات تحكم جميلة. يدعم التنبيهات والمشاركة.
services:
prometheus:
image: prom/prometheus:latest
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
- prometheus-data:/prometheus
ports:
- "9090:9090"
grafana:
image: grafana/grafana:latest
volumes:
- grafana-data:/var/lib/grafana
ports:
- "3000:3000"
environment:
- GF_SECURITY_ADMIN_PASSWORD=admin
node-exporter:
image: prom/node-exporter:latest
ports:
- "9100:9100"
volumes:
prometheus-data:
grafana-data:
📋 Loki — إدارة السجلات
سجلات خفيفة ومركزية
Loki من نفس شركة Grafana. يجمع السجلات من كل الخوادم والتطبيقات في مكان واحد. يستخدم LogQL للاستعلام.
{job="nginx"}
{job="nginx"} |= "error"
count_over_time({job="nginx"} |= "error" [1h])
{app="myapp", level="error"}
🔔 التنبيهات (Alerting)
groups:
- name: server-alerts
rules:
- alert: HighCPUUsage
expr: 100 - (avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 80
for: 5m
labels:
severity: warning
annotations:
summary: "CPU usage > 80% on {{ $labels.instance }}"
- alert: HighMemoryUsage
expr: (1 - node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes) * 100 > 90
for: 5m
labels:
severity: critical
annotations:
summary: "Memory usage > 90% on {{ $labels.instance }}"
- alert: ServiceDown
expr: up == 0
for: 1m
labels:
severity: critical
annotations:
summary: "{{ $labels.job }} is down"
✅ أفضل الممارسات
🎯
1. راقب Golden Signals: Latency, Traffic, Errors, Saturation
2. لا ترسل تنبيهات لكل شيء — فقط لما يحتاج تدخل
3. استخدم Dashboards جاهزة من Grafana Community
4. فعّل Retention Policy للسجلات القديمة
5. اختبر التنبيهات بشكل دوري
6. استخدم SLIs و SLOs لقياس جودة الخدمة