Centralizando logs com Elastic Stack e .NET – Parte 3 (Elasticsearch)

Nesta terceira parte, aprenderemos como configurar e utilizar a pesquisa de dados do Elasticsearch em aplicações .NET utilizando o package NEST.

Este artigo faz parte da série:

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

Pré-requisitos

  • Visual Studio 2022 (.NET 6.0)
  • Packages: 

Web API

O primeiro passo é criar uma classe (objeto) que representa o registro de logs no Elasticsearch. Para isso, acesse o link abaixo para visualizar os mapeamentos do índice indexlogs criado pelo Serilog:

Dica: Instale a extensão JSONVue no seu navegador Chrome para visualizar as informações do JSON formatadas.

Na guia properties desta URL, vamos pegar apenas alguns campos para representar a classe em C#. Utilize o atributo PropertyName do NEST para informar os nomes das propriedades, conforme o exemplo abaixo:

A classe MetadataViewModel e ProcessViewModel são a representação de algumas propriedades do nó metadata e process do índice:

Em seguida, configure a injeção de dependência do Elasticsearch utilizando o NEST:

Alguns pontos importantes desta configuração:

  • ElasticsearchSettings = Informações de acesso ao Elasticsearch configurados no appsettings.json.
  • DefaultIndex() = Configura o índice padrão para operações com o Elasticsearch (Se nenhum índice for informado em alguma operação, o NEST utiliza o índice default para realizar as ações).
  • BasicAuthentication() = Configura as credenciais de acesso ao Elasticsearch com os dados fornecidos no appsettings.json.
  • EnableApiVersioningHeader() = Para versões do Elasticsearch 8 em diante, é necessário utilizar este método para habilitar o envio de informações sobre a versão do header nas requisições.
  • AddSingleton(client) = Registra a injeção de dependência do Elasticsearch como singleton.

É necessário registrar a configuração do Elasticsearch na API. Para isso, registre o trecho abaixo na classe program.cs:

Em seguida, crie um novo controller com o nome LogController injetando a interface de acesso ao Elasticsearch (IElasticClient) e configure a consulta ao índice conforme o método GetAllLogs() e GetLogsByDate():

Existem muitos outros tipos de consultas, funcionalidades e filtros no Elasticsearch que você pode utilizar com o NEST. Boa parte dessas consultas são abordadas neste repositório genérico.

Esta mesma consulta (GetAllLogs) também pode ser interpretada diretamente no seu navegador, utilizando o conceito de Query DSL (Domain Specific Language) do Elasticsearch:

Testando

Para realizar os testes, execute os dois endpoints GET do controller Log no Swagger e verifique os logs gerados no Elasticsearch:

Caso algum erro ocorra ao consultar a base, uma exceção será gerada para o cliente e este mesmo erro será salvo na base para futuras análises. Por exemplo, foi forçado um erro realizando a consulta em um índice inexistente (conforme a imagem abaixo) e toda informação detalhada capturada no middleware ErrorHandlingMiddleware encontram-se no Elasticsearch:

Finalizando

Consultar registros no Elasticsearch ficou muito mais simples utilizando o package NEST, que desempenha um grande papel em fornecer acesso a pesquisa e recuperação de dados de forma rápida e precisa. Utilizar o Elastic como repositório de logs das aplicações é um ótimo caminho para praticar a observabilidade das aplicações e infraestrutura.

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

2 comentários

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

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

Deixe uma resposta