Эксплуатация
Следите за сервером, масштабируйте его для большего числа пользователей, определяйте сроки хранения данных и устраняйте проблемы, с которыми чаще всего сталкиваются администратор.
Проверки работоспособности
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проверяет, что база данных доступна с настроенными параметрами.- Системная консоль › Отчеты › Статистика системы показывает количество пользователей, сообщений и сессий, а Оптимизация рабочего пространства перечисляет проблемы с конфигурацией, требующие внимания.
Метрики
Сервер может публиковать метрики 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: каждые 60 секунд, с сохранением на 15 дней. При запуске оно включает конечную точку метрик. Его страница в Системная консоль › Плагины показывает размер базы данных и позволяет скачать дампы данных для собственного анализа или для вложения в отчет об ошибке; данные за последний день также добавляются в пакеты поддержки.
Пакет поддержки
Пакет поддержки — это zip-файл со всем необходимым для диагностики проблемы: версиями, статистикой, конфигурацией (с удаленными секретами), списком приложений и заданий, схемой базы данных, недавними журналами и профилями производительности. Сгенерируйте его с помощью amctl system supportpacket или в Системной консоли из меню в верхней части боковой панели (Коммерческая поддержка, где можно выбрать, что включить). Прочитайте его перед отправкой: он не содержит сообщений, но включает названия сообществ, пользователей и настроек.
Производительность и масштабирование
Один сервер с 2 ядрами CPU и 4 ГБ памяти обслуживает несколько сотен человек. Прежде чем добавлять серверы, обратите внимание на:
- База данных. PostgreSQL выполняет большую часть работы: обеспечьте его быстрым хранилищем и памятью. Читающие репликаты могут взять на себя нагрузку чтения (
SqlSettings.DataSourceReplicas, список URL подключений). - Поиск. По умолчанию поиск сообщений выполняется в базе данных. Для крупных серверов Elasticsearch или OpenSearch могут взять на себя функции поиска и индексирования: Системная консоль › Окружение › Elasticsearch (
ElasticsearchSettings: Тип бэкенда Elasticsearch или OpenSearch, Адрес подключения к серверу, учетные данные, затем включите индексирование, создайте индекс и включите поиск). - Звонки. Медиа звонков создают наибольшую нагрузку. Перенесите их на сервер rtcd: см. Звонки и голос.
- Открытые файлы. Каждый подключенный пользователь поддерживает открытый websocket. Продуктовый compose-файл antimatter-docker повышает лимит до 49152 (
ulimits: nofile); сделайте то же самое с systemd (LimitNOFILE). - Журналы. Установите
LogSettings.ConsoleLevelнаINFOилиWARN:DEBUGгенерирует много записей на загруженном сервере.
Высокая доступность
Несколько серверов Antimatter могут работать в виде кластера за балансировщиком нагрузки, без лицензии. Они должны использовать общую базу данных PostgreSQL, хранилище файлов S3 и конфигурацию в базе данных (AM_CONFIG). В Системная консоль › Окружение › Высокая доступность (ClusterSettings): включите Включить режим высокой доступности (ClusterSettings.Enable), задайте каждому узлу одинаковое Название кластера (ClusterSettings.ClusterName) и убедитесь, что узлы могут общаться друг с другом через gossip-порт, 8074 TCP и UDP (ClusterSettings.GossipPort). Узлы находят друг друга через базу данных. Балансировщик нагрузки должен передавать веб-сокеты. Для звонков в кластере используйте rtcd.
Срок хранения данных
По умолчанию Antimatter хранит все сообщения и файлы вечно. Чтобы автоматически удалять старые данные, перейдите в Системная консоль › Комплаенс › Политики хранения данных:
- Глобальная политика хранения данных устанавливает Удержание сообщений в каналах и личных сообщениях и Удержание файла для всего сервера: Хранить вечно или указать количество часов, дней или лет (
DataRetentionSettings.EnableMessageDeletion,MessageRetentionHours,EnableFileDeletion,FileRetentionHours). - Настраиваемая политика удержания устанавливает другой срок хранения для выбранных сообществ и каналов.
- Задание по удалению выполняется ежедневно в выбранное вами время (
DataRetentionSettings.DeletionJobStartTime, по умолчанию02:00UTC). Запустить задание по удалению сейчас запускает его немедленно, а Лог политики показывает, что было удалено при каждом запуске.
Экспорт для соответствия требованиям и журналы аудита
- Системная консоль › Комплаенс › Экспорт комплаенса ежедневно экспортирует все сообщения и файлы (Включить экпорт комплаенса,
MessageExportSettings.EnableExport, по умолчанию выключено; Время экспорта комплаенса, по умолчанию01:00) в одном из форматов, поддерживаемых системами архивирования: CSV, Actiance XML или Global Relay (архив zip или EML, отправляемый по SMTP). Командаamctl compliance-exportзапускает экспорт и скачивает файлы из командной строки. - Мониторинг комплаенса (
ComplianceSettings) пишет ежедневные отчеты в каталог. Это более старый механизм; рекомендуется использовать экспорт комплаенса. - Ведение журнала аудита (бета,
ExperimentalAuditSettings) записывает административные и события безопасности (входы, изменения разрешений и параметров) в отдельный файл. - Пользовательские условия предоставления услуг требуют от всех пользователей принять ваши условия перед использованием Antimatter, а также повторно — после их изменения.
Частые проблемы
«Не удаётся подключиться к серверу» или сообщения появляются только после перезагрузки
WebSocket-соединение не устанавливается. Проверьте, что обратный прокси передаёт заголовки Upgrade и Connection (см. пример для nginx), а также что URL сайта в точности совпадает с адресом в браузере, включая https.
Загрузка файлов завершается ошибкой «413 Request Entity Too Large»
Прокси отклоняет размер. Увеличьте его лимит (nginx client_max_body_size) как минимум до значения Максимальный размер файла в Системная консоль › Окружение › Файловое хранилище (FileSettings.MaxFileSize, по умолчанию 100 МБ).
Не удаётся начать звонок или после подключения нет звука
Если звонки могут начинать только администраторы, отключите Тестовый режим для звонков. Если кнопка звонка отсутствует в каналах сообщества, это сообщество типа Сообщество, где звонки по умолчанию выключены: администраторы канала или сообщества могут включить звонки в канале или изменить тип сообщества (см. Где включены звонки). Если люди присоединяются, но не слышат ничего, порт медиа заблокирован или сервер указывает неверный адрес: откройте 8443 UDP и TCP и установите Переопределение ICE Host за NAT. Пользователям в сетях, блокирующих оба протокола, нужен сервер TURN. См. Звонки и голос.
Выборщик GIF пуст
Проверьте URL сервиса GIFs (http://gifs:8080/v2 в compose-файле сайта) и Ключ API (GIFS_API_KEY в .env) в Системная консоль › Плагины › GIFs, а также что сервис 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
Сообщение об ошибке
Создайте issue в репозитории сообщества Antimatter, указав версию, способ установки, выполненные действия и соответствующие строки журнала. Сообщения о проблемах безопасности отправляйте в частном порядке, как описано в политике безопасности.