運用
サーバーの状態を確認し、より多くのユーザーを処理できるようにし、データの保持期間を決定し、管理者が最もよく遭遇する問題を修正します。
ヘルスチェック
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アプリ(デフォルトでは無効。詳細はバンドルアプリシステムコンソール › プラグインのページには、データベースのサイズが表示され、データのダンプをダウンロードして独自の分析やバグレポートへの添付に使用できます。最新1日分のデータはサポートパケットにも含まれます。
サポートパケット
サポートパケットは、問題の診断に必要な情報が含まれたzipファイルです。バージョン、統計情報、シークレットが除去された設定、アプリとジョブのリスト、データベーススキーマ、最近のログ、パフォーマンスプロファイルが含まれます。amctl system supportpacketコマンドで生成するか、システムコンソールのサイドバー上部のメニューから生成できます(商用サポートを選択すると、含める項目を選択できます)。共有する前に内容を確認してください。メッセージは含まれていませんが、コミュニティ、ユーザー、設定の名前は含まれています。
パフォーマンスとスケーリング
CPUコア2個、メモリ4GBの1台のサーバーで、数百人のユーザーを処理できます。サーバーを追加する前に、以下を確認してください:
- データベース。PostgreSQLが大部分の処理を行います。高速なストレージとメモリを確保してください。リードレプリカを使用して読み取り負荷を分散できます(
SqlSettings.DataSourceReplicas、接続URLのリスト)。 - 検索。デフォルトでは、メッセージはデータベース内で検索されます。大規模なサーバーでは、ElasticsearchまたはOpenSearchを使用して検索とインデックス作成を処理できます:システムコンソール › 環境 › Elasticsearch(
ElasticsearchSettings: バックエンドの種別 ElasticsearchまたはOpenSearch、サーバー接続アドレス、認証情報、その後インデックス作成を有効化し、インデックスを構築し、検索を有効化)。 - Calls。通話メディアは最も重い負荷になります。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、デフォルトは UTC02:00)に毎日実行されます。今すぐ削除ジョブを実行するで即座に実行でき、ポリシーログには各実行で削除された内容が記録されます。
コンプライアンスエクスポートと監査ログ
- システムコンソール › コンプライアンス › コンプライアンスエクスポート は、アーカイブシステムが読み取れる形式(CSV、Actiance XML、または Global Relay(zip ファイル、または SMTP 経由で送信される EML))で、すべてのメッセージとファイルを毎日エクスポートします(コンプライアンスエクスポートを有効にする、
MessageExportSettings.EnableExport、デフォルトでは無効;コンプライアンスエクスポート時刻、デフォルトは01:00)。amctl compliance-exportを使用すると、コマンドラインからエクスポートを実行してダウンロードできます。 - コンプライアンスモニタリング(
ComplianceSettings)は、ディレクトリに日報を書き出します。これは古いメカニズムであり、コンプライアンスエクスポートの使用を推奨します。 - 監査ログ(ベータ版、
ExperimentalAuditSettings)は、管理およびセキュリティ関連のイベント(サインイン、権限や設定の変更)を、専用のファイルに記録します。 - カスタム利用規約は、Antimatterを使用する前に、また規約を変更した後に、すべてのユーザーに利用規約への同意を求めます。
よくある問題
「サーバーに接続できません」が表示されるか、リロード後にのみメッセージが表示される
WebSocketが通っていません。リバースプロキシがUpgradeヘッダーとConnectionヘッダーを転送していることを確認してください(nginxの例を参照)。また、サイトURLがブラウザのアドレスと完全に一致していること(httpsを含む)を確認してください。
アップロードが「413 Request Entity Too Large」で失敗する
プロキシがサイズを拒否しています。システムコンソール › 環境 › ファイルストレージの最大ファイルサイズ(FileSettings.MaxFileSize、デフォルト100 MB)以上にプロキシの制限を引き上げてください(nginxの場合はclient_max_body_size)。
通話を開始できないか、参加しても音が聞こえない
管理者以外が通話を開始できない場合は、通話のテストモードをオフにしてください。コミュニティのチャンネルに通話ボタンが表示されない場合は、そのコミュニティはコミュニティタイプであり、通話はデフォルトで無効になっています。そのチャンネルまたはコミュニティの管理者は、チャンネルで通話を有効にしたり、コミュニティのタイプを変更したりできます(通話の有効な場所を参照)。参加しても音が聞こえない場合は、メディアポートがブロックされているか、サーバーが誤ったアドレスを通知している可能性があります。8443 UDP と TCP を開放し、NAT の背後でICE Host Overrideを設定してください。両方がブロックされているネットワーク上のユーザーには 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を検索してください。
アプリに「Failed to start」が表示される
ログでその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
バグの報告
Antimatterコミュニティリポジトリに、バージョン、インストール方法、実行した操作、関連するログ行を添えてIssueを作成してください。セキュリティ上の問題は、セキュリティポリシーに従って非公開で報告してください。