Операційне обслуговування

Стежте за сервером, забезпечте можливість обслуговувати більше користувачів, визначте, як довго зберігатимуться дані, та усуньте проблеми, з якими адміністратори стикаються найчастіше.

Перевірка стану

  • 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 продовжують працювати. Додатки публікують власні метрики, наприклад, додаток «Агенти» — на /plugins/mattermost-ai/metrics.

Для порту метрик не потрібен вхід: тримайте його в приватній мережі. Файл compose сайту не публікує цей порт; щоб збирати метрики з хоста, додайте "127.0.0.1:8067:8067" до ports служби antimatter.

Додаток «Метрики»

Якщо сервер Prometheus не використовується, додаток Metrics (вимкнено за замовчуванням, див. Вбудовані додатки) збирає ті самі метрики у невелику базу даних часових рядів всередині Antimatter: кожні 60 секунд, зберігає дані 15 днів. При запуску він вмикає метричний endpoint. Його сторінка в Системна консоль › Плагіни показує розмір бази даних і дозволяє завантажити дамп даних для власного аналізу або додавання до звіту про помилку; дані за останній день також додаються до пакетів підтримки.

Пакет підтримки

Пакет підтримки — це 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). Вузли знаходять одне одного через базу даних. Балансировщик навантаження має передавати 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), а також що URL сайту точно збігається з адресою в браузері, включно з https.

Завантаження файлів завершується помилкою «413 Request Entity Too Large»

Проксі відхиляє розмір. Збільште його ліміт (nginx client_max_body_size) щонайменше до значення Максимальний розмір файлу у Системна консоль › Середовище › Файлове Сховище (FileSettings.MaxFileSize, 100 МБ за замовчуванням).

Користувачі не можуть розпочати дзвінки або приєднуються, але нічого не чують

Якщо дзвінки можуть ініціювати лише адміністратори, вимкніть Тестовий режим для дзвінків. Якщо кнопка дзвінка відсутня в каналах спільноти, значить, спільнота належить до типу Спільнота, де дзвінки вимкнено за замовчуванням: адміністратори каналу або спільноти можуть увімкнути дзвінки в каналі або змінити тип спільноти (див. Де дзвінки увімкнені). Якщо люди приєднуються, але нічого не чують, медіапорт заблоковано або сервер повідомляє неправильну адресу: відкрийте 8443 UDP та TCP і встановіть ICE Host Override за NAT. Користувачам у мережах, які блокують обидва протоколи, потрібен сервер TURN. Див. Дзвінки та голос.

Обрання GIF порожнє

Перевірте URL GIF-сервісу (http://gifs:8080/v2 у compose-файлі сайту) та Ключ API (GIFS_API_KEY у .env) у Системна консоль › Плагіни › GIFки, а також що сервіс gifs працює: docker compose ps gifs.

Електронні листи не надходять

Використайте Перевірити з'єднання у Системна консоль › Середовище › SMTP, перевірте, що Сповіщення з адреси не є досі test@example.com, та пошукайте в журналі smtp або mail.

Додаток показує «Не вдалося запустити»

Знайдіть його id у журналі (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 community, вказавши версію, спосіб встановлення, виконані дії та відповідні рядки журналу. Проблеми безпеки повідомляйте приватно, як описано у політиці безпеки.