أساسيات لينكس

مراقبة خوادم لينكس باستخدام Prometheus وnode_exporter وAlertmanager على Debian وUbuntu

ثبّت Prometheus وnode_exporter وAlertmanager من حزم Debian/Ubuntu، وأبعِدها عن الإنترنت، وأنشئ تنبيهات لتوقف الخادم وامتلاء القرص ونقص الذاكرة.

تاريخ النشر
مدة القراءة
6 دقائق
الكاتب
SKYLINE Engineering

الرسم البياني للاستخدام يخبرك بما حدث، أما التنبيه فيخبرك بينما ما يزال هناك وقت للتصرف. وتُعدّ أدوات Prometheus وnode_exporter وAlertmanager مجموعة مفتوحة المصدر شائعة لهذا الغرض على خوادم لينكس، وكلها متوفرة كحزم في Debian وUbuntu. يشرح هذا الدليل إعدادها على خادم واحد، وإبعاد واجهاتها عن الإنترنت، وإضافة ثلاثة تنبيهات يحتاجها معظم الخوادم: توقف الخادم، وامتلاء القرص، ونقص الذاكرة.

المكونات الثلاثة

  • node_exporter يعرض مقاييس الجهاز (المعالج والذاكرة والأقراص والشبكة) عبر HTTP على المنفذ 9100. وتبدأ أسماء مقاييسه بالبادئة node_، مثل node_filesystem_avail_bytes التي تمثل المساحة المتاحة للمستخدمين غير الجذر (دليل node exporter).
  • Prometheus يجمع هذه المقاييس دورياً ويخزنها (15 يوماً افتراضياً بحسب وصف الخيار --storage.tsdb.retention.time في prometheus(1))، ويقيّم قواعد التنبيه، ويقدّم واجهة ويب على المنفذ 9090.
  • Alertmanager يستقبل التنبيهات الفعّالة من Prometheus ويجمّعها ويرسل الإشعارات مثل البريد الإلكتروني، ويستمع على المنفذ 9093.

وبذلك يمر التنبيه بأربع خطوات: يبلّغ node_exporter عن قيمة، ويخزنها Prometheus في كل عملية جمع، وتقارنها قاعدةٌ بعتبة محددة في كل تقييم، ثم يقرر Alertmanager بعد استمرار الحالة المدة المحددة من يُبلَّغ وكم مرة. وقد تتعطل كل خطوة على حدة، ولهذا يركز القسم الأخير من الدليل على اختبار السلسلة كاملة لا جزء واحد منها.

التثبيت من حزم التوزيعة

sudo apt update
sudo apt install prometheus prometheus-node-exporter prometheus-alertmanager

يأتي Debian 13 (trixie) بالإصدار 2.53.3 من Prometheus و1.9.0 من node_exporter و0.28.1 من Alertmanager، ويأتي Debian 12 (bookworm) بالإصدارات 2.42.0 و1.5.0 و0.25.0 (متتبع الحزم). ويتبع التوثيق على الإنترنت أحدث إصدار من المشروع، لذا تحقق من أي إعداد مقابل إصدارك قبل الاعتماد عليه. وتلتزم الإعدادات أدناه بالأساسيات الراسخة.

تشغّل الحزم كل خدمة بالمستخدم prometheus، وتقرأ خيارات سطر الأوامر الإضافية من المتغير ARGS في الملفات /etc/default/prometheus و/etc/default/prometheus-node-exporter و/etc/default/prometheus-alertmanager. أما ملفات الإعداد الرئيسية فهي /etc/prometheus/prometheus.yml و/etc/prometheus/alertmanager.yml.

أبقِ واجهات الويب خاصة

يفترض نموذج الأمان في Prometheus أن كل من يصل إلى واجهة HTTP يستطيع قراءة كل السلاسل الزمنية المخزنة. ويحذّر بالنسبة إلى Alertmanager من أن كل من يصل إلى واجهته يستطيع إنشاء التنبيهات وإنهاءها، وإنشاء فترات الإسكات أو حذفها. لذا يجب ألا يكون أي من هذه المنافذ مفتوحاً على الإنترنت. وعلى خادم واحد اربطها بعنوان loopback:

# /etc/default/prometheus-node-exporter
ARGS="--web.listen-address=127.0.0.1:9100"

# /etc/default/prometheus
ARGS="--web.listen-address=127.0.0.1:9090"

# /etc/default/prometheus-alertmanager
ARGS="--web.listen-address=127.0.0.1:9093"

sudo systemctl restart prometheus-node-exporter prometheus prometheus-alertmanager
sudo ss -tlnp | grep -E ':(9090|9093|9100)'

ادخل إلى الواجهة عبر نفق SSH بالأمر ssh -L 9090:127.0.0.1:9090 user@server ثم افتح http://localhost:9090. وإذا كان Prometheus يجمع المقاييس من خوادم أخرى فاجعل node_exporter يستمع على عنوان خاص، واسمح بالمنفذ 9100 من خادم Prometheus فقط. ويدعم Prometheus وأدوات التصدير TLS والمصادقة الأساسية عبر ملف إعداد للويب (--web.config.file)، وينبّه التوثيق إلى أن المصادقة الأساسية دون TLS ترسل بيانات الدخول نصاً صريحاً.

إعداد جمع المقاييس والتنبيهات

# /etc/prometheus/prometheus.yml
global:
  scrape_interval: 15s
  evaluation_interval: 15s

alerting:
  alertmanagers:
    - static_configs:
        - targets: ['127.0.0.1:9093']

rule_files:
  - /etc/prometheus/node-alerts.yml

scrape_configs:
  - job_name: prometheus
    static_configs:
      - targets: ['127.0.0.1:9090']
  - job_name: node
    static_configs:
      - targets: ['127.0.0.1:9100']

ثلاثة تنبيهات يستحق كل خادم أن يملكها

تتبع صيغة القواعد توثيق قواعد التنبيه، ويشترط الحقل for استمرار الحالة مدة معينة قبل إطلاق التنبيه، مما يجنّب الإزعاج الناتج عن القفزات القصيرة.

# /etc/prometheus/node-alerts.yml
groups:
  - name: node
    rules:
      - alert: InstanceDown
        expr: up == 0
        for: 5m
        labels:
          severity: critical
        annotations:
          summary: "{{ $labels.instance }} has been unreachable for 5 minutes"

      - alert: DiskAlmostFull
        expr: node_filesystem_avail_bytes{fstype!~"tmpfs|overlay|squashfs"} / node_filesystem_size_bytes < 0.10
        for: 15m
        labels:
          severity: warning
        annotations:
          summary: "Less than 10% free on {{ $labels.mountpoint }} ({{ $labels.instance }})"

      - alert: DiskWillFillIn24h
        expr: predict_linear(node_filesystem_avail_bytes{fstype!~"tmpfs|overlay|squashfs"}[6h], 24 * 3600) < 0
        for: 30m
        labels:
          severity: warning

      - alert: MemoryLow
        expr: node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes < 0.10
        for: 10m
        labels:
          severity: warning

تستقرئ الدالة predict_linear اتجاه المساحة الحرة خلال الساعات الست الأخيرة، فتلتقط سجلاً متضخماً قبل أن يمتلئ القرص فعلاً. افحص الملفات ثم أعد التحميل:

promtool check rules /etc/prometheus/node-alerts.yml
promtool check config /etc/prometheus/prometheus.yml
sudo systemctl reload prometheus

إرسال التنبيهات بالبريد الإلكتروني

# /etc/prometheus/alertmanager.yml
global:
  smtp_smarthost: 'mail.example.com:587'
  smtp_from: 'alerts@example.com'
  smtp_auth_username: 'alerts@example.com'
  smtp_auth_password: 'REPLACE-ME'

route:
  receiver: ops-email
  group_by: ['alertname', 'instance']
  group_wait: 30s
  group_interval: 5m
  repeat_interval: 4h

receivers:
  - name: ops-email
    email_configs:
      - to: 'ops@example.com'
        send_resolved: true

أسماء الحقول مأخوذة من مرجع إعدادات Alertmanager. ويحتوي الملف على كلمة مرور، لذا اجعله قابلاً للقراءة من الجذر ومجموعة prometheus فقط. أعد التشغيل بالأمر sudo systemctl restart prometheus-alertmanager وافحص الأخطاء عبر journalctl -u prometheus-alertmanager.

أخطاء شائعة

  • مراقبة الخادم من نفسه فقط: إذا توقف الخادم توقف التنبيه معه. شغّل Prometheus على جهاز منفصل، أو أضف فحص توفر خارجياً لا يعتمد على الخادم.
  • ترك المنافذ 9090 و9093 و9100 مفتوحة على الإنترنت، فتنكشف تفاصيل النظام وأدوات التحكم بالتنبيهات.
  • تنبيهات تنطلق باستمرار. اضبط العتبات ومدد for حتى يعني كل تنبيه «تصرّف الآن».
  • عدم اختبار وصول الإشعارات أبداً. أوقف node_exporter خمس دقائق في وقت هادئ وتأكد من وصول البريد.

ما الذي ينبغي فعله

  • ثبّت الحزم الثلاث، واربط كل واجهة ويب بعنوان loopback أو بعنوان خاص، وتأكد من ذلك بالأمر ss -tlnp.
  • أضف قواعد التوقف والقرص والذاكرة، وتحقق منها بالأداة promtool، واختبر وصول الإشعارات من البداية إلى النهاية.
  • راقب استهلاك Prometheus نفسه للقرص، واختر مدة احتفاظ مناسبة.
  • حدّث الحزم مع بقية النظام، وخطط لنقطة مراقبة ثانية حتى يطلق الخادم المتوقف تنبيهاً رغم توقفه.

المصادر

SKYLINE Engineering

@skyline

The engineering team at SKYLINE Industrial Solutions. We publish field-tested guides drawn from real KSA and GCC deployments.

صفحة الكاتب
SKYLINE engineering services

Need this implemented for you?

Reading is free — building it right takes a team. SKYLINE engineers ship Linux Basics for Aramco vendors, banks, hospitals and government agencies across Saudi Arabia. Talk to us before you start.

Aramco Approved Contractor ISO 9001 · ISO 27001 SAMA CSF aligned NCA ECC ready 247+ KSA clients

Comments

0 total · 0 threads
Be the first to leave a comment.