Existem algumas ferramentas e alertas de erros que devem ser observados regularmente.
Alguns desses alertas/logs dizem respeito ao estado dos servidores em si (problemas de devops), e outros dizem respeito a logs de aplicação (problemas de dev).
ALERTAS DIGITALOCEAN
Alguns alertas estão configurados no nível da DigitalOcean (obviamente, se for usado outro fornecedor de servidores, depende de ter esse recurso disponível por lá).
São gerados e-mails de alerta sempre que acontece o seguinte:
- CPU de um servidor está acima de 70% por mais de 5 minutos;
- Uso de disco está acima de 80%.
Novos alertas (e quem recebe os alertas) podem ser configurados na interface da DigitalOcean, menu Monitoring.
Esses alertas são automáticos para "todos os Droplets", não é necessária nenhuma configuração quando forem criados novos servidores.
LOGS DE ERRO
Agent
Todos os servidores têm um agent que monitora arquivos com o padrão /root/docker/**/logs/.log. Quando arquivos nesse padrão são alterados, esse agent faz um forward desse log via MQTT para um servidor centralizado da Iongrade (logger_centralizer) pra facilitar a busca.
Esse agent é instalado automaticamente nos servidores, e o status pode ser visto da seguinte forma:
systemctl status iongrade_log_aggregator.service
Os logs não são excluídos do servidor aonde eles foram gerados -- eles ficam duplicados de propósito (o local "centralizado" é apenas pra facilitar a busca/análise).
logger_centralizer
O serviço que recebe e centraliza os logs fica no diacetyl, e os logs podem ser vistos no arquivo /root/docker/logger_centralizer/logs/logs.json.
Para analisar os logs, é recomendável baixar o arquivo para sua máquina.
Telegram
Quando um novo log é recebido pelo logger_centralizer, existe um serviço que faz o forward do log recebido para um bot no Telegram. É conveniente ficar de olho nas mensagens desse bot pra ver se tem algo estranho acontecendo.
Esse serviço de forward fica no diacetyl e seu status pode ser visto da seguinte forma:
systemctl status iongrade_log_aggregator_telegram.service
ANÁLISE DE ERROS
Os alertas "de servidor" são absolutamente prioritários e devem ser acompanhados de perto.
Em geral, picos de CPU "têm um bom motivo pra acontecer" (estamos fazendo uma manutenção no servidor, por exemplo) ou se resolvem sozinhos em pouco tempo. Em casos extremos, é necessário conectar no servidor e usar um htop pra ver qual processo está consumindo recursos, e eventualmente encerrá-lo. A análise é caso a caso.
Alertas de uso excessivo de disco indicam "problemas futuros". Vide artigo ACCINFRA-A-2.
Logs de aplicação (que são enviados pelo Telegram) são interessantes ferramentas para dev pra pegar problemas/situações em produção, e é interessante criar uma espécie de "banco de dados de erros" pois muitos serão repetidos.
Entre os logs mais comuns, temos:
| ERRO | DESCRIÇÃO | GRAVIDADE |
|---|---|---|
| Erro ao conectar com DB/MQTT | Ocorre geralmente durante processo de atualização | Geralmente, nenhuma |
| Erro de validação | Alguma validação de campo falhou no back-end | Geralmente, nenhuma, mas é bom investigar se houve falhar de validação no front-end |
| Erro ao salvar objeto no DB | Um INSERT/UPDATE falhou, geralmente por conta de caracteres inválidos | Avaliar caso a caso, porque pode indicar algum problema com queries. |
| Tradução faltante | Algum tag não foi encontrado no dicionário, e o cliente acabou "vendo a tag bruta" | Pequena. Nada parou, mas alguma coisa "escapou" no dicionário e precisa ser acertado. |