Exploitation

Surveiller le serveur, augmenter sa capacité, définir la durée de conservation des données et résoudre les problèmes les plus fréquents rencontrés par les administrateurs.

Contrôles de santé

  • amctl --local system status (dans le conteneur : docker compose exec antimatter amctl --local system status). Le contrôle de santé de l'image Docker l'exécute toutes les 30 secondes, de sorte que docker compose ps affiche healthy ou unhealthy.
  • GET /api/v4/system/ping répond sans authentification, pour un moniteur externe ou un équilibreur de charge : curl -fsS https://chat.example.com/api/v4/system/ping.
  • antimatter db ping vérifie que la base de données est accessible avec les paramètres configurés.
  • Console système › Rapport › Statistiques du serveur affiche le nombre d'utilisateurs, de messages et de sessions, et Optimisation de l'espace de travail liste les problèmes de configuration à examiner.

Métriques

Le serveur peut publier des métriques Prometheus : taux et durées des requêtes, connexions websocket, utilisation de la base de données et du cache, tâches, hooks de plugins, etc. Activez-les dans Console système › Environnement › Suivi des performances :

ParamètreClé et variableValeur par défaut
Activer le suivi des performances MetricsSettings.Enable, AM_METRICSSETTINGS_ENABLEDésactivé
Adresse IP du serveur MetricsSettings.ListenAddress, AM_METRICSSETTINGS_LISTENADDRESS:8067
Activer la surveillance des performances côté client MetricsSettings.EnableClientMetricsactivé : les navigateurs et les applications signalent leurs propres délais

Prometheus scrape ensuite http://<server>:8067/metrics. Chaque métrique est publiée sous son nom Mattermost (mattermost_…) et son nom Antimatter (antimatter_…), de sorte que les tableaux de bord Mattermost existants continuent de fonctionner. Les applications publient leurs propres métriques, par exemple l'application Agents à /plugins/mattermost-ai/metrics.

Le port des métriques ne nécessite pas d'authentification : gardez-le sur un réseau privé. Le fichier compose du site ne le publie pas ; pour le scraper depuis l'hôte, ajoutez "127.0.0.1:8067:8067" aux ports du service antimatter.

L'application Métriques

Sans serveur Prometheus, l’application Metrics (désactivée par défaut, voir Applications intégrées) collecte les mêmes métriques dans une petite base de données de séries temporelles intégrée à Antimatter : toutes les 60 secondes, conservées pendant 15 jours. Elle active le point de terminaison des métriques au démarrage. Sa page dans Console système › Plugins affiche la taille de la base de données et permet de télécharger des extraits des données, pour votre propre analyse ou à joindre à un rapport de bug ; la dernière journée est également ajoutée aux paquets de support.

Paquet de support

Un paquet de support est un fichier zip contenant tout ce qui est nécessaire pour diagnostiquer un problème : versions, statistiques, la configuration avec ses secrets supprimés, la liste des applications et des tâches, le schéma de la base de données, les journaux récents et les profils de performances. Générez-en un avec amctl system supportpacket, ou dans la Console système depuis le menu en haut de sa barre latérale (Support commercial, ce qui vous permet ensuite de choisir ce que vous souhaitez inclure). Lisez-le avant de le partager : il ne contient pas de messages, mais il contient les noms des communautés, des utilisateurs et des paramètres.

Performances et mise à l’échelle

Un serveur avec 2 cœurs CPU et 4 Go de mémoire peut servir quelques centaines de personnes. Avant d’ajouter des serveurs, examinez :

  • La base de données. PostgreSQL effectue la majeure partie du travail : fournissez-lui un stockage rapide et de la mémoire. Les répliques de lecture peuvent absorber la charge de lecture (SqlSettings.DataSourceReplicas, une liste d’URL de connexion).
  • Recherche. Par défaut, les messages sont recherchés dans la base de données. Pour les grands serveurs, Elasticsearch ou OpenSearch peuvent prendre en charge la recherche et l’indexation : Console système › Environnement › Elasticsearch (ElasticsearchSettings : Type d’arrière-plan Elasticsearch ou OpenSearch, Adresse de connexion du serveur , identifiants, puis activer l’indexation, construire l’index et activer la recherche).
  • Appels. Les médias des appels constituent la charge la plus lourde. Déplacez-les vers un serveur rtcd : voir Appels et voix.
  • Fichiers ouverts. Chaque personne connectée maintient une websocket ouverte. Le fichier de composition de production d’antimatter-docker augmente la limite à 49152 (ulimits: nofile) ; faites de même avec systemd (LimitNOFILE).
  • Journaux. Réduisez LogSettings.ConsoleLevel à INFO ou WARN : les journaux DEBUG génèrent beaucoup de données sur un serveur occupé.

Haute disponibilité

Plusieurs serveurs Antimatter peuvent fonctionner en cluster derrière un équilibreur de charge, sans licence. Ils doivent partager la même base de données PostgreSQL, le même stockage de fichiers S3 et la configuration dans la base de données (AM_CONFIG). Dans Console système › Environnement › Haute disponibilité (ClusterSettings) : activez Activer le mode haute disponibilité (ClusterSettings.Enable), attribuez à chaque nœud le même Nom du cluster (ClusterSettings.ClusterName) et autorisez les nœuds à communiquer entre eux sur le port de gossip, 8074 TCP et UDP (ClusterSettings.GossipPort). Les nœuds se détectent mutuellement via la base de données. L'équilibreur de charge doit transmettre les websockets. Pour les appels en cluster, utilisez rtcd.

Rétention des données

Par défaut, Antimatter conserve tous les messages et fichiers indéfiniment. Pour supprimer automatiquement les anciens, accédez à Console système › Conformité › Politique de rétention des données :

  • La Règle de rétention globale définit la Rétention des canaux et messages personnels et la Rétention des fichiers pour l'ensemble du serveur : Toujours garder, ou une durée en heures, jours ou années (DataRetentionSettings.EnableMessageDeletion, MessageRetentionHours, EnableFileDeletion, FileRetentionHours).
  • Les Règles de rétention personnalisées définissent une durée différente pour des communautés et des canaux spécifiques.
  • La tâche de suppression s'exécute quotidiennement à l'heure de votre choix (DataRetentionSettings.DeletionJobStartTime, 02:00 UTC par défaut). Exécuter la tâche de suppression maintenant la lance immédiatement, et le Journal des règles liste ce que chaque exécution a supprimé.
Les messages et fichiers supprimés sont définitivement effacés de la base de données et du stockage de fichiers. Vérifiez les durées avant d'activer une règle, et rappelez-vous que vos sauvegardes conservent les données supprimées jusqu'à leur expiration.

Export de conformité et journaux d'audit

  • Console système › Conformité › Export de conformité exporte tous les messages et fichiers quotidiennement (Activer l'export de conformité, MessageExportSettings.EnableExport, désactivé par défaut ; Date d'export de conformité, 01:00 par défaut) dans l'un des formats lus par les systèmes d'archivage : CSV, XML Actiance ou Global Relay (fichier zip, ou EML envoyé via SMTP). amctl compliance-export exécute et télécharge les exports depuis la ligne de commande.
  • Contrôle de conformité (ComplianceSettings) génère des rapports quotidiens dans un répertoire. C'est le mécanisme le plus ancien ; préférez l'Export de conformité.
  • Journalisation d’audit (bêta, ExperimentalAuditSettings) enregistre les événements administratifs et de sécurité (connexions, modifications des autorisations et des paramètres) dans un fichier dédié.
  • Conditions d'utilisation personnalisées demande à chacun d'accepter vos conditions avant d'utiliser Antimatter, puis à nouveau après toute modification.

Problèmes courants

« Impossible de se connecter au serveur », ou les messages n'apparaissent qu'après un rechargement

Le websocket ne passe pas. Vérifiez que le proxy inverse transmet les en-têtes Upgrade et Connection (voir l'exemple nginx) et que l'URL du site correspond exactement à l'adresse dans le navigateur, y compris https.

Les envois échouent avec « 413 Request Entity Too Large »

Le proxy refuse la taille. Augmentez sa limite (nginx client_max_body_size) à au moins la Taille maximale de fichier dans Console système › Environnement › Stockage de fichiers (FileSettings.MaxFileSize, 100 Mo par défaut).

Les utilisateurs ne peuvent pas démarrer d'appels, ou les rejoignent mais n'entendent rien

Si seules les personnes disposant des droits d'administration peuvent démarrer des appels, désactivez le Mode test des appels. Si le bouton d'appel est absent dans les canaux d'une communauté, celle-ci est de type Communauté, où les appels sont désactivés par défaut : les administrateurs du canal ou de la communauté peuvent activer les appels dans un canal, ou modifier le type de la communauté (voir Où les appels sont activés). Si les participants rejoignent l'appel mais n'entendent rien, le port média est bloqué ou le serveur annonce une adresse incorrecte : ouvrez le port 8443 UDP et TCP, et configurez Remplacement de l'hôte ICE derrière un NAT. Les personnes sur des réseaux bloquant les deux ont besoin d'un serveur TURN. Voir Appels et audio.

Le sélecteur de GIF est vide

Vérifiez l'URL du service GIF (http://gifs:8080/v2 avec le fichier compose du site) et la Clé API (le GIFS_API_KEY de .env) dans Console système › Plugins › GIF, ainsi que l'exécution du service gifs : docker compose ps gifs.

Aucun e-mail n'arrive

Utilisez Tester la connexion dans Console système › Environnement › SMTP, vérifiez que l'Adresse e-mail d'expéditeur des notifications par e-mail n'est pas encore test@example.com, et recherchez smtp ou mail dans le journal.

Une application affiche « Failed to start »

Recherchez son identifiant dans le journal (docker compose logs antimatter | grep <app id>). Désactivez-la puis activez-la dans la Gestion des plugins pour la redémarrer.

Le serveur ne démarre pas

Lisez la fin de son journal. Le plus souvent, la base de données est inaccessible (vérifiez AM_SQLSETTINGS_DATASOURCE avec antimatter db ping), une migration de base de données a échoué (restaurer la sauvegarde prise avant la mise à niveau et signaler l'erreur), ou le port d'écoute est occupé.

Verrouillé hors du compte administrateur

Depuis le serveur, le mode local ne nécessite aucun mot de passe :

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

Signaler un bug

Ouvrez un ticket dans le dépôt communautaire Antimatter, en précisant la version, la méthode d’installation, les actions effectuées et les lignes de journal pertinentes. Signalez les problèmes de sécurité en privé, comme l’explique la politique de sécurité.