عملیات

نظارت بر سرور، افزایش ظرفیت آن برای پذیرش کاربران بیشتر، تعیین مدت نگهداری داده‌ها و رفع مشکلاتی که مدیران بیشترین بار با آن‌ها مواجه می‌شوند.

بررسی سلامت

  • amctl --local system status (در داخل کانتینر: docker compose exec antimatter amctl --local system status). بررسی سلامت تصویر Docker هر ۳۰ ثانیه یک‌بار این دستور را اجرا می‌کند، بنابراین docker compose ps وضعیت healthy یا unhealthy را نشان می‌دهد.
  • GET /api/v4/system/ping بدون نیاز به ورود پاسخ می‌دهد، مثلاً برای یک مانیتور خارجی یا بار均衡گر: curl -fsS https://chat.example.com/api/v4/system/ping.
  • antimatter db ping بررسی می‌کند که پایگاه داده با تنظیمات پیکربندی‌شده در دسترس است.
  • کنسول سیستم › گزارش نویسی › آمار سیستم تعداد کاربران، پست‌ها و نشست‌ها را نشان می‌دهد.
  • کنسول سیستم › گزارش نویسی › سلامت سایت هر ساعت پایگاه داده، جستجو، خوشه، پوش، وظایف، ورود، انطباق و موارد دیگر را بررسی می‌کند و مواردی که نیاز به توجه دارند را همراه با شدت آن‌ها فهرست می‌کند؛ اگر نمی‌خواهید موردی را دوباره ببینید، آن را بی‌صدا کنید و بعداً در تب «بی‌صدا شده‌ها» (Muted) همراه با نام کسی که آن را بی‌صدا کرده و زمان بی‌صدا شدن، آن را پیدا کنید. این قابلیت به طور پیش‌فرض فعال است و برای مدیران کل سیستم جایگزین بهینه‌سازی محیط‌کار می‌شود (مدیران تفویضی که فقط اجازه خواندن آمار سایت را دارند همچنان بهینه‌سازی محیط‌کار را می‌بینند). با تنظیم 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
کنسول سیستم › گزارش نویسی › لاگ‌های سرور.

Metrics

سرور می‌تواند متریک‌های 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 همچنان کار می‌کنند. اپلیکیشن‌ها شاخص‌های خود را منتشر می‌کنند، برای مثال اپلیکیشن Agents در /plugins/mattermost-ai/metrics.

پورت شاخص‌ها به ورود نیاز ندارد: آن را در یک شبکه خصوصی نگه دارید. فایل compose سایت آن را منتشر نمی‌کند؛ برای اسکرپ از میزبان، "127.0.0.1:8067:8067" را به ports سرویس antimatter اضافه کنید.

اپلیکیشن Metrics

بدون سرور Prometheus، اپلیکیشن Metrics (به اپلیکیشن‌های داخلی مراجعه کنید) همان معیارها را در یک پایگاه داده کوچک سری زمانی درون Antimatter جمع‌آوری می‌کند: هر ۶۰ ثانیه، با نگهداری برای ۱۵ روز. فعال کردن فعال کردن نظارت بر عملکرد باعث فعال شدن این اپلیکیشن نیز می‌شود، مگر اینکه خودتان آن را غیرفعال کرده باشید. این اپلیکیشن هنگام شروع به کار، نقطه پایانی معیارها (metrics endpoint) را فعال می‌کند. صفحه مربوط به آن در کنسول سیستم › پلاگین ها اندازه پایگاه داده را نشان می‌دهد و به شما امکان می‌دهد از داده‌ها خروجی بگیرید (dump)، برای تحلیل شخصی یا پیوست کردن به گزارش باگ؛ آخرین روز نیز به بسته‌های پشتیبانی اضافه می‌شود.

بسته پشتیبانی

بسته پشتیبانی یک فایل zip است که شامل موارد لازم برای عیب‌یابی می‌شود: نسخه‌ها، آمارها، پیکربندی بدون رازهای امنیتی، فهرست اپلیکیشن‌ها و وظایف، طرح پایگاه داده، لاگ‌های اخیر و پروفایل‌های عملکرد. یکی از این بسته‌ها را با دستور amctl system supportpacket یا از طریق کنسول سیستم از منوی بالای نوار کناری (پشتیبانی تجاری، که سپس امکان انتخاب موارد مورد نظر برای شامل شدن را می‌دهد) تولید کنید. قبل از اشتراک‌گذاری آن را بخوانید: این بسته حاوی پیام‌ها نیست، اما نام جوامع، کاربران و تنظیمات را در بر می‌گیرد.

عملکرد و مقیاس‌پذیری

یک سرور با ۲ هسته CPU و ۴ گیگابایت حافظه می‌تواند به چند صد نفر خدمت‌رسانی کند. قبل از افزودن سرورهای بیشتر، به موارد زیر توجه کنید:

  • پایگاه داده. PostgreSQL بیشتر کار را انجام می‌دهد: به آن ذخیره‌سازی سریع و حافظه اختصاص دهید. کپی‌های خواندنی (Read replicas) می‌توانند بار خواندن را بر عهده بگیرند (SqlSettings.DataSourceReplicas، یک فهرست از URLهای اتصال).
  • جست‌وجو به‌طور پیش‌فرض پیام‌ها در پایگاه داده جستجو می‌شوند. برای سرورهای بزرگ، Elasticsearch یا OpenSearch می‌توانند جستجو و ایندکس‌سازی را بر عهده بگیرند: کنسول سیستم › محیط › Elasticsearch (ElasticsearchSettings: نوع بک‌اند Elasticsearch یا OpenSearch، آدرس اتصال سرور، اطلاعات احراز هویت، سپس فعال‌سازی ایندکس‌سازی، ساخت ایندکس و فعال‌سازی جستجو).
  • تماس‌ها رسانه تماس‌ها سنگین‌ترین بار را ایجاد می‌کنند. آن‌ها را به یک سرور rtcd منتقل کنید: به مکالمات و صدا مراجعه کنید.
  • فایل‌های باز. هر کاربر متصل یک websocket را باز نگه می‌دارد. فایل compose تولیدی antimatter-docker این محدودیت را به ۴۹۱۵۲ افزایش می‌دهد (ulimits: nofile)؛ همین کار را با systemd (LimitNOFILE) نیز انجام دهید.
  • لاگ‌ها. LogSettings.ConsoleLevel را به INFO یا WARN کاهش دهید: لاگ‌های DEBUG در یک سرور شلوغ حجم زیادی تولید می‌کنند.
  • فشرده‌سازی. با تنظیم حالت وب سرور روی gzip، تنظیم AM_FEATUREFLAGS_ENABLEBROTLICOMPRESSION=true فشرده‌سازی Brotli را برای پاسخ‌های API با کلاینت‌هایی که آن را می‌پذیرند مذاکره می‌کند، به جای gzip (اختیاری، به طور پیش‌فرض غیرفعال؛ پس از تغییر، سرور را مجدداً راه‌اندازی کنید).

دسترس‌پذیری بالا

چندین سرور Antimatter می‌توانند به عنوان یک خوشه پشت یک باربانس (load balancer) اجرا شوند، بدون نیاز به لایسنس. آن‌ها باید از همان پایگاه داده PostgreSQL، همان فضای ذخیره‌سازی فایل S3 و پیکربندی موجود در پایگاه داده (AM_CONFIG) استفاده کنند. در کنسول سیستم › محیط › در دسترس بودن بالا (ClusterSettings): حالت دسترسی بالا را فعال کنید (ClusterSettings.Enable)، به هر نود همان نام خوشه (ClusterSettings.ClusterName) را بدهید و اجازه دهید نودها از طریق پورت gossip، 8074 TCP و UDP (ClusterSettings.GossipPort) با یکدیگر ارتباط برقرار کنند. نودها از طریق پایگاه داده یکدیگر را پیدا می‌کنند. باربانس باید websockets را عبور دهد. برای مکالمات در یک خوشه، از rtcd استفاده کنید.

نگهداری داده

به‌طور پیش‌فرض Antimatter همه پیام‌ها و فایل‌ها را برای همیشه نگه می‌دارد. برای حذف خودکار موارد قدیمی، به کنسول سیستم › انطباق › سیاست های حفظ داده ها بروید:

  • سیاست حفظ جهانی نگهداری کانال‌ها و پیام‌های مستقیم و نگهداری فایل را برای کل سرور تنظیم می‌کند: برای همیشه نگه دارید یا تعدادی ساعت، روز یا سال (DataRetentionSettings.EnableMessageDeletion، MessageRetentionHours، EnableFileDeletion، FileRetentionHours).
  • سیاست های نگهداری سفارشی مدت زمان دیگری را برای جوامع و کانال‌های انتخاب‌شده تعیین می‌کنند.
  • کار حذف هر روز در ساعتی که انتخاب می‌کنید اجرا می‌شود (DataRetentionSettings.DeletionJobStartTime، به‌طور پیش‌فرض 02:00 UTC). اکنون کار حذف را اجرا کنید آن را فوراً اجرا می‌کند و گزارش سیاست موارد حذف‌شده در هر اجرا را فهرست می‌کند.
پیام‌ها و فایل‌های حذف‌شده برای همیشه از پایگاه داده و فضای ذخیره‌سازی فایل ناپدید می‌شوند. قبل از فعال‌سازی یک سیاست، مدت‌ها را بررسی کنید و به یاد داشته باشید که تا زمانی که منقضی نشوند، داده‌های حذف‌شده همچنان در پشتیبان‌گیری‌های شما باقی می‌مانند.

خروجی انطباق و لاگ‌های ممیزی

  • کنسول سیستم › انطباق › مطابقت صادرات هر روز تمام پیام‌ها و فایل‌ها را در یکی از فرمت‌هایی که سیستم‌های بایگانی می‌توانند بخوانند (CSV، XML Actiance یا Global Relay (یک فایل zip یا EML ارسال‌شده از طریق SMTP)) صادر می‌کند (فعال کردن Export Compliance، MessageExportSettings.EnableExport، به‌طور پیش‌فرض غیرفعال؛ زمان صدور مطابقت، 01:00 به‌طور پیش‌فرض). amctl compliance-export صادرات‌ها را از خط فرمان اجرا و دانلود می‌کند.
  • نظارت بر انطباق (ComplianceSettings) گزارش‌های روزانه را در یک پوشه می‌نویسد. این مکانیزم قدیمی است؛ از Compliance Export استفاده کنید.
  • گزارش‌دهی ممیزی (بتا، ExperimentalAuditSettings) رویدادهای مدیریتی و امنیتی (ورودها، تغییرات مجوز و تنظیمات) را در یک فایل جداگانه ثبت می‌کند. یک رکورد ورود با احراز هویت یکپارچه (SSO) همچنین نشان می‌دهد که آیا آن ورود منجر به ایجاد حساب کاربری شده است یا خیر.
  • شرایط سفارشی خدمات از همه می‌خواهد قبل از استفاده از Antimatter و همچنین بعد از هر تغییری در شرایط، آن‌ها را بپذیرند.

مشکلات رایج

"به سرور نمی‌توان وصل شد" یا پیام‌ها فقط پس از بارگذاری مجدد ظاهر می‌شوند

اتصال وب‌سوکت برقرار نمی‌شود. بررسی کنید که پروکسی معکوس هدرهای Upgrade و Connection را عبور دهد (به نمونه nginx مراجعه کنید) و آدرس سایت دقیقاً با آدرس در مرورگر، از جمله https، مطابقت داشته باشد.

بارگذاری فایل‌ها با خطای "413 Request Entity Too Large" ناموفق است

پروکسی اندازه را رد می‌کند. حد آن را (nginx client_max_body_size) به حداقل حداکثر اندازه فایل در کنسول سیستم › محیط › ذخیره سازی فایل (FileSettings.MaxFileSize، به‌طور پیش‌فرض ۱۰۰ مگابایت) افزایش دهید.

کاربران نمی‌توانند مکالمه را شروع کنند، یا پیوسته می‌شوند اما چیزی نمی‌شنوند

اگر فقط مدیران می‌توانند مکالمه‌ها را شروع کنند، حالت Test mode مکالمه‌ها را غیرفعال کنید. اگر دکمه مکالمه در کانال‌های یک جامعه وجود ندارد، آن جامعه از نوع Community است که در آن مکالمه‌ها به‌طور پیش‌فرض غیرفعال هستند: مدیران کانال یا جامعه می‌توانند مکالمه‌ها را در یک کانال فعال کنند یا نوع جامعه را تغییر دهند (به مکان‌هایی که مکالمه‌ها فعال هستند مراجعه کنید). اگر افراد پیوست می‌شوند اما چیزی نمی‌شنوند، پورت رسانه مسدود است یا سرور آدرس اشتباه را اعلام می‌کند: پورت‌های 8443 UDP و TCP را باز کنید و ICE Host Override را پشت NAT تنظیم کنید. افرادی که در شبکه‌هایی هستند که هر دو را مسدود می‌کنند، به یک سرور TURN نیاز دارند. به مکالمه‌ها و صدا مراجعه کنید.

انتخابگر GIF خالی است

آدرس سرویس GIF (با فایل compose سایت، http://gifs:8080/v2) و کلید API (GIFS_API_KEY در فایل .env) را در کنسول سیستم › پلاگین ها › GIFها بررسی کنید و مطمئن شوید که سرویس gifs در حال اجراست: docker compose ps gifs.

هیچ ایمیلی دریافت نمی‌شود

از تست اتصال در کنسول سیستم › محیط › SMTP استفاده کنید، مطمئن شوید که اطلاعیه از آدرس هنوز test@example.com نیست و در لاگ به دنبال smtp یا mail بگردید.

یک اپلیکیشن "شروع ناموفق" را نشان می‌دهد

شناسه آن را در لاگ جستجو کنید (docker compose logs antimatter | grep <app id>). برای راه‌اندازی مجدد، آن را در مدیریت افزونه‌ها غیرفعال و سپس فعال کنید.

سرور راه‌اندازی نمی‌شود

انتهای لاگ آن را بخوانید. در بیشتر موارد پایگاه داده در دسترس نیست (با antimatter db ping AM_SQLSETTINGS_DATASOURCE را بررسی کنید)، یک مهاجرت پایگاه داده ناموفق بوده است (بکاپ گرفته‌شده قبل از ارتقا را بازیابی کنید و خطا را گزارش دهید) یا پورت گوش‌دهی اشغال شده است.

قفل شدن از حساب مدیر

از سمت سرور، حالت محودی نیاز به گذرواژه ندارد:

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 باز کنید و نسخه، روش نصب، اقدامات انجام‌شده و خطوط مرتبط لاگ را ذکر کنید. مشکلات امنیتی را به‌صورت خصوصی گزارش دهید، همان‌طور که در سیاست امنیتی توضیح داده شده است.