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:
- Centralizando logs com Elastic Stack e .NET – Parte 1 (Docker)
- Centralizando logs com Elastic Stack e .NET – Parte 2 (Serilog)
- Centralizando logs com Elastic Stack e .NET – Parte 3 (Elasticsearch)
- Centralizando logs com Elastic Stack e .NET – Parte 4 (Kibana)
- Centralizando logs com Elastic Stack e .NET – Parte 5 (Elastic APM) – em produção
Para entender melhor quais os benefícios e configurações do Serilog, acesse este artigo.
Pré-requisitos
- Visual Studio 2022 (.NET 6.0)
- Packages:
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 e 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
[…] Centralizando logs com Elastic Stack e .NET – Parte 2 (Serilog) […]
[…] Centralizando logs com Elastic Stack e .NET – Parte 2 (Serilog) […]
[…] Centralizando logs com Elastic Stack e .NET – Parte 2 (Serilog) […]