Logs, seja lá qual for o seu cargo ou posição na empresa, você precisa de logs para entender sua aplicação, para tomada de decisão do seu negócio, seus custos e performance. É nisso que o monitoramento do .NET Core te ajudará, na transparência e “saúde” das suas aplicações.
Neste artigo vou direto ao ponto, que é exibir exemplos e melhores configurações utilizando o Health Check, Serilog e utilização de ferramentas para o monitoramento e coleta de informações das suas aplicações.
Health Check e Health Check UI
Health Check é um middleware que fornece um endpoint que retorna o status da aplicação. A aplicação é considerada saudável caso retorne o código 200 (OK) para uma solicitação web. Também são fornecidas bibliotecas que nos permite verificar o status de serviços utilizados pela aplicação, como: banco de dados, sistema de mensageria, cache, logging, serviços externos ou mesmo a criação de um health check customizado.
O Health Check UI é uma interface que oferece uma maneira mais fácil de acompanhar o monitoramento do Helth Check, sendo possível enviar uma notificação para o Slack por exemplo, caso encontre algum erro.
A configuração básica para utilizar os dois recursos você confere no código baixo:
Serilog
O Serilog é um nuget package de logs que se conecta ao ILogger padrão da aplicação e com suas próprias implementações. Ele permite que os desenvolvedores registrem os eventos em vários destinos, como console, arquivo, banco de dados (SQL, ElasticSearch, Mongo, etc) e muito mais.
Antes de tudo é necessário instalar o nuget package Serilog.AspNetCore no seu projeto:
dotnet add package Serilog.AspNetCore
Logo depois é preciso configurar o seu program.cs, é por ele que se inicia a aplicação e precisamos pegar todos os logs desde o início.
Nesta configuração temos dois itens importantes, o primeiro é o carregamento do appsettings.json, para caso tenha que configurar o Serilog utilizando algum valor do arquivo de configuração, e o segundo é a linha UseSerilog() onde informamos à nossa aplicação que o Serilog será nosso provedor padrão de logging.
Middleware para coleta de erros
O tratamento de exception global é essencial em todas aplicações, ele garante que um erro seja tratado (ou registrado) antes de exibi-lo ao cliente, evitando expor informações verbosas ou sensíveis.
No exemplo abaixo, um middleware foi criado para retornar a mensagem “Não foi possível processar o pedido” caso ocorra alguma falha:
Para registrar o middleware, basta incluir o código abaixo no método Configure do seu startup.cs
app.UseMiddleware<ErrorHandlingMiddleware>();
Ferramentas de coleta de logs
Com o Serilog é possível utilizar vários conectores para enviar dados, mas aqui vou citar os três mais importantes.
Application Insights: Uma ótima ferramenta visual para monitoramento da aplicação, sendo necessário apenas acompanhar o volume de telemetria registrado, pois acima de uma certa quantidade é cobrado um valor.
Elastic Stack: Um conjunto incrível de ferramentas para implementar a observabilidade das aplicações e ambientes, utilizando o Elasticsearch, Logstash, Kibana e Beats, podendo tanto utilizar em ambiente físico (Docker) ou em cloud com o Elastic Cloud.
Datalust Seq: Com apenas uma imagem Docker é possível criar uma central de logs das aplicação, possibilitando a customização e criação de gráficos.
O exemplo final do código e com mais detalhes de utilização das ferramentas citadas acima você confere no link do meu github abaixo:
https://github.com/hgmauri/sample-log-monitoring/
Dica final
Leia o livro I Heart Logs (50 página), com ele é possível entender melhor a importância dos logs na arquitetura de sistemas.
É possível fazer download gratuitamente deste livro através do link abaixo:
https://www.confluent.io/ebook/i-heart-logs-event-data-stream-processing-and-data-integration/
[Live] – Melhores práticas de monitoramento de aplicações . NET Core
Se quiser aprender mais sobre a importância do monitoramento de aplicações, reveja a live do JunDevelopers Summit 2020 em que participei falando sobre esse assunto.
O conteúdo da minha apresentação inicia em 1h:57.