运维
监控服务器状态,提升其承载用户的能力,确定数据保留策略,并解决管理员最常遇到的问题。
健康检查
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 文件未发布此端口;若要从主机抓取,请在 antimatter 服务的 ports 中添加 "127.0.0.1:8067:8067"。
Metrics 应用
如果没有 Prometheus 服务器,Metrics 应用(默认关闭,参见内置应用)会将相同的指标收集到 Antimatter 内部的小型时序数据库中:每 60 秒采集一次,保留 15 天。该应用在启动时会开启指标端点。其在系统控制台 › 插件中的页面会显示数据库大小,并允许您下载数据转储文件,用于自行分析或附在错误报告中;最近一天的数据也会包含在支持数据包中。
支持数据包
支持数据包是一个 zip 文件,包含诊断问题所需的信息:版本、统计数据、已移除敏感信息的配置、应用和任务列表、数据库架构、最近的日志以及性能分析文件。您可以使用 amctl system supportpacket 生成,或在系统控制台中通过侧栏顶部的菜单生成(商业支持,之后您可以选择包含的内容)。在共享之前请阅读它:它不包含消息,但包含社区、用户和设置的名称。
性能与扩展
一台拥有 2 个 CPU 核心和 4 GB 内存的服务器可以服务数百人。在添加服务器之前,请查看:
- 数据库。PostgreSQL 承担了大部分工作:请为其提供快速的存储和内存。只读副本可以分担读取负载(
SqlSettings.DataSourceReplicas,一个连接 URL 列表)。 - 搜索。默认情况下,消息在数据库中进行搜索。对于大型服务器,Elasticsearch 或 OpenSearch 可以接管搜索和索引:系统控制台 › 环境 › Elasticsearch(
ElasticsearchSettings:后端类型 Elasticsearch 或 OpenSearch,服务器连接地址,凭据,然后启用索引,构建索引,并启用搜索)。 - 通话。通话媒体是最重的负载。将它们迁移到 rtcd 服务器:参见通话与语音。
- 打开的文件。每个连接的用户都会保持一个 websocket 打开。antimatter-docker 的生产环境 compose 文件将限制提高到 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:00UTC)每天运行一次。现在运行删除任务 可立即执行,而政策日志则列出每次运行所删除的内容。
合规导出与审计日志
- 系统控制台 › 合规 › 合规导出 每天导出所有消息和文件(启动合规导出,
MessageExportSettings.EnableExport,默认关闭;合规导出时间,默认01:00),格式为归档系统可读的 CSV、Actiance XML 或 Global Relay(zip 文件或通过 SMTP 发送的 EML)。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 MB)。
用户无法发起通话,或加入后听不到声音
如果只有管理员可以发起通话,请关闭通话的 测试模式。如果某个频道的通话按钮缺失,说明该社区属于 社区 类型,此类社区默认关闭通话功能:其频道或社区管理员可以在特定频道中开启通话,或更改社区类型(参见 通话开启的位置)。如果用户加入后听不到声音,可能是媒体端口被阻止或服务器通告了错误的地址:请开放 8443 UDP 和 TCP 端口,并在 NAT 之后设置 ICE 主机覆盖。对于同时阻止这两种端口的网络,需要 TURN 服务器。参见 通话与语音。
GIF 选择器为空
在 系统控制台 › 插件 › GIF 图像 中检查 GIF 服务 URL(使用网站的 compose 文件时为 http://gifs:8080/v2)和 API 密钥(.env 中的 GIFS_API_KEY),并确保 gifs 服务正在运行:docker compose ps gifs。
邮件未送达
在 系统控制台 › 环境 › SMTP 中使用 测试连接,检查 来自地址的通知 是否仍为 test@example.com,并在日志中搜索 smtp 或 mail。
应用显示“启动失败”
在日志中查找其 ID(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
报告 Bug
在 Antimatter 社区仓库 中提交 issue,附上版本号、安装方式、操作步骤以及相关的日志行。请按照安全策略的说明,私下报告安全问题。