Centralizando logs com Elastic Stack e .NET – Parte 2 (Serilog)

Nesta segunda parte, aprenderemos como configurar e utilizar o Serilog enviando os logs das aplicações para o Elasticsearch.

Este artigo faz parte da série:

Para entender melhor quais os benefícios e configurações do Serilog, acesse este artigo.

Pré-requisitos

Web API

O primeiro passo é configurar o acesso ao Elasticsearch no arquivo appsettings.json:

Na classe program.cs da API, configure conforme o código abaixo:

O método AddSerilog() contém o seguinte código:

Alguns pontos importantes desta configuração:

  • WithCorrelationId() = Complementa os logs com um ID de correlação para rastrear as solicitações (É necessário registrar o AddHttpContextAccessor() na classe program).
  • WithExceptionDetails() = Complementa os logs em caso de erros, registrando detalhes da exceção e propriedades personalizadas que não são geradas em Exception.ToString().
  • WriteTo.Async() = Responsável por reduzir a sobrecarga de chamadas de log, delegando trabalho a um thread em segundo plano, trazendo performance para a aplicação.
  • WriteTo.Elasticsearch() = Configuração do envio de logs para o banco Elasticsearch. Para versões do Elasticsearch 8 em diante, é necessário configurar o TypeName como null e AutoRegisterTemplate como true, além de registrar o CustomFormatter como EcsTextFormatter.
  • WriteTo.Console() = Configuração de envio de logs para o console. (O mesmo log gerado para o Elasticsearch também é enviado para o console).
  • Logging.ClearProviders() = Remove todos provedores de logs do .NET.
  • Host.UseSerilog() = Registra o provedor de logs do .NET utilizando o Serilog por padrão.

O método UseSerilog() é responsável por registrar os middlewares ErrorHandlingMiddleware e UseSerilogRequestLogging.

ErrorHandlingMiddleware é o middleware responsável por capturar toda exceção não tratada pela aplicação, registrando no Serilog e tratando o retorno da requisição.

Já o UseSerilogRequestLogging registra a extensão LogEnricherExtensions, que é responsável por obter mais informações detalhadas da requisição, enriquecendo os logs com detalhes personalizados:

O último passo é configurar o controller de nome ClientController para testes:

Testando

Para realizar os testes, execute o endpoint POST GET no Swagger para a geração de registros de logs no Elasticsearch (Lembre de executar o docker compose para habilitar o acesso ao Elasticsearch).

Repare que todos os logs estão sendo gerados no console:

Todos esses logs também são salvos no índice do Elasticsearch de nome “indexlogs” (Conforme configurado no appsettings.json) e podem ser visualizados acessando a URL:

Aprenderemos mais sobre a administração e visualização dos logs utilizando o Kibana nos próximos artigos.

Finalizando

Registrar logs altamente detalhados de uma aplicação .NET ficou muito mais simples com o Elasticsearch. Neste artigo, aprendemos como configurar uma solução de registros estruturados e escalável para suas aplicações .NET utilizando o Serilog, que faz um excelente trabalho adicionando opções de templates e plugins que o tornam ainda mais poderoso e performático.

Os detalhes completo desta série você encontra no meu GitHub: https://github.com/hgmauri/sample-observability

2 comentários

  1. […] Centralizando logs com Elastic Stack e .NET – Parte 2 (Serilog) […]

  2. […] Centralizando logs com Elastic Stack e .NET – Parte 2 (Serilog) […]

Deixe uma resposta