Essa é uma revisão anterior do documento!
Observabilidade
Observabilidade de software é a capacidade de entender o que está acontecendo internamente em um sistema a partir das informações que ele expõe externamente, como logs, métricas e traces. O objetivo é permitir que engenheiros diagnostiquem problemas, entendam comportamentos e tomem decisões informadas sobre a saúde e o desempenho da aplicação.
Ferramentas Utilizadas
Na engenharia do TCE é utilizado alguns sistemas para gerenciamento de observabilidade dos sistemas.
Monitoramento & Disponibilidade: (Uptime Kuma) https://uptime.tce.go.gov.br/status/applications
Gerenciamento de Logs: (Stack ELK - Elasticsearch, Logstash e Kibana) https://kibana.tce.go.gov.br/app/discover
Métricas: (Sonnar) http://sonnar.tce.go.gov.br/projects
Monitoramento
Uma vez que uma aplicação é desenvolvida, é fundamental aplicarmos o monitoramento para garantir que a aplicação está disponivel e sermos notificados quando algo está indisponivel.
Para criar um monitoramento, devemos criar uma rota na aplicação chamada /health nessa rota o sistema pode verificar a disponibilidade das partes criticas como:
- Banco de Dados
- Acesso a APIs Externas
Caso alguma das partes importantes da aplicação não responda corretamente, a rota deve retornar um erro 500. Esse erro será capturado pelo monitoramento e enviado uma mensagem para o teams do TCE.
Uma vez configurada a rota /health basta criar o monitoramento no uptime:
Quando uma verificação de /health falhar, um alerta é enviado no Teams:
Logs
Os logs das aplicações devem ser enviados para a stack ELK (Elasticsearch, Logstash e Kibana). Inicialmente durante o desenvolvimento é importante utilizar uma bilbioteca de logs gere os arquivos application.log de forma estruturada, um exemplo é o Log4Net para .NET
Uma vez que os logs estão sendo gerados, é necessário criar um agente no servidor que enviará os logs ao logstash para processamento e ingestão no elasticsearch.
Um exemplo dessa configuração em um sistema que usa docker é configurar o gelf no docker-compose:
logging:
driver: "gelf"
options:
gelf-address: "udp://172.17.110.11:12201"
tag: "DOCKER-JSON-LOGS"
Para aplicações .NET podemos configurar o filebeat no IIS seguindo a documentação do elasticsearch https://kibana.tce.go.gov.br/app/home#/tutorial/iisLogs
OBS: Os servidores IIS do TCE já estão configurados com o agente do filebeat, portanto basta salvar os logs da aplicação em um arquivo application.log para que os mesmos sejam enviados do IIS para o ELK
O resultado são os logs enviados para o ELK e possíveis de visualização no Kibana:
https://kibana.tce.go.gov.br/app/discover#/view/80ba9850-7bc9-11ef-8471-bdbdc5553695