تشخيص النظام وتحليلات الاستخدام
يمنح Libre WebUI المسؤولين شاشتين مباشرتين للمثيل: صفحة النظام لتشخيص المضيف ووقت التشغيل، وصفحة الاستخدام لتحليلات استخدام النماذج والموفّرين. تقتصر كلتاهما على المسؤولين في الواجهة الخلفية والواجهة المرئية. تبقى قراءة الصفحتين داخل النشر؛ أما القياس الخارجي الاختياري فهو مسار مراقبة مستقل يضبطه المشغّل.
يمكن الوصول إليهما من عناصر المسؤول في الشريط الجانبي، أو اختصارات المسؤول في
قائمة علامات التبويب، أو مباشرة عبر /system و/usage. لا يستطيع غير المسؤولين
فتح أي منهما، وتُغلق علامات تبويب المسؤول إذا فقد حساب مسجل الدخول الدور admin.
تشخيص النظام
تعرض صفحة النظام (/system):
- المضيف: اسم المضيف والمنصة وإصدار النواة والمعمارية ومدة التشغيل وعدد وحدات CPU المنطقية وطراز CPU ومتوسط الحمل وما إذا كانت العملية تبدو داخل حاوية. لا توجد نسبة مئوية لاستخدام CPU؛ فالحمل المعروض هو متوسط الحمل فقط.
- وقت التشغيل: إصدار التطبيق وإصدار Node.js ومعرّف العملية ومدة تشغيلها ودليل العمل.
- الذاكرة: إجمالي ذاكرة المضيف والمتاح والمستخدم منها، إلى جانب RSS للعملية وأرقام heap.
- أنظمة الملفات: السعة والاستخدام لنظام ملفات وقت التشغيل (
/) ودليل البيانات (DATA_DIR). - الشبكة: أسماء الواجهات وعناوينها، مع عدادات البايتات المستلمة والمرسلة على Linux.
- Docker: إصدار المحرك ونظام تشغيل المضيف والنواة وCPU والذاكرة كما يبلغ عنها المحرك، وعدد الحاويات مع قائمة مختصرة بها عند توفر socket Docker.
تُحدّث الصفحة كل 30 ثانية أثناء تركيز علامتها، وبها زر تحديث يدوي. نقطة نهاية
الواجهة الخلفية هي GET /api/system، وتحميها المصادقة ودور مسؤول نشط وحد معدل لكل
مستخدم يبلغ 120 طلبًا في 15 دقيقة. لا تُخزّن الاستجابات مؤقتًا أبدًا
(Cache-Control: no-store)، ويجمع كل طلب قيمًا حديثة.
الاعتماد على socket Docker
تحل فقرة Docker نقطة نهايتها بالطريقة نفسها التي يحل بها وقت تشغيل Work والطرفية
التفاعلية: WORK_DOCKER_SOCKET عند تعيينه (ويكون دائمًا مسار socket Unix محليًا)،
وإلا DOCKER_HOST — عنوان unix:// أو نقطة tcp:// عبر HTTP عادي، مثل وكيل مفلتر
لواجهة Docker API — وإلا /var/run/docker.sock. لا تُستعلم عمدًا نقاط النهاية
ssh:// وnpipe://، ولا tcp:// عند تفعيل التحقق من TLS. تقتصر الطلبات بدقة على
طلبات GET للقراءة فقط إلى المحرك (الإصدار والمعلومات وقائمة الحاويات)، بمهلة
4 ثوانٍ وحجم استجابة محدود، وتُحد قائمة الحاويات عند 100 إدخال.
عند غياب socket صالح، تستمر بقية الصفحة في العمل: توضح لوحة Docker سبب عدم التوفر — socket غير مركب، أو مركب وغير مقروء، أو daemon غير قابل للوصول، أو نقطة نهاية بعيدة — بدل إفشال الطلب كله.
ما تكشفه الصفحة ولمن
تُختصر قائمة الحاويات عمدًا إلى: معرّف قصير واسم وصورة وحالة ووقت إنشاء. لا تُدرج متغيرات البيئة أو الوسوم أو مواضع التركيب أو أوامر الحاويات أو حمولات الفحص، ولا تظهر بيانات اعتماد في أي موضع من الاستجابة.
مع ذلك، تعرض الصفحة تفاصيل حقيقية للبنية التحتية: اسم المضيف ودليل العمل وعناوين IP
الداخلية وأسماء وصور كل الحاويات على مضيف Docker، لا حاويات Libre WebUI وحدها. وهذا
يتفق مع نموذج الثقة: في نشر Docker، يكون كل مسؤول Libre WebUI فعليًا مسؤولًا عن
المضيف (راجع Docker). امنح الدور admin وفقًا لذلك.
تحليلات الاستخدام
ترسم صفحة الاستخدام أعمال النماذج والموفّرين المنسوبة إلى المستخدمين. يحدث القياس عند كل حد تنفيذ مدعوم، ويشمل حاليًا:
- استدعاءات محادثة Ollama المحلية، بما فيها استدعاءات Chat الأصلية وWork المدعوم بـOllama؛
- استدعاءات محادثة وكلاء CLI المثبّتين؛
- المحادثة المدعومة بإضافة، متدفقة وغير متدفقة؛
- التضمينات وتوليد الصور وتحويل الكلام إلى نص وتحويل النص إلى كلام والصوت والفيديو المدعومة بإضافات؛ و
- استدعاءات Work المدعومة بإضافات.
لا تُنسب عمليات الخلفية التي لا يملكها مستخدم إلى حساب اصطناعي عمدًا، ولذلك لا تُقاس. ويظل الاستدعاء مسجلًا إذا فشل أو أُلغي.
يسجل كل حدث:
- معرّف الموفّر أو الإضافة ولقطة لاسمه المعروض (
ollamaوagent-cli:*يستخدمان السجل نفسه كموفّري الإضافات) - الإمكانية (
chatأوembeddingأوimageأوsttأوttsأوaudioأوvideo) - النموذج
- الحالة:
successأوerrorأوcancelled(يُحسب التدفق المجهض ملغيًا) - أعداد الرموز، فقط عندما يعيد الموفّر بيانات وصفية للاستخدام
- عدادات الوحدات المناسبة للإمكانية (أحرف TTS، وصور، ومدخلات تضمين، ومهام فيديو، وبايتات صوت)
- المدة من البداية إلى النهاية وطابع زمني
- معرّف المستخدم الطالب
لا يُخزّن شيء آخر. لا تُكتب المطالبات أو الردود أو نقاط نهاية الموفّرين أو بيانات
الاعتماد أو أجسام أخطائهم أبدًا في جدول الاستخدام — ويُسجّل الاستدعاء الفاشل فقط
كـstatus = 'error'. تعيش الأحداث في قاعدة بيانات التطبيق المحددة (SQLite في
الوضع الفردي وPostgreSQL في وضع الفريق) وتُحفظ لمدة 400 يوم؛ وتُحذف الصفوف
الأقدم بصورة انتهازية عند الكتابة، بما لا يزيد على مرة يوميًا. القياس قائم على بذل
أفضل جهد، ولا يمكنه أبدًا التسبب في فشل طلب نموذج أو موفّر.
تقدم الصفحة نطاقات 7 و30 و90 يومًا عبر نقطة واحدة للمسؤولين فقط،
GET /api/plugins/usage?days=<1..365> (الافتراضي 30). وتعرض إجمالي الاستدعاءات
والرموز المبلّغ عنها ومعدل النجاح ومتوسط زمن الاستجابة، ورسمًا يوميًا يمكن تبديله
بين الاستدعاءات والرموز، وجدولًا لكل نموذج، وحصص الحركة لكل إضافة، ومزيج الإمكانات.
لا تشمل مجاميع الرموز إلا الاستدعاءات التي أبلغ فيها الموفّر عن بيانات الاستخدام.
لا يوجد مفتاح لتعطيل القياس. ولأن البيانات مجمعة بين الحسابات، يقتصر فحصها على المسؤولين.
تعرض صفحة الاستخدام الاستدعاءات والوحدات والرموز وزمن الاستجابة والنتائج. أضف حوكمة التكلفة عندما تحتاج الأحداث إلى أسعار ذات تواريخ سريان، أو تفصيل الإنفاق، أو الميزانيات، أو التنبيهات، أو التصدير المحاسبي. تبقى الأحداث التي لا تطابق سعرًا أو لا يبلغ موفّرها عن الاستخدام ظاهرة بلا تسعير بدل اعتبارها مجانية.
إسناد OpenRouter
منذ 0.18.0، تعرّف الطلبات إلى OpenRouter التطبيق عبر ترويسات إسناد التطبيق لدى
OpenRouter (HTTP-Referer: https://librewebui.org وعنوان التطبيق وتلميحات الفئة).
لا تُرسل هذه الترويسات إلا عندما يتجه الطلب إلى https://openrouter.ai نفسه، ولا
تُرسل إلى مسار مخصص أو مستضاف ذاتيًا، ولا تضيف شيئًا إلى ما يُخزّن محليًا.