الرسم البياني للاستخدام يخبرك بما حدث، أما التنبيه فيخبرك بينما ما يزال هناك وقت للتصرف. وتُعدّ أدوات 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 نفسه للقرص، واختر مدة احتفاظ مناسبة.
- حدّث الحزم مع بقية النظام، وخطط لنقطة مراقبة ثانية حتى يطلق الخادم المتوقف تنبيهاً رغم توقفه.
المصادر
- prometheus.io/docs/guides/node-exporter
- prometheus.io/docs/prometheus/latest/configuration/alerting_rules
- prometheus.io/docs/prometheus/latest/configuration/recording_rules
- prometheus.io/docs/prometheus/latest/configuration/configuration
- prometheus.io/docs/prometheus/latest/querying/functions
- prometheus.io/docs/alerting/latest/configuration
- prometheus.io/docs/operating/security
- manpages.debian.org/trixie/prometheus/prometheus.1.en.html
- manpages.debian.org/trixie/prometheus-node-exporter/prometheus-node-exporter.1.en.html
- manpages.debian.org/trixie/prometheus-alertmanager/prometheus-alertmanager.1.en.html
- packages.debian.org/trixie/amd64/prometheus-node-exporter/filelist
- packages.debian.org/trixie/amd64/prometheus-alertmanager/filelist
- packages.ubuntu.com/noble/amd64/prometheus/filelist
- git.launchpad.net/ubuntu/+source/prometheus-node-exporter/plain/debian/service?h=ubuntu...
- git.launchpad.net/ubuntu/+source/prometheus/plain/debian/default?h=ubuntu/noble
- github.com/prometheus/node_exporter/blob/master/docs/node-mixin/alerts/alerts.libsonnet
- tracker.debian.org/pkg/prometheus
- tracker.debian.org/pkg/prometheus-node-exporter
- tracker.debian.org/pkg/prometheus-alertmanager
Comments
0 total · 0 threads