Melhores práticas de monitoramento no .NET Core 3.1

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.

Image for post

É 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.

Deixe uma resposta