DEV Community

Cover image for Observabilidade em APIs ASP.NET core
Beatriz813
Beatriz813

Posted on

4 3

Observabilidade em APIs ASP.NET core

Ferramentas utilizadas:

Introdução

Para este tutorial será construído apenas uma API com Asp.net core que contém um controller, ou seja, o foco aqui é sobre como adicionar um coletor de métricas na sua API. Neste tutorial todas as ferramentas serão instaladas localmente sem uso de Docker.

InfluxDB

O InfluxDB é um banco de dados (TSDB) usado para armazenar registros onde a data e hora em que eles foram armazenados são relevantes para algum tipo de análise. Portanto, o InfluxDB é usado para armazenar métricas de servidor, monitoramento de desempenho de aplicativos, dados de rede, dados de sensores, eventos, negociações em um mercado e outros tipos de dados analíticos. Ele possui uma linguagem própria chamada Influx que se utiliza do paradigma funcional e oferece várias funções para manipular e analisar dados.
O InfluxDB pode ser usado com Docker ou instalando o banco de dados na sua máquina. Para instalar o InfluxDB basta baixar o pacote comprimido no site InfluxData e descomprimir na pasta C:\Program Files\InfluxData\, após isso basta abrir o terminal do seu computador e rodar o binário do banco de dados.

  cd "C:\Program Files\InfluxData\"
  ./influxd
Enter fullscreen mode Exit fullscreen mode

Após isso você consegue acessar a UI do influxDB que fica por padrão no endereço http://localhost:8086

Grafana

O grafana é uma aplicação de código aberto onde é possível criar dashboards que refletem os dados que estão armazenados em alguma fonte de dados que você especifica. Ele pode ser usado de duas formas: como container Docker ou instalado localmente. Para instalar basta entrar no site do Grafana e selecionar o seu sistema operacional. Se você estiver no windows baixe o arquivo .msi e siga o instalador. Após finalizar a instalação o servidor do grafana ja estará rodando na porta 3000 http://localhost:3000.

API Asp.Net Core 3.1

Aqui será usado Visual Studio 2019. Crie uma API Asp.Net Core 3.1 com os seguintes passos:

  • Selecione a opção Criar um projeto
  • Selecione o projeto Aplicativo Web ASP.NET Core e dê o nome que desejar

Após essa criação adicione o seguinte pacote prometheus-net.AspNetCore
Se você não sabe instalar um pacote, segue as instruções:

  • Selecione a opção Ferramentas > Gerenciador de pacotes do NuGet > Gerenciar pacotes do NuGet para a Solução
  • Na janela que irá abrir selecione a aba Procurar e digite o nome do pacote.
  • Após encontrar o pacote selecione ele e instale na sua solução.

image

Após fazer isso basta você adicionar o middleWare do prometheus para expor as metricas da sua API no endpoint /metrics. O app.UseHttpMetrics() deve ser posto após app.UseRouting().

  public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
  {
     ...
     app.UseRouting();
     app.UseHttpMetrics();

     app.UseEndpoints(endpoints =>
      {
          endpoints.MapControllers();
          endpoints.MapMetrics();
      });
  }  
Enter fullscreen mode Exit fullscreen mode

Quando você rodar a sua API e consultar o endpoint /metrics verá o seguinte resultado:

image

Salvando as métricas no InfluxDB

O InfluxDB tem os buckets que são onde as métricas são armazenadas, porém com Asp.net core você só tem ferramentas/pacotes que te possibilitam escrever e consultar esse bucket, não tem um pacote que colete e insira os dados diretamente no bucket. Para isso o InfluxDB também oferece os scrapers que são coletores que buscam dados de um endpoint informado por você que expõe as métricas no padrão de escrita Prometheus. Esses Scrapers ficam varrendo o endpoint que você informou e guarda os dados que encontra no bucket informado por você.
Para utilizar o Scrapper você precisa:

  • Criar um Bucket
  • Criar um Scraper

Se você não souber como criar assista o video. Criando buckets e scrapers

Vale ressaltar que na opção "Target URL" para criar o scraper você deve informar o endpoint de métricas da sua API.
Após isso, quando você rodar a sua API e começar a fazer requisições para ela os dados serão inseridos nos buckets, e você vai poder visualizar que eles estão sendo salvos através da opção Explore na interface gráfica do InfluxDB http://localhost:8086.

image

Criando Dashboard no Grafana

Depois de ter instalado o grafana você deve acessar o endereço http://localhost:3000, fazer login e começar os preparativos para visualizar os seus dados que estão armazenados no InfluxDB. Para isso você deve:

  • Adicionar a fonte de dados do InfluxDB
  • Criar o Dashboard de forma que cada quadro represente uma query ao Bucket

Assista o vídeo para saber como fazer os dois passos anteriores.

Se você não conhece a forma de escrita com Influx e não tem intimidade com ela você pode utilizar o construtor de query (Query Builder), selecionar os parâmetros que você quer visualizar e depois copiar o script gerado em Script Editor (Esse procedimento é mostrado no vídeo sugerido logo acima).
Uma informação que acho relevante citar aqui é: você pode verificar os tipos de dados disponibilizados pela ferramenta prometheus-net.AspNetCore olhando o seu endpoint /metrics. Cada métrica tem um breve resumo com a sua descrição (#HELP) e tipo (#TYPE).

exemplo de métricas

Saber o tipo de informação disponibilizada te ajudará a escolher o tipo de gráfico correto para a sua visualização.

Com o prometheus-dotnet você também pode criar suas próprias métricas, em um próximo tutorial demonstrarei como pode ser feito!

Postmark Image

Speedy emails, satisfied customers

Are delayed transactional emails costing you user satisfaction? Postmark delivers your emails almost instantly, keeping your customers happy and connected.

Sign up

Top comments (0)

Billboard image

The Next Generation Developer Platform

Coherence is the first Platform-as-a-Service you can control. Unlike "black-box" platforms that are opinionated about the infra you can deploy, Coherence is powered by CNC, the open-source IaC framework, which offers limitless customization.

Learn more

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay