Operações

Monitore o servidor, permita que ele atenda mais pessoas, defina por quanto tempo os dados serão mantidos e resolva os problemas com que os administradores mais se deparam.

Verificações de integridade

  • amctl --local system status (no container: docker compose exec antimatter amctl --local system status). A verificação de integridade da imagem Docker executa esse comando a cada 30 segundos, de modo que docker compose ps exibe healthy ou unhealthy.
  • GET /api/v4/system/ping responde sem exigir login, para um monitor externo ou um balanceador de carga: curl -fsS https://chat.example.com/api/v4/system/ping.
  • antimatter db ping verifica se o banco de dados está acessível com as configurações definidas.
  • Console do Sistema › Reportando › Estatísticas do Sistema exibe o número de usuários, publicações e sessões, e Otimização do Espaço de Trabalho lista problemas de configuração que devem ser verificados.

Métricas

O servidor pode publicar métricas do Prometheus: taxas e durações de requisições, conexões websocket, uso do banco de dados e da cache, jobs, hooks de plugins e mais. Ative-as em Console do Sistema › Ambiente › Monitoramento de Performance:

ConfiguraçãoChave e variávelPadrão
Ativar Monitoramento de PerformanceMetricsSettings.Enable, AM_METRICSSETTINGS_ENABLEdesativado
Endereço à EscutarMetricsSettings.ListenAddress, AM_METRICSSETTINGS_LISTENADDRESS:8067
Ativar o monitoramento do desempenho do clienteMetricsSettings.EnableClientMetricsativado: navegadores e aplicativos relatam seus próprios tempos de resposta

O Prometheus então coleta dados de http://<server>:8067/metrics. Cada métrica é publicada com seu nome do Mattermost (mattermost_…) e seu nome do Antimatter (antimatter_…), de modo que os painéis existentes do Mattermost continuam funcionando. Os aplicativos publicam suas próprias métricas, por exemplo, o app de Agentes em /plugins/mattermost-ai/metrics.

A porta de métricas não exige login: mantenha-a em uma rede privada. O arquivo compose do site não a publica; para coletá-la do host, adicione "127.0.0.1:8067:8067" aos ports do serviço antimatter.

O app de Métricas

Sem um servidor Prometheus, o app de Métricas (desativado por padrão, veja Apps incluídos) coleta as mesmas métricas em um pequeno banco de dados de séries temporais dentro do Antimatter: a cada 60 segundos, com retenção de 15 dias. Ele ativa o endpoint de métricas ao iniciar. A página dele no Console do Sistema › Plugins mostra o tamanho do banco de dados e permite baixar cópias dos dados, para sua própria análise ou para anexar a um relatório de bug; o dia mais recente também é incluído nos pacotes de suporte.

Pacote de suporte

Um pacote de suporte é um arquivo zip com o necessário para diagnosticar um problema: versões, estatísticas, a configuração com seus segredos removidos, a lista de apps e jobs, o esquema do banco de dados, o log recente e os perfis de desempenho. Gere um com amctl system supportpacket, ou no Console do Sistema pelo menu no topo da barra lateral (Suporte Comercial, que então permite escolher o que incluir). Leia-o antes de compartilhá-lo: ele não contém mensagens, mas contém nomes de comunidades, usuários e configurações.

Desempenho e escalabilidade

Um servidor com 2 núcleos de CPU e 4 GB de memória atende algumas centenas de pessoas. Antes de adicionar servidores, verifique:

  • O banco de dados. O PostgreSQL faz a maior parte do trabalho: forneça armazenamento rápido e memória. Réplicas de leitura podem assumir a carga de leitura (SqlSettings.DataSourceReplicas, uma lista de URLs de conexão).
  • Pesquisa. As mensagens são pesquisadas no banco de dados por padrão. Para servidores grandes, o Elasticsearch ou OpenSearch pode assumir a pesquisa e a indexação: Console do Sistema › Ambiente › Elasticsearch (ElasticsearchSettings: Tipo de back-end Elasticsearch ou OpenSearch, Endereço de Conexão do servidor, credenciais, depois ativar a indexação, construir o índice e ativar a pesquisa).
  • Chamadas. A mídia das chamadas é a carga mais pesada. Mova-a para um servidor rtcd: veja Chamadas e voz.
  • Arquivos abertos. Cada pessoa conectada mantém um websocket aberto. O arquivo compose de produção do antimatter-docker aumenta o limite para 49152 (ulimits: nofile); faça o mesmo com o systemd (LimitNOFILE).
  • Logs. Reduza LogSettings.ConsoleLevel para INFO ou WARN: DEBUG gera muitos logs em um servidor ocupado.

Alta disponibilidade

Vários servidores Antimatter podem ser executados como um cluster atrás de um balanceador de carga, sem a necessidade de uma licença. Eles devem compartilhar o mesmo banco de dados PostgreSQL, o mesmo armazenamento de arquivos S3 e a configuração no banco de dados (AM_CONFIG). Em Console do Sistema › Ambiente › Alta Disponibilidade (ClusterSettings): ative Ativar modo Alta Disponibilidade (ClusterSettings.Enable), atribua a todos os nós o mesmo Nome do Cluster (ClusterSettings.ClusterName) e permita que os nós se comuniquem pela porta de gossip, 8074 TCP e UDP (ClusterSettings.GossipPort). Os nós se encontram por meio do banco de dados. O balanceador de carga deve transmitir websockets. Para chamadas em um cluster, use rtcd.

Retenção de dados

Por padrão, o Antimatter mantém todas as mensagens e arquivos para sempre. Para excluir automaticamente os antigos, acesse Console do Sistema › Conformidade › Políticas de Retenção de Dados:

  • A Política Global de Retenção define a Retenção de canais e mensagens diretas e a Retenção de arquivo para todo o servidor: Mantenha para sempre, ou um número de horas, dias ou anos (DataRetentionSettings.EnableMessageDeletion, MessageRetentionHours, EnableFileDeletion, FileRetentionHours).
  • As Políticas de retenção personalizadas definem uma duração diferente para comunidades e canais selecionados.
  • O job de exclusão é executado diariamente no horário que você escolher (DataRetentionSettings.DeletionJobStartTime, padrão 02:00 UTC). Executa Job de Exclusão Agora o executa imediatamente, e o Registro de política lista o que cada execução removeu.
Mensagens e arquivos excluídos são removidos definitivamente, do banco de dados e do armazenamento de arquivos. Verifique as durações antes de ativar uma política e lembre-se de que seus backups ainda contêm os dados excluídos até que expirem.

Exportação de conformidade e logs de auditoria

  • Console do Sistema › Conformidade › Exportação de Conformidade exporta todas as mensagens e arquivos diariamente (Habilitar Exportação de Conformidade, MessageExportSettings.EnableExport, desativado por padrão; Hora Exportação de Conformidade, padrão 01:00) em um dos formatos lidos por sistemas de arquivamento: CSV, Actiance XML ou Global Relay (um arquivo zip, ou EML enviado via SMTP). amctl compliance-export executa e baixa exportações pela linha de comando.
  • Monitoramento de Conformidade (ComplianceSettings) gera relatórios diários em um diretório. É o mecanismo mais antigo; prefira a Exportação de Conformidade.
  • Registro de Auditoria (beta, ExperimentalAuditSettings) registra eventos administrativos e de segurança (logins, alterações de permissões e configurações) em um arquivo próprio.
  • Termos de Serviço Personalizado (Beta) solicita que todos aceitem seus termos antes de usar o Antimatter, e novamente após você alterá-los.

Problemas comuns

"Não é possível conectar ao servidor", ou as mensagens só aparecem após uma recarga

O websocket não está passando. Verifique se o proxy reverso transmite os cabeçalhos Upgrade e Connection (veja o exemplo do nginx) e se a URL do site corresponde exatamente ao endereço no navegador, incluindo https.

Envios falham com "413 Request Entity Too Large"

O proxy recusa o tamanho. Aumente seu limite (nginx client_max_body_size) para pelo menos Tamanho Máximo do Arquivo em Console do Sistema › Ambiente › Armazenamento de Arquivo (FileSettings.MaxFileSize, 100 MB por padrão).

As pessoas não conseguem iniciar chamadas, ou entram, mas não ouvem nada

Se apenas administradores podem iniciar chamadas, desative o Modo de teste das Chamadas. Se o botão de chamada não estiver presente nos canais de uma comunidade, a comunidade é do tipo Comunidade, onde as chamadas estão desativadas por padrão: os administradores do canal ou da comunidade podem ativar as chamadas em um canal ou alterar o tipo da comunidade (veja Onde as chamadas estão ativadas). Se as pessoas entram, mas não ouvem nada, a porta de mídia está bloqueada ou o servidor anuncia o endereço incorreto: abra as portas 8443 UDP e TCP e configure o Substituição do Host ICE atrás de NAT. Pessoas em redes que bloqueiam ambas precisam de um servidor TURN. Veja Chamadas e voz.

O seletor de GIFs está vazio

Verifique URL do serviço de GIFs (http://gifs:8080/v2 com o arquivo compose do site) e Chave de API (o GIFS_API_KEY do .env) em Console do Sistema › Plugins › GIFs, e se o serviço gifs está em execução: docker compose ps gifs.

Nenhum e-mail chega

Use Testar Conexão em Console do Sistema › Ambiente › SMTP, verifique se Notificação a Partir do Endereço não é ainda test@example.com, e pesquise no log por smtp ou mail.

Um aplicativo exibe "Falha ao iniciar"

Procure seu id no log (docker compose logs antimatter | grep <app id>). Desative e ative-o no Gerenciamento de Plugins para reiniciá-lo.

O servidor não inicia

Leia o final do log. Mais frequentemente, o banco de dados é inacessível (verifique AM_SQLSETTINGS_DATASOURCE com antimatter db ping), uma migração do banco de dados falhou (restaure o backup feito antes da atualização e reporte o erro), ou a porta de escuta está ocupada.

Bloqueado da conta de administrador

A partir do servidor, o modo local não requer senha:

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

Reportar um bug

Abra uma issue no repositório da comunidade do Antimatter, informando a versão, como você instalou, o que você fez e as linhas relevantes do log. Relate problemas de segurança de forma privada, conforme explicado na política de segurança.