العمليات

مراقبة الخادم، تمكينه من التعامل مع عدد أكبر من المستخدمين، تحديد مدة الاحتفاظ بالبيانات، وإصلاح المشكلات التي يواجهها المسؤولون في أغلب الأحيان.

فحوصات الحالة

  • amctl --local system status (داخل الحاوية: docker compose exec antimatter amctl --local system status). يعمل فحص الحالة في صورة Docker كل 30 ثانية، لذا يعرض docker compose ps حالة healthy أو unhealthy.
  • يُجيب GET /api/v4/system/ping دون تسجيل الدخول، وذلك لمراقب خارجي أو موزّع أحمال: curl -fsS https://chat.example.com/api/v4/system/ping.
  • يتحقق antimatter db ping من إمكانية الوصول إلى قاعدة البيانات باستخدام الإعدادات المحددة.
  • يعرض وحدة التحكم بالنظام › التقارير › إحصائيات النظام عدد المستخدمين والمنشآت والجلسات.
  • تتحقق صفحة وحدة التحكم بالنظام › التقارير › صحة الموقع كل ساعة من قاعدة البيانات، والبحث، والعنقود، والإشعارات الفورية، والوظائف، وتسجيل الدخول، والامتثال، وغيرها، وتعرض العناصر التي تتطلب انتباهًا مع تحديد مستوى خطورتها. يمكنك كتم أي ملاحظة لا ترغب في رؤيتها مرة أخرى، وإيجادها لاحقًا ضمن تبويب «المكتومة» مع اسم الشخص الذي كتمها والوقت الذي كتمها فيه. هذه الميزة مفعّلة افتراضيًا، وهي تُحل محل تحسين مساحة العمل لمديري النظام الكاملين (بينما يرى المدير المفوَّض الذي يمكنه قراءة إحصاءات الموقع فقط صفحة «تحسين مساحة العمل»). يمكنك إيقاف تشغيلها باستخدام AM_FEATUREFLAGS_HEALTHDASHBOARD=false.
System Console › Reporting › Site health, with open findings grouped by severity
وحدة التحكم بالنظام › التقارير › صحة الموقع، مجمعة حسب درجة الخطورة.
System Console › Reporting › Server Logs, with level badges, filters and a live tail toggle
وحدة التحكم بالنظام › التقارير › سجلات الخادم.

المقاييس

يمكن للخادم نشر مقاييس Prometheus: معدلات الطلبات ومددها، اتصالات websocket، استخدام قاعدة البيانات والذاكرة المؤقتة، المهام، خطافات الإضافات والمزيد. فعّلها من وحدة التحكم بالنظام › البيئة › مراقبة الأداء:

الإعدادالمفتاح والمتغيرالافتراضي
تمكين مراقبة الأداءMetricsSettings.Enable, AM_METRICSSETTINGS_ENABLEمعطّل
عنوان الاستماعMetricsSettings.ListenAddress, AM_METRICSSETTINGS_LISTENADDRESS:8067
تمكين مراقبة أداء العميلMetricsSettings.EnableClientMetricsعلى: تُبلّغ المتصفحات والتطبيقات عن أزمنتها الخاصة

ثم يقوم Prometheus بسحب http://<server>:8067/metrics. يُنشر كل مقياس تحت اسم Mattermost الخاص به (mattermost_…) واسم Antimatter الخاص به (antimatter_…)، مما يتيح استمرار عمل لوحات معلومات Mattermost الحالية. تُنشر التطبيقات مقاييسها الخاصة، على سبيل المثال تطبيق الوكلاء في /plugins/mattermost-ai/metrics.

لا يتطلب منفذ المقاييس تسجيل الدخول: احتفظ به على شبكة خاصة. لا يُنشر ملف compose الخاص بالموقع هذا المنفذ؛ لسحبه من المضيف، أضف "127.0.0.1:8067:8067" إلى ports لخدمة antimatter.

تطبيق المقاييس

في حال عدم وجود خادم Prometheus، يجمع تطبيق المقاييس (انظر التطبيقات المضمّنة) المقاييس نفسها في قاعدة بيانات صغيرة للسلاسل الزمنية داخل Antimatter: كل 60 ثانية، مع الاحتفاظ بالبيانات لمدة 15 يومًا. يؤدي تفعيل تمكين مراقبة الأداء إلى تفعيل التطبيق أيضًا، إلا إذا كنت قد أوقفته بنفسك. يقوم التطبيق بتفعيل نقطة نهاية المقاييس عند بدء تشغيله. تعرض صفحة التطبيق في وحدة التحكم بالنظام › الإضافات حجم قاعدة البيانات، وتتيح لك تنزيل نسخ احتياطية من البيانات لتحليلها بنفسك أو لإرفاقها بتقرير خطأ؛ كما تُضاف بيانات أحدث يوم إلى حزم الدعم.

حزمة الدعم

حزمة الدعم هي ملف zip يحتوي على ما يلزم لتشخيص المشكلة: الإصدارات، الإحصائيات، الإعدادات مع إزالة أسرارها، قائمة التطبيقات والمهام، مخطط قاعدة البيانات، والسجلات الحديثة وملفات الأداء. أنشئ واحدة باستخدام amctl system supportpacket، أو من وحدة التحكم بالنظام عبر القائمة أعلى شريطها الجانبي (الدعم التجاري، والتي تتيح لك بعد ذلك اختيار ما تريد تضمينه). اقرأها قبل مشاركتها: فهي لا تحتوي على الرسائل، لكنها تحتوي على أسماء المجتمعات والمستخدمين والإعدادات.

الأداء والتوسع

يخدم خادم واحد بمعالج من 2 نواة وذاكرة 4 جيجابايت بضع مئات من الأشخاص. قبل إضافة خوادم، راجع ما يلي:

  • قاعدة البيانات. يقوم PostgreSQL بمعظم العمل: امنحه تخزيناً سريعاً وذاكرة. يمكن لنسخ القراءة (Read replicas) أن تتحمل حمل القراءة (SqlSettings.DataSourceReplicas، وهو قائمة من عناوين الاتصال).
  • البحث. يتم البحث في الرسائل داخل قاعدة البيانات افتراضياً. بالنسبة للخوادم الكبيرة، يمكن لـ Elasticsearch أو OpenSearch أن يتولى البحث والفهرسة: وحدة التحكم بالنظام › البيئة › Elasticsearch (ElasticsearchSettings: نوع المحرك Elasticsearch أو OpenSearch، عنوان اتصال بالخادم، بيانات الاعتماد، ثم تفعيل الفهرسة، بناء الفهرس، وتفعيل البحث).
  • المكالمات. وسائط المكالمات هي أثقل حمل. انقلها إلى خادم rtcd: انظر المكالمات والصوت.
  • الملفات المفتوحة. يحتفظ كل شخص متصل بفتح websocket. يرفع ملف compose للإنتاج في antimatter-docker الحد إلى 49152 (ulimits: nofile)؛ قم بالمثل مع systemd (LimitNOFILE).
  • السجلات. اخفض LogSettings.ConsoleLevel إلى INFO أو WARN: يسجل DEBUG الكثير على الخادم المزدحم.
  • الضغط. عند تعيين وضع خادم الويب على gzip، يتفاوض AM_FEATUREFLAGS_ENABLEBROTLICOMPRESSION=true على ضغط Brotli لاستجابات واجهة برمجة التطبيقات مع العملاء التي تقبله، بدلاً من gzip (اختياري، وغير مفعّل افتراضيًا؛ أعد تشغيل الخادم بعد تغيير هذا الإعداد).

التوافر العالي

يمكن تشغيل عدة خوادم Antimatter كعنقود خلف موازن الأحمال، دون الحاجة إلى ترخيص. يجب أن تتشارك الخوادم في نفس قاعدة بيانات PostgreSQL، ونفس تخزين الملفات S3، والإعدادات المخزنة في قاعدة البيانات (AM_CONFIG). في وحدة التحكم بالنظام › البيئة › التوافر العالي (ClusterSettings): فعّل تفعيل وضع التوافر العالي (ClusterSettings.Enable)، وأعطِ كل عقدة نفس اسم العنقود (ClusterSettings.ClusterName)، واطلب من العقد الوصول إلى بعضها البعض عبر منفذ الغسوسب، 8074 TCP وUDP (ClusterSettings.GossipPort). تتعرف العقد على بعضها البعض عبر قاعدة البيانات. يجب أن يمرر موازن الأحمال اتصالات WebSocket. لاستخدام المكالمات في العنقود، استخدم rtcd.

الاحتفاظ بالبيانات

بشكل افتراضي، يحتفظ Antimatter بكل رسالة وملف بشكل دائم. لحذف العناصر القديمة تلقائيًا، انتقل إلى وحدة التحكم بالنظام › الامتثال › سياسات الاحتفاظ بالبيانات:

  • تحدد سياسة الاحتفاظ العامة احتفاظ الرسائل في القنوات والرسائل المباشرة واحتفاظ بالملفات للخادم بأكمله: احتفاظ دائم، أو عدد من الساعات أو الأيام أو السنوات (DataRetentionSettings.EnableMessageDeletion، MessageRetentionHours، EnableFileDeletion، FileRetentionHours).
  • تحدد سياسات الاحتفاظ المخصصة مدة أخرى للمجتمعات والقنوات المحددة.
  • تُنفَّذ مهمة الحذف يوميًا في الوقت الذي تحدده (DataRetentionSettings.DeletionJobStartTime، و02:00 بتوقيت UTC افتراضيًا). يؤدي تشغيل مهمة الحذف الآن إلى تنفيذها فورًا، بينما يدرج سجل السياسات ما أزالته كل عملية تشغيل.
تُحذف الرسائل والملفات المحذوفة نهائيًا، من قاعدة البيانات ومن تخزين الملفات. تحقق من المدد قبل تفعيل سياسة، وتذكر أن نسخ احتياطية ما زالت تحتفظ بالبيانات المحذوفة حتى تنتهي صلاحيتها.

تصدير الامتثال وسجلات التدقيق

  • تُصدِّر وحدة التحكم بالنظام › الامتثال › تصدير الامتثال جميع الرسائل والملفات يوميًا (تفعيل تصدير الامتثال، MessageExportSettings.EnableExport، معطَّل افتراضيًا؛ وقت تصدير الامتثال، 01:00 افتراضيًا) بأحد الصيغ التي تقرأها أنظمة الأرشفة: CSV، أو Actiance XML، أو Global Relay (ملف zip، أو EML يُرسَل عبر SMTP). يُنفَّذ amctl compliance-export ويحمِّل التصديرات من سطر الأوامر.
  • يكتب مراقبة الامتثال (ComplianceSettings) تقاريرًا يومية في مجلد. هذا هو الآلية الأقدم؛ يُفضَّل استخدام تصدير الامتثال.
  • يسجل سجل التدقيق (تجريبي، ExperimentalAuditSettings) أحداث الإدارة والأمان (تسجيل الدخول، وتغييرات الأذونات والإعدادات) في ملف خاص به. كما يوضح سجل تسجيل الدخول أحادي الجلسة ما إذا كان ذلك التسجيل قد أنشأ الحساب.
  • يطلب شروط الخدمة المخصصة من الجميع قبول شروطك قبل استخدام Antimatter، ثم يطلب قبولها مرة أخرى بعد أي تغيير تجريه عليها.

مشاكل شائعة

«تعذّر الاتصال بالخادم»، أو ظهور الرسائل فقط بعد إعادة التحميل

لا يمرّ اتصال WebSocket. تأكد من أن وكيل العكس يمرر رؤوس Upgrade وConnection (انظر مثال nginx)، وأن عنوان الموقع يطابق العنوان في المتصفح تمامًا، بما في ذلك https.

فشل الرفع مع رسالة «413 Request Entity Too Large»

يرفض الوكيل الحجم. ارفع حدّه (nginx client_max_body_size) إلى ما لا يقل عن الحد الأقصى لحجم الملف في وحدة التحكم بالنظام › البيئة › تخزين الملفات (FileSettings.MaxFileSize، وهو 100 ميغابايت افتراضيًا).

تعذّر بدء المكالمات، أو انضمام الأشخاص إليها دون سماع أي شيء

إذا كان بإمكان المديرين فقط بدء المكالمات، فعطّل وضع الاختبار للمكالمات. إذا كان زر المكالمة مفقودًا في قنوات المجتمع، فإن المجتمع من نوع المجتمع، حيث تكون المكالمات معطلة افتراضيًا: يمكن لمديري القناة أو المجتمع تفعيل المكالمات في قناة، أو تغيير نوع المجتمع (انظر أين تكون المكالمات مفعّلة). إذا انضم الأشخاص لكنهم لا يسمعون شيئًا، فإما أن منفذ الوسائط محجوب أو أن الخادم يعلن عنوانًا خاطئًا: افتح المنفذ 8443 عبر UDP وTCP، واضبط تجاوز مضيف ICE خلف NAT. يحتاج الأشخاص على الشبكات التي تحجب كلا المنفذين إلى خادم TURN. انظر المكالمات والصوت.

مُنتقي GIF فارغ

تحقق من عنوان خدمة GIF (http://gifs:8080/v2 في ملف compose الخاص بالموقع) ومفتاح الواجهة البرمجية (GIFS_API_KEY في .env) في وحدة التحكم بالنظام › الإضافات › GIF، وتأكد من تشغيل خدمة gifs: docker compose ps gifs.

عدم وصول رسائل البريد الإلكتروني

استخدم اختبار الاتصال في وحدة التحكم بالنظام › البيئة › SMTP، وتحقق من أن عنوان المرسل للإشعارات لم يعد test@example.com، وابحث في السجل عن smtp أو mail.

إظهار التطبيق لرسالة «فشل في البدء»

ابحث عن معرّفه في السجل (docker compose logs antimatter | grep <app id>). عطّله ثم فعّله في إدارة الإضافات لإعادة تشغيله.

عدم بدء تشغيل الخادم

اقرأ نهاية سجله. في أغلب الأحيان، يكون السبب عدم إمكانية الوصول إلى قاعدة البيانات (تحقق من AM_SQLSETTINGS_DATASOURCE باستخدام antimatter db ping)، أو فشل ترحيل قاعدة البيانات (استعد النسخة الاحتياطية المأخوذة قبل الترقية وأبلغ عن الخطأ)، أو أن منفذ الاستماع مشغول.

قفل حساب المدير

من الخادم، لا يحتاج الوضع المحلي إلى كلمة مرور:

docker compose exec antimatter amctl --local user change-password admin --password 'a-new-password'
docker compose exec antimatter amctl --local user resetmfa admin
docker compose exec antimatter amctl --local roles system-admin admin

الإبلاغ عن خطأ

افتح مشكلة في مستودع مجتمع Antimatter، مع ذكر الإصدار، وطريقة التثبيت، وما قمت به، والسطور ذات الصلة في السجلات. أبلغ عن المشكلات الأمنية على وجه الخصوص، كما يوضح سياسة الأمان.