دليل النشر

Grafana Alloy على VPS: التثبيت والانتقال من Promtail

انشر على VPS Cloud ←

دليل عملي

Grafana Alloy على VPS: التثبيت والانتقال من Promtail

الأمان والمراقبة12 دقيقةً للقراءةعدد الخطوات: 15

لم يعد Promtail يتلقى أي تحديث: أعلنت Grafana انتهاء دعمه منذ 2 مارس 2026. إذا كان خادمكم VPS لا يزال يرسل سجلاته إلى Loki عبر هذا الوكيل، فستبقى كل ثغرة تُكتشف غدًا مفتوحة. يحلّ Grafana Alloy محلّه ويجمع أيضًا مقاييس النظام، فيُغنيكم عن exporter إضافي على الخادم. يثبّت هذا الدليل Alloy كخدمة systemd، ويربطه بـ Loki وPrometheus، وينقل إعدادات Promtail القائمة، ويعالج أخطاء الصلاحيات التي لا يُبلغ عنها Alloy دائمًا.

المحتويات· لماذا تستبدلون Promtail بـ Alloy الآن1/13
  1. 01لماذا تستبدلون Promtail بـ Alloy الآن
  2. 02ما الذي يغيّره وكيل واحد على خادمكم
  3. 03متطلبات Alloy على VPS بالأرقام
  4. 04تثبيت Alloy وربط السجلات والمقاييس
  5. 05Alloy وDocker: قراءة الحاويات دون فتح كل شيء
  6. 06الانتقال من Promtail: الخطر الحقيقي في المواضع
  7. 07نقل إعدادات Promtail دون فقدان ولا تكرار
  8. 08Promtail وAlloy جنبًا إلى جنب
  9. 09الإعداد بعد التثبيت: الواجهة والأسرار والتخزين
  10. 10تحصين الخدمة دون تعطيل الجمع
  11. 11استكشاف الأعطال: الأخطاء التي لا يصرخ بها Alloy
  12. 12رسائل الخطأ وحلولها
  13. 13وكيل محدَّث على خادم تملكونه

لماذا تستبدلون Promtail بـ Alloy الآن

صفحة Promtail الرسمية واضحة: انتهى دعم الوكيل منذ 2 مارس 2026، وتوقّف الدعم التجاري، ويستمر كل التطوير في Grafana Alloy. ووكيل الجمع عملية ذات صلاحيات مرتفعة تعمل باستمرار: تركه دون تصحيحات أمر لا يمكن الاستمرار فيه.

ليس Alloy مجرد Promtail باسم جديد. إنه جامع واحد يُضبط عبر مكوّنات: مصدر للسجلات، وexporter لمقاييس النظام، ووجهة إرسال نحو Loki وأخرى نحو Prometheus. على خادم VPS كان يشغّل Promtail وnode_exporter جنبًا إلى جنب، تكفي الآن خدمة واحدة. ويستطيع أيضًا تمرير OTLP إذا كنتم تُجهّزون تطبيقاتكم بالقياس، وهو موضوع نتناوله في دليلنا عن Tempo وOpenTelemetry.

لا يعيد هذا الدليل تثبيت Loki ولا Prometheus: الجانب الخادمي موصوف في دليل Loki وGrafana وفي دليل Grafana وPrometheus. هنا نهتم بالوكيل وحده.

ما الذي يغيّره وكيل واحد على خادمكم

  • خدمة واحدة للمراقبة — تمر السجلات والمقاييس عبر العملية نفسها alloy، مع سجل واحد تقرؤونه عند حدوث عطل.
  • تحديثات لا تزال تصل — يُنشر Alloy في مستودعات apt وrpm الخاصة بـ Grafana: يكفي apt upgrade لإبقائه محدّثًا مثل باقي النظام.
  • انتقال مزوّد بالأدوات — يترجم الأمر alloy convert إعدادات Promtail القائمة وينتج تقريرًا بما لم يتمكن من تحويله.
  • مقاييس النظام مدمجة — يحلّ المكوّن prometheus.exporter.unix محلّ node_exporter دون ملف تنفيذي إضافي ولا منفذ يجب فتحه.
  • واجهة تصحيح محلية — تعرض الواجهة على المنفذ 12345 مخطط المكوّنات وقيمها، ويمكن الوصول إليها عبر نفق SSH.
  • إرسال نحو منظومتكم أو نحو Grafana Cloud — الملف نفسه يرسل إلى Loki مستضاف ذاتيًا أو إلى خدمة مُدارة بتغيير عنوان URL واحد.

متطلبات Alloy على VPS بالأرقام

يُثبَّت Alloy على Debian وUbuntu وAlmaLinux وRocky Linux من مستودعات Grafana الرسمية. تُنشئ الحزمة مستخدم نظام باسم alloy، وخدمة systemd بالاسم نفسه، وملف الإعدادات /etc/alloy/config.alloy.

من حيث الموارد، تعطي وثائق Alloy رتبتين تقريبيتين: نحو نواة واحدة و120 MiB من الذاكرة لكل MiB/s من السجلات المستقبَلة، ونحو 11 GiB من الذاكرة لكل مليون سلسلة Prometheus نشطة. يعرض خادم VPS منفرد بضعة آلاف من السلاسل، ونادرًا ما يكتب أكثر من بضع مئات KiB من السجلات في الثانية. توصيتنا التحريرية: خصّصوا للوكيل نصف vCPU و256 إلى 512 ميغابايت من الذاكرة، وبضعة غيغابايتات من القرص تحت /var/lib/alloy لمواضع القراءة ومخزن الإرسال المؤقت.

وتحتاجون أخيرًا إلى وجهة: Loki يمكن بلوغه على /loki/api/v1/push، وPrometheus مُشغَّل بالخيار --web.enable-remote-write-receiver الذي يفتح نقطة النهاية /api/v1/write. لا حاجة لفتح أي منفذ وارد على خادم الوكيل: Alloy يدفع البيانات ولا يُستعلَم.

تثبيت Alloy وربط السجلات والمقاييس

  1. إضافة مستودع Grafana على Debian أو Ubuntu

    sudo mkdir -p /etc/apt/keyrings
    sudo wget -O /etc/apt/keyrings/grafana.asc https://apt.grafana.com/gpg-full.key
    sudo chmod 644 /etc/apt/keyrings/grafana.asc
    echo "deb [signed-by=/etc/apt/keyrings/grafana.asc] https://apt.grafana.com stable main" | sudo tee /etc/apt/sources.list.d/grafana.list
    sudo apt-get update && sudo apt-get install alloy

  2. أو تثبيته على AlmaLinux وRocky Linux

    استوردوا المفتاح بالأمر wget -q -O gpg.key https://rpm.grafana.com/gpg.key ثم sudo rpm --import gpg.key. أنشئوا /etc/yum.repos.d/grafana.repo مع baseurl=https://rpm.grafana.com وrepo_gpgcheck=1 وgpgcheck=1 وenabled=1 كما تبيّن صفحة تثبيت Alloy على Linux، ثم نفّذوا sudo dnf install alloy.

  3. تشغيل الخدمة والتحقق من مستخدمها

    sudo systemctl enable --now alloy
    sudo systemctl status alloy
    systemctl cat alloy | grep User

    يجب أن يعرض الأمر الأخير User=alloy. لا تحدّد الحزمة أي Group=: لذا تأتي صلاحيات القراءة من المجموعات الثانوية لهذا المستخدم، وهي نقطة أساسية لما يلي.

  4. تحديد وجهة السجلات

    افتحوا /etc/alloy/config.alloy وأضيفوا وجهة الإرسال نحو Loki:

    loki.write "default" {
    endpoint {
    url = "http://127.0.0.1:3100/loki/api/v1/push"
    }
    }

    استبدلوا العنوان بعنوان Loki لديكم. وإن كان بعيدًا، فاستعملوا HTTPS وكتلة basic_auth.

  5. جمع journald وملفات السجلات

    loki.source.journal "system" {
    forward_to = [loki.write.default.receiver]
    labels = {"job" = "systemd-journal"}
    }
    local.file_match "nginx" {
    path_targets = [{"__path__" = "/var/log/nginx/*.log", "job" = "nginx"}]
    }
    loki.source.file "nginx" {
    targets = local.file_match.nginx.targets
    forward_to = [loki.write.default.receiver]
    }

    افتراضيًا، يقرأ مصدر journal المسارين /var/log/journal و/run/log/journal، ولا يعود إلا سبع ساعات إلى الوراء عند أول تشغيل.

  6. جمع مقاييس النظام

    prometheus.exporter.unix "node" { }
    prometheus.scrape "node" {
    targets = prometheus.exporter.unix.node.targets
    forward_to = [prometheus.remote_write.default.receiver]
    }
    prometheus.remote_write "default" {
    endpoint {
    url = "http://127.0.0.1:9090/api/v1/write"
    }
    }

    إن كان node_exporter يعمل مسبقًا على الجهاز، فأوقفوه بعد الانتقال كي لا تُجمع السلاسل نفسها مرتين.

  7. التحقق قبل إعادة التحميل

    sudo alloy validate /etc/alloy/config.alloy
    sudo systemctl reload alloy
    sudo journalctl -u alloy -f

    يكشف validate خطأ الصياغة أو المكوّن المُشار إليه خطأً قبل أن تحمّل الخدمة الإعدادات.

  8. منح صلاحيات القراءة

    يجب أن يعرض id alloy المجموعتين adm وsystemd-journal. تضيفهما الحزمة عند وجودهما؛ وبعد تثبيت من ملف تنفيذي أو حذف مجموعة، أعيدوهما بالأمر sudo usermod -aG adm,systemd-journal alloy ثم sudo systemctl restart alloy. ولمجلد تطبيق يملكه مستخدم آخر، تفضّل الوثائق قائمة ACL على إضافة مجموعة: sudo setfacl -R -m u:alloy:rx /var/log/monapp وsudo setfacl -R -d -m u:alloy:rx /var/log/monapp.

  9. التحقق من البداية إلى النهاية ثم ربط لوحات المتابعة

    اكتبوا سطرًا شاهدًا بالأمر logger -t alloy-test "ligne de test alloy"، ثم ابحثوا عنه في Grafana، تبويب Explore، بالاستعلام {job="systemd-journal"} |= "ligne de test alloy". أما المقاييس، فيجب أن يعيد الاستعلام node_load1 سلسلة لخادمكم. إن استجاب الاثنان، فأعيدوا استخدام لوحات دليلنا عن Grafana وPrometheus التي تقرأ السلاسل نفسها node_*.

Alloy وDocker: قراءة الحاويات دون فتح كل شيء

لقراءة سجلات حاوياتكم، يجمع Alloy المثبّت على المضيف بين discovery.docker وloki.source.docker، وكلاهما موجّه إلى unix:///var/run/docker.sock. يجب عندها أن يتمكن المستخدم alloy من فتح هذا المقبس، وهو ما يتم عمليًا عبر sudo usermod -aG docker alloy. افعلوا ذلك عن دراية: تذكّر وثائق Docker بأن المجموعة docker تمنح صلاحيات تعادل صلاحيات root. يصبح وكيل السجلات عمليًا مديرًا للجهاز.

يمكنكم أيضًا تشغيل Alloy نفسه داخل حاوية، بالصورة grafana/alloy، مع ربط الملف على /etc/alloy/config.alloy والوسيط --storage.path=/var/lib/alloy/data على وحدة تخزين دائمة. ربط المقبس بخيار :ro لا يحدّ من استدعاءات واجهة Docker البرمجية: المقبس يبقى مقبسًا. ولمقاييس المضيف، يجب أن تتلقى الحاوية نظام ملفات الجهاز و/proc و/sys كنقاط ربط.

على خادم VPS واحد، تبقى حزمة systemd الأسهل في التدقيق.

الانتقال من Promtail: الخطر الحقيقي في المواضع

يحتفظ Promtail بملف مواضع يسجّل، لكل ملف متابَع، النقطة التي توقف عندها عن القراءة. أما Alloy فيحفظ مواضعه في مكان آخر، داخل المجلد الذي يحدده --storage.path. والتحويل يأخذ ذلك في الحسبان: تحمل كتلة loki.source.file الناتجة عن alloy convert وسيطًا legacy_positions_file يشير إلى الملف القديم، لاستئناف القراءة من النقطة الصحيحة.

لهذه الآلية نقطة ضعف موثّقة. في البلاغ grafana/alloy #5493، يصف مستخدم الخطأ error reading legacy positions file متبوعًا بـ permission denied: لم يتمكن Alloy من قراءة الملف القديم، فتجاهله وأعاد إرسال كل سجلات الخادم من البداية. رأى المشرف على المشروع أن إيقاف Alloy في هذه الحالة مشروع، وقد أُغلق البلاغ، لكن لا تراهنوا على نسختكم: تحققوا من الصلاحيات قبل أول تشغيل.

والخطر الآخر معاكس: Promtail وAlloy إن عملا معًا يرسلان كل سطر مرتين. الترتيب التالي يتجنب الخطرين.

نقل إعدادات Promtail دون فقدان ولا تكرار

  1. تحديد ملف الإعدادات وملف المواضع

    افتحوا إعدادات Promtail، وغالبًا ما تكون /etc/promtail/config.yml، وسجّلوا قيمة positions.filename. في تثبيت عبر Docker Compose، يقع هذا الملف داخل وحدة تخزين: سجّلوا مساره الحقيقي على المضيف.

  2. التحويل مع تقرير

    alloy convert --source-format=promtail --report=/tmp/promtail-report.txt --output=/tmp/promtail.alloy /etc/promtail/config.yml

    اقرؤوا التقرير قبل أي شيء. يفرض الخيار --bypass-errors تحويلًا جزئيًا، لكن الوثائق تحذّر من أن السلوك قد يختلف حينها عن الأصل.

  3. التحقق من أن المستخدم alloy يقرأ الملف القديم

    grep legacy_positions_file /tmp/promtail.alloy
    sudo -u alloy cat /var/lib/promtail/positions.yaml

    عدّلوا المسار وفق ما سجّلتموه سابقًا. إن فشل الأمر الثاني، فانسخوا الملف إلى مجلد يقرؤه alloy وصحّحوا المسار في الإعدادات المحوّلة.

  4. إيقاف Promtail قبل تشغيل Alloy

    sudo systemctl stop promtail، أو docker compose stop promtail لمنظومة حاويات. يكتب Promtail حينها آخر مواضعه، ولا يُرسل أي سطر مرتين أثناء الانتقال.

  5. تبديل الإعدادات

    انقلوا الكتل المحوّلة إلى /etc/alloy/config.alloy، ونفّذوا sudo alloy validate /etc/alloy/config.alloy ثم sudo systemctl restart alloy. تحققوا فورًا من sudo journalctl -u alloy | grep -i positions: يجب ألا يظهر أي سطر error reading legacy positions file.

  6. المراقبة أسبوعًا ثم الإزالة

    قارنوا حجم السجلات في Grafana قبل الانتقال وبعده، وتابعوا العدّاد loki_write_sent_entries_total في Alloy. احتفظوا بإعدادات Promtail بضعة أيام، ثم sudo systemctl disable promtail وأزيلوا الحزمة أو خدمة Compose.

Promtail وAlloy جنبًا إلى جنب

مرّر الجدول أفقيًا

المعيارPromtailGrafana Alloy
الحالةانتهى دعمه منذ 2 مارس 2026، ولا تحديثات بعد ذلكتطوير نشط، والخلف الذي اعتمدته Grafana
الإشارات المجمّعةالسجلات فقطالسجلات والمقاييس وتتبعات OTLP والملفات التحليلية
مقاييس النظامnode_exporter يُثبَّت على حدةالمكوّن `prometheus.exporter.unix` مدمج
الإعداداتYAMLصياغة Alloy بالمكوّنات، والتحويل عبر `alloy convert`
مواضع القراءةملف يُحدَّد في الإعداداتالمجلد `--storage.path`، والاستئناف عبر `legacy_positions_file`
التصحيحسجل الخدمةسجل الخدمة وواجهة محلية على المنفذ 12345
مستخدم الخدمةحسب طريقة التثبيت`alloy`، مع المجموعتين `adm` و`systemd-journal` اللتين تضيفهما الحزمة

الإعداد بعد التثبيت: الواجهة والأسرار والتخزين

تستمع واجهة التصحيح افتراضيًا على 127.0.0.1:12345. أبقوها كذلك وافتحوها عبر نفق: ssh -L 12345:127.0.0.1:12345 [email protected]، ثم http://localhost:12345 في المتصفح. وإن أردتم كشفها رغم ذلك، فأضيفوا --server.http.listen-addr=0.0.0.0:12345 إلى CUSTOM_ARGS، ولكن فقط خلف جدار حماية يرشّح هذا المنفذ.

توجد خيارات التشغيل في /etc/default/alloy على Debian وUbuntu، وفي /etc/sysconfig/alloy على AlmaLinux وRocky. وهناك أيضًا تضعون الأسرار: عرّفوا متغيرًا LOKI_PASSWORD، واقرؤوه في الإعدادات بـ sys.env("LOKI_PASSWORD")، وأبقوا كلمة المرور خارج config.alloy.

إن كان Loki بعيدًا، فلا ترسلوا أبدًا عبر HTTP غير مشفّر على الإنترنت: ضعوا Loki خلف وكيل عكسي TLS مع مصادقة، كما هو موصوف في دليلنا عن Loki. وأخيرًا، راقبوا المساحة في /var/lib/alloy: إذا تعذّر بلوغ Loki، فهناك تتراكم البيانات التي تنتظر الإرسال.

تحصين الخدمة دون تعطيل الجمع

تقترح وثائق Alloy ملف drop-in يُنشأ بالأمر sudo systemctl edit alloy كي يصمد أمام تحديثات الحزمة: NoNewPrivileges=yes وProtectSystem=strict وProtectHome=yes وPrivateTmp=yes وReadWritePaths=/var/lib/alloy. مع ProtectSystem=strict، أضيفوا ReadOnlyPaths=/var/log/journal وReadOnlyPaths=/run/log/journal، وإلا توقف مصدر journal عن القراءة. اختموا بـ sudo systemctl daemon-reload وsudo systemctl restart alloy. فضّلوا قائمة ACL لكل مجلد على إضافة مجموعات، ولا تمنحوا المجموعة docker إلا إذا كنتم تجمعون سجلات الحاويات فعلًا.

استكشاف الأعطال: الأخطاء التي لا يصرخ بها Alloy

معظم أعطال Alloy على خادم VPS ليست انهيارات. الخدمة نشطة، والواجهة خضراء، وGrafana يبقى فارغًا. والسبب يوثّقه المشرفون على المشروع أنفسهم في البلاغ grafana/alloy #2994، الذي أُغلق لصالح البلاغ #6340: صحة المكوّن تعني أنه يعمل، لا أنه يرسل.

يكفي إجراءان للخروج من هذا الضباب. اقرؤوا سجل الخدمة بالأمر sudo journalctl -u alloy --since "10 min ago"، واستعلموا عن المقاييس الداخلية للوكيل بالأمر curl -s http://127.0.0.1:12345/metrics | grep loki_write. يجب أن يرتفع العدّاد loki_write_sent_entries_total؛ أما loki_write_dropped_entries_total فيعدّ الأسطر المهمَلة بعد استنفاد كل محاولات الإرسال.

رسائل الخطأ وحلولها

  • مصدر journal يبدأ، لكن لا يصل أي سطر — تقول وثائق loki.source.journal ذلك صراحة: دون المجموعتين adm وsystemd-journal، يبدأ المكوّن دون خطأ ولا يجمع شيئًا. صحّحوا ذلك بالأمر sudo usermod -aG adm,systemd-journal alloy، ثم أعيدوا تشغيل الخدمة، لأن المجموعة المضافة لا تسري إلا عند التشغيل التالي.
  • failed to tail the file: open /var/log/…: permission denied — الملف موجود لكن alloy لا يستطيع قراءته. امنحوا قائمة ACL على المجلد بالأمر setfacl -R -m u:alloy:rx وبصيغته -d للملفات التي يُنشئها التدوير لاحقًا.
  • لا رسالة ولا سطر لمجلد كامل — يصف البلاغ grafana/alloy #6542 سجلات لم تُرسل قط دون أي خطأ. ويؤكد فيه أحد المشرفين أن الملف غير المقروء يُسجَّل، أما المجلد الذي يتعذّر الوصول إليه فلا. اختبروا ذلك بالأمر sudo -u alloy ls /var/log/monapp.
  • error reading legacy positions file … permission denied — لم يقرأ Alloy مواضع Promtail وقد يعيد إرسال كل شيء من البداية (البلاغ #5493). أوقفوا الخدمة، واجعلوا الملف مقروءًا لـ alloy، ثم أعيدوا التشغيل.
  • failed to identify the read-write layer ID … mount-id: permission denied — خطأ من المكوّن cAdvisor تحت systemd (البلاغ #4068). المجموعة docker لا تكفي؛ ويذكر مستخدمون أن ملف drop-in يتضمن AmbientCapabilities=CAP_DAC_READ_SEARCH وCapabilityBoundingSet=CAP_DAC_READ_SEARCH يحلّ المشكلة دون تشغيل الخدمة بصلاحيات root. إنه حلّ مجتمعي، اختبروه قبل تعميمه.
  • الواجهة خضراء لكن Grafana يبقى فارغًا — تحققوا من loki_write_sent_entries_total ومن سطر الاختبار الذي كتبه logger. إن توقف العدّاد، فالعطل في مرحلة سابقة، عند المصدر.

وكيل محدَّث على خادم تملكونه

يحتاج Alloy إلى ما لا تمنحه الاستضافة المشتركة: خدمة systemd، وقراءة /var/log وسجل journal، وأحيانًا مقبس Docker. على خادم VPS، تختارون توزيعتكم، وتحتفظون بمنظومة Loki وPrometheus، وتقرّرون الصلاحيات الممنوحة للوكيل. وإن فضّلتم عدم إدارة النظام بأنفسكم، فخيار إدارة VPS متاح للخادم.

تبقى الوثائق الرسمية المرجع لكل مكوّن: الانتقال من Promtail، والصلاحيات على Linux، وصفحة انتهاء دعم Promtail. ولتتبّع التطبيقات، تابعوا مع دليلنا عن Tempo وOpenTelemetry.

خادم VPS يمنح وكيل الجمع الصلاحيات التي يحتاجها

على خادم VPS من ServOrbit.com، لديكم وصول root، واختيار نظام التشغيل بين Ubuntu وDebian وAlmaLinux وRocky، والتحكم في systemd والمجموعات وقوائم ACL. تثبّتون Alloy أو Loki أو Prometheus كما تريدون، وخيار إدارة VPS متاح للخادم.

بحاجة إلى مساعدة؟

تصفّح مركز المساعدة والأسئلة الشائعة، أو تواصل مع فريقنا — معاودة اتصال أو WhatsApp أو بريد إلكتروني. الدعم بـالعربية والفرنسية والإنجليزية.

راسلنا على WhatsAppيُفتح في علامة تبويب جديدة