لماذا المراقبة الاستباقية، ولماذا لا تكفي الأدوات الكلاسيكية
التنبيه التفاعلي — الذي يصل بعد أن يكون العميل قد اتصل بالفعل — لا يحمي العلاقة، بل يُصلحها. الفرق بين الحالتين ليس حظاً، بل هو مسألة تغطية.
أداة مراقبة التوافر مثل Uptime Kuma تتحقق من استجابة خدمة على منفذ أو رابط URL. لكنها لا تعلم إذا كانت PostgreSQL تعمل خارج هذا المنفذ، أو إذا كانت ذاكرة الحاوية على وشك الامتلاء، أو إذا كان قرص السجلات يمتلئ بمعدل 200 ميغابايت في الساعة. في المقابل، أداة مقاييس النظام مثل Beszel تُراقب استهلاك كل مضيف باستمرار، لكنها لا تختبر الخدمات التطبيقية من طرف لطرف.
الحادثة الموثّقة على Lemmy في 11 أكتوبر 2026 (112 تصويتاً) تُجسّد هذا تماماً: توقفت PostgreSQL على خادم VPS دون أن تُطلق أي تنبيه قرص. لم يُتجاوز أي حد مساحة. كان التحقق على المستوى التطبيقي هو الوحيد القادر على الكشف عن التوقف — وهو ما لم يكن المشغّل يملكه.
تُعالج مجموعة Beszel وUptime Kuma v2 كلا الجانبين. يُراقب Beszel مقاييس كل مضيف (المعالج، والذاكرة، والقرص، والشبكة، والحاويات) من مركز تجميع واحد. يتحقق Uptime Kuma v2 من توافر الخدمات المكشوفة مع قنوات تنبيه قابلة للتهيئة. كلاهما مفتوح المصدر، مستضاف ذاتياً، ويُنصب على VPS مخصص لمراقبة أسطولك.
ما تُقدّمه هذه المجموعة للوكالة عملياً
- عرض موحّد لجميع خوادم عملائك في واجهة Beszel واحدة، دون تكثير وصلات SSH.
- تنبيهات المقاييس (المعالج، الذاكرة، القرص، الشبكة) بعتبات قابلة للتهيئة لكل مضيف.
- فحوصات توافر HTTP(s) وTCP وDNS وشهادات SSL عبر Uptime Kuma v2 — كل 60 ثانية افتراضياً.
- إشعارات Telegram أو SMTP جاهزة في الساعة الأولى، دون اشتراك في خدمات خارجية.
- الكشف عن اكتمال القرص أو تسريب الذاكرة قبل أن يحجب خدمة تطبيقية.
- صفحات حالة Uptime Kuma العامة القابلة للمشاركة مع العملاء النهائيين.
- إجمالي استهلاك المجموعة أقل من 150 ميغابايت من ذاكرة الوصول العشوائي على خادم VPS المراقبة.
- نشر قابل للتكرار عبر Docker Compose، قابل للإصدار وإعادة النشر في دقائق.
متطلبات الموارد المُحدَّدة
لاستضافة مركز Beszel وUptime Kuma v2 على خادم VPS مخصص للمراقبة:
الموارد الدنيا. خادم VPS بنواة معالج واحدة و1 غيغابايت من الذاكرة كافٍ لمراقبة نحو عشرة مضيفين مع Beszel ونحو خمسين مراقِباً مع Uptime Kuma. عملياً، يستهلك مركز Beszel نحو 50 ميغابايت من الذاكرة وUptime Kuma v2 نحو 100 ميغابايت — أقل من 200 ميغابايت إجمالاً في وضع الخمول، وفق قياسات المجتمع. لأسطول من 20 إلى 50 خادم VPS، خصّص 2 غيغابايت من الذاكرة. يخزّن Beszel بياناته في SQLite؛ خصّص 5 إلى 10 غيغابايتات من القرص للاحتفاظ بتاريخ يمتد لأشهر عديدة.
البرامج المطلوبة. Docker وDocker Compose مثبّتان على خادم VPS المراقبة. نطاق أو نطاق فرعي يشير إلى هذا الخادم (monitoring.your-domain.com) للوكيل العكسي وSSL. المنافذ 80 و443 مفتوحة للوكيل العكسي، والمنفذ 8090 أو أي منفذ تختاره لمركز Beszel.
على خوادم VPS المُراقَبة. كل مضيف يُراقَب يستقبل فقط وكيل Beszel — ثنائي خفيف أو حاوية Docker تستهلك نحو 10 ميغابايتات من الذاكرة. لا حاجة لأي تغيير في جدار الحماية العام: الوكيل هو من يُنشئ الاتصال نحو المركز، وليس العكس.
النشر الكامل: مركز Beszel والوكلاء وUptime Kuma v2 والتنبيهات
إنشاء هيكل Docker Compose على خادم VPS المراقبة
اتصل بخادم VPS المخصص للمراقبة. أنشئ دليل عمل وملف Compose:
mkdir -p /opt/monitoring && cd /opt/monitoringأنشئ ملف
docker-compose.ymlبالخدمتين:services: beszel: image: henrygd/beszel:latest restart: unless-stopped volumes: - ./beszel_data:/beszel_data ports: - "8090:8090" environment: - DATA_DIR=/beszel_data uptime-kuma: image: louislam/uptime-kuma:2 restart: unless-stopped volumes: - ./uptime-kuma-data:/app/data ports: - "3001:3001" healthcheck: test: ["CMD", "node", "extra/healthcheck"] interval: 30s timeout: 10s retries: 3لاحظ كتلة
healthcheckعلى Uptime Kuma: إنها ضرورية لتجنب فخ حلقة التعطل (انظر قسم المخاطر).تشغيل المجموعة وإنشاء حسابات المدير
شغّل الحاويتين:
docker compose up -dتحقق من أن الحاويتين في حالة
healthyأوrunning:docker compose psادخل إلى Beszel على
http://<ip-vps>:8090وأنشئ حساب المدير عند أول وصول. افعل الشيء ذاته مع Uptime Kuma علىhttp://<ip-vps>:3001. يجب بعد ذلك وضع كلتا الواجهتين خلف وكيل عكسي مع SSL لتجنب كشفهما عبر HTTP العادي.نشر وكيل Beszel على كل خادم VPS للمراقبة
على كل خادم VPS عميل يُراد مراقبته، انسخ المفتاح العام المُنشأ في واجهة Beszel (الإعدادات ← مفتاح SSH)، ثم نفّذ:
curl -sL https://raw.githubusercontent.com/henrygd/beszel/main/supplemental/scripts/install-agent.sh | bash -s -- -p 45876 -k "<your-public-key>"بدلاً من ذلك، استخدم Docker على المضيف المُراقَب:
services: beszel-agent: image: henrygd/beszel-agent:latest restart: unless-stopped network_mode: host volumes: - /var/run/docker.sock:/var/run/docker.sock:ro environment: - KEY=<your-public-key> - PORT=45876في Beszel، أضف كل مضيف من الواجهة (الأنظمة ← إضافة نظام) بتحديد عنوان IP ومنفذ الوكيل. يُنشئ المركز الاتصال نحو الوكيل: لا يحتاج المضيف المُراقَب إلى كشف هذا المنفذ للعموم.
تهيئة تنبيهات المقاييس في Beszel
في Beszel، افتح تفاصيل أي نظام وانتقل إلى تبويب التنبيهات. هيّئ عتبات للمقاييس الحرجة:
- القرص: تنبيه عند 80% وتنبيه حرج عند 90% — يغطي سيناريو PostgreSQL من مقدمة المقال.
- الذاكرة: تنبيه إذا تجاوز الاستخدام 85% لمدة 5 دقائق متواصلة.
- المعالج: تنبيه إذا تجاوزت النسبة 90% لأكثر من 3 دقائق.يدعم Beszel كلاً من Telegram وDiscord وSlack وGotify وNtfy والـ Webhooks العامة. للتنبيهات عبر Telegram، تحتاج إلى رمز Bot (من
@BotFather) ومعرّف محادثتك أو مجموعتك.تهيئة مراقبي Uptime Kuma v2 وتنبيهات SMTP أو Telegram
في Uptime Kuma، ابدأ بتهيئة قناة إشعار (الإعدادات ← الإشعارات). خياران شائعان:
Telegram. أدخل رمز Bot ومعرّف المحادثة. Bot ذاتُه المستخدم مع Beszel يعمل — استخدم Bot واحداً للأداتين وميّزهما بقنوات مختلفة.
SMTP. أدخل خادم SMTP والمنفذ (587 مع STARTTLS) وبيانات الاعتماد وعنوان الوجهة. استخدم حساباً مخصصاً لإرسال التنبيهات.
أنشئ بعد ذلك مراقبين لكل خدمة حرجة: رابط URL بـ HTTP(s) للمواقع، وTCP لقواعد البيانات والمنافذ التطبيقية. لحالة PostgreSQL، أضف مراقباً TCP على المنفذ
5432لكل خادم VPS يستضيف نسخة — إذا توقفت PostgreSQL، سيتوقف المنفذ عن الاستجابة وسيُطلق التنبيه في ثوانٍ.وضع كل شيء خلف وكيل عكسي مع SSL
أضف خدمة nginx أو Caddy إلى Compose لعرض Beszel وUptime Kuma عبر HTTPS:
caddy: image: caddy:alpine restart: unless-stopped ports: - "80:80" - "443:443" volumes: - ./Caddyfile:/etc/caddy/Caddyfile - caddy_data:/dataمع
Caddyfileبسيط:monitoring.your-domain.com { reverse_proxy beszel:8090 } status.your-domain.com { reverse_proxy uptime-kuma:3001 }يُصدر Caddy شهادات Let's Encrypt تلقائياً ويجدّدها. احذف أقسام
portsمن beszel وuptime-kuma في Compose بمجرد وضعهما خلف وكيل — يجب ألا يكونا قابلَين للوصول مباشرةً.التحقق من الإعداد وتهيئة الاحتفاظ بالبيانات
اختبر كل شيء بإيقاف خدمة يدوياً على خادم VPS تجريبي (
docker compose stop <service>) والتحقق من وصول تنبيه Telegram أو SMTP خلال أقل من دقيقتين.بالنسبة لـ Beszel، هيّئ الاحتفاظ بالبيانات في الإعدادات ← الاحتفاظ: القيمة الافتراضية هي 7 أيام للبيانات عالية الدقة و30 يوماً للتجميعات الساعية. اضبطها وفق سعة قرصك.
بالنسبة لـ Uptime Kuma، يُهيَّأ الاحتفاظ في الإعدادات ← متقدم ← التنظيف التلقائي. احتفظ بـ 90 يوماً على الأقل لامتلاك اتجاهات uptime شهرية لتقديمها للعملاء.
مخاطر يجب معرفتها قبل الإطلاق في الإنتاج
حلقة تعطل Docker المُبلَّغ عنها على أنها تعمل — مشكلة Uptime Kuma رقم #7956. بدون healthcheck في Compose، قد يُبلّغ Docker عن حاوية Uptime Kuma بوصفها running بينما هي في حلقة إعادة تشغيل. سيُظهر مراقب Uptime Kuma الذي يراقب نفسه (TCP على المنفذ 3001) إيجابية زائفة: المنفذ يستجيب خلال الفترة القصيرة بين عمليتي إعادة تشغيل. الحل هو بالضبط كتلة healthcheck المُوضَّحة في الخطوة الأولى — إنها تستخدم السكريبت المضمّن في الصورة لاختبار الحالة الداخلية للتطبيق، لا مجرد وجود العملية. يضع Docker حينئذٍ الحاوية في حالة unhealthy إذا فشل الفحص ثلاث مرات متتالية، ويرى مراقب Uptime Kuma ذلك.
وكيل Beszel مع network_mode: host. إذا كانت المضيفات المُراقَبة تشغّل حاويات، يحتاج وكيل Beszel إلى الوصول إلى مقبس Docker (/var/run/docker.sock) لرفع مقاييس كل حاوية. في وضع الشبكة الجسرية، يكون المقبس قابلاً للوصول لكن عنوان IP المُرفوع من الوكيل قد يكون عنوان شبكة Docker الداخلية. يُفضَّل استخدام network_mode: host على الوكيل لضمان رؤية مركز Beszel لعنوان IP العلني للخادم.
تنبيهات Beszel لا تحل محل الفحوصات التطبيقية. يُراقب Beszel موارد النظام وتوافر حاويات Docker. لا يختبر أن تطبيقاً يستجيب بشكل صحيح لطلب HTTP أو أن PostgreSQL تقبل اتصالات. هذان المستويان متكاملان: يكشف Beszel التشبع الذي يسبق العطل، بينما يؤكد Uptime Kuma العطل حين يحدث.
تغطية التنبيهات حسب تهيئة المجموعة
مرّر الجدول أفقيًا
| سيناريو العطل | Beszel وحده | Uptime Kuma وحده | Beszel + Uptime Kuma v2 |
|---|---|---|---|
| امتلاء القرص بنسبة 95% | تنبيه عند العتبة المهيّأة | لا يُكشف | تنبيه Beszel قبل العطل |
| توقف PostgreSQL (منفذ TCP معطّل) | لا يُكشف (خدمة خارج Docker) | تنبيه TCP في أقل من دقيقتين | تنبيه Uptime Kuma TCP |
| حاوية في حلقة تعطل | تنبيه إذا أثّر على المعالج/الذاكرة | إيجابية زائفة بدون healthcheck | يُكشف إذا كان healthcheck موضوعاً |
| تسريب ذاكرة تدريجي | تنبيه على عتبة الذاكرة | لا يُكشف | تنبيه Beszel استباقي |
| شهادة SSL تنتهي في 7 أيام | غير مُراقَبة | تنبيه انتهاء SSL | تنبيه Uptime Kuma SSL |
| خادم VPS غير قابل للوصول (شبكة أو مضيف معطّل) | المركز يفقد الوكيل | تنبيه TCP/HTTP | إشارة مزدوجة، متقاربة |
التصليب: عزل خادم VPS المراقبة
خادم VPS المراقبة أصل حرج: إذا توقف، تفقد الرؤية على كل شيء آخر. ثلاث قواعد لتصليبه.
أولاً، لا تستضف تطبيقات العملاء على هذا الخادم. يجب أن يكون حمله متوقعاً ودوره الوحيد هو المراقبة.
ثانياً، أغلق جميع المنافذ غير الضرورية بجدار حماية خادم VPS. فقط 80 و443 ومنفذ SSH (منقول إلى منفذ غير قياسي) يجب أن تكون قابلة للوصول من الإنترنت. منفذ وكيل Beszel (45876 افتراضياً) يجب فتحه فقط من عناوين IP خوادم VPS الأخرى، وليس من الإنترنت بأكمله.
ثالثاً، أضف مراقباً Uptime Kuma خارجياً — مثلاً من خدمة فحص HTTP مجانية — يتحقق من استجابة نسختك من Uptime Kuma. بدون هذه الطبقة الخارجية، يمر عطل خادم VPS المراقبة نفسه دون أن يُلاحَظ.
استكشاف أخطاء المشكلات الشائعة
يظهر وكيل Beszel غير متصل فوراً بعد الإضافة. تحقق من أن منفذ الوكيل (45876 افتراضياً) قابل للوصول من المركز. على المضيف المُراقَب، اختبر بـ nc -zv <hub-ip> 8090 — إذا فشل الاتصال، المشكلة في جدار حماية المركز. الوكيل نفسه لا يحتاج إلى فتح أي منفذ وارد.
Uptime Kuma لا يستقبل تنبيهات Telegram. السبب الأكثر شيوعاً هو انحراف ساعة الحاوية. تحقق بـ docker exec uptime-kuma date أن الوقت يتطابق مع UTC الحقيقي. إذا لم يكن كذلك، أضف /etc/localtime:/etc/localtime:ro في أحجام خدمة Uptime Kuma.
مركز Beszel لا يبدأ أو يفقد بياناته بعد إعادة التشغيل. تحقق من أن الحجم ./beszel_data يملكه UID المستخدم من قِبل حاوية Beszel. خطأ في صلاحيات مجلد البيانات يمنع SQLite من الكتابة: chown -R 1000:1000 ./beszel_data يُصلح المشكلة في معظم الحالات.
Uptime Kuma في حالة unhealthy عند البدء. قد تستغرق صورة v2 من 30 إلى 60 ثانية لتبدأ بالكامل قبل أن يَنجح الـ healthcheck. هذا طبيعي. إذا بقيت الحاوية unhealthy بعد دقيقتين، راجع السجلات: docker compose logs uptime-kuma.
للمزيد
تُغطي هذه المجموعة المستويين الأساسيين: مقاييس النظام والتحقق من التوافر. للمستوى الثالث — قابلية التتبع وتحليل اتجاهات الحمل الدقيقة — تُعدّ مجموعة Grafana وPrometheus الخطوة التالية الطبيعية. إنها أكثر استهلاكاً للموارد (خصّص 2 غيغابايت من الذاكرة)، لكنها تفتح PromQL ولوحات التحكم المخصصة. يغطي مقال مراقبة VPS مع Grafana وPrometheus هذا النشر خطوة بخطوة.
للنسخ الاحتياطية لخادم VPS المراقبة نفسه — لتجنب إعادة بناء كل الإعداد عند الفقدان — استراتيجية 3-2-1 مع Restic وتخزين S3 تنطبق مباشرةً على أحجام Docker لهذه المجموعة.
إذا كنت تُدير عدة خوادم عملاء من منصة واحدة، تُفصّل صفحة /solutions/agences كيف تُمركز ServOrbit مراقبة أسطولك على VPS Start.