Dev (Back & Front)ARTIGO

ASP.NET Core: monitoramento de performance em tempo real

Neste artigo, Thiago Adriano apresenta um passo a passo ensinando a monitorar performance em tempo real com .NET Core + InfluxDB e Grafana.

Hoje em dia temos APIs para todos os lados, e em algum ponto precisamos começar a monitorar nossa API em tempo real.

E através deste artigo demonstrarei como faremos isso com .NET Core + InfluxDB e Grafana. Usaremos o InfluxDB e o Grafana através do Docker.

Criando a API

Criar a API é bem simples. Basta criar um novo projeto no Visual Studio e selecionar a opção .NET Core > ASP.NET Core Web Application:

Instalando o Grafana

Para fazer o setup do Grafana através do Docker é muito simples, basta executar a seguinte linha de comando:

bash
docker run -d — name=grafana -p 3000:3000 grafana/grafana

Mais informações podem ser conferidas no site do Grafana.

Instalando o InfluxDB

O procedimento é igual ao do Grafana – basta executar a seguinte linha de comando:

bash
docker run -p 8086:8086 -d -v influxdb:/var/lib/influxdb influxdb

Como podem observar, o Grafana ficou na porta 3000 e o Influx na porta 8086.

Configurando a API

Agora precisamos ir na API e configurar para gravar as métricas no InfluxDB. Portanto, vamos modificar alguns arquivos e instalar pacotes Nuget.

bash
Install-Package App.Metrics.Extensions.Mvc
Install-Package App.Metrics.Formatters.Json
Install-Package App.Metrics.Extensions.Reporting.InfluxDB

Modifique seu arquivo Startup.cs conforme o exemplo abaixo:

public void ConfigureServices(IServiceCollection services)
{
    var database = "appmetricsdemo";
    var uri = new Uri("http://127.0.0.1:8086");

    services.AddMetrics(options =>
        {
            options.WithGlobalTags((globalTags, info) =>
            {
                globalTags.Add("app", info.EntryAssemblyName);
                globalTags.Add("env", "stage");
            });
        })
        .AddHealthChecks()
        .AddReporting(
            factory =>
            {
                factory.AddInfluxDb(
                    new InfluxDBReporterSettings
                    {
                        InfluxDbSettings = new InfluxDBSettings(database, uri),
                        ReportInterval = TimeSpan.FromSeconds(5)
                    });
            })
        .AddMetricsMiddleware(options => options.IgnoredHttpStatusCodes = new[] { 404 });

    services.AddMvc(options => options.AddMetricsResourceFilter());
}

// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory, IApplicationLifetime lifetime)
{
    loggerFactory.AddConsole(Configuration.GetSection("Logging"));
    app.UseMetrics();
    app.UseMetricsReporting(lifetime);
    app.UseMvc();
}

Observe que adicionamos linhas pertinentes à configuração do InfluxDB como, por exemplo:

bash
var database = “appmetricsdemo”;
var uri = new Uri(“http://127.0.0.1:8086");

Portanto, use da forma que configurou.

Configurando o Grafana

Agora vamos acessar o Grafana, http://localhost:3000, usuário e senha padrão é admin/admin, respectivamente.

Agora você precisará configurar um DataSource, onde no nosso caso será o Influx. Abaixo segue um exemplo de configuração:

Note que na URL eu inseri o IP do container Docker onde está rodando o InfluxDB, pois o Grafana também está sendo executado no Docker e os dois estão sendo executados dentro do mesmo network.

Clique em Save & Test e você deverá ver esse resultado:

Agora importaremos o Dashboard para o Grafana:

Aqui nesse site você pode encontrar o arquivo Json para importar para o seu dashboard. Porém, deixarei também a cópia do que utilizei na demo:

Agora vamos executar nossa aplicação. Fique à vontade para adicionar novos Controllers.

Resultado

Endpoints:

Overview:

Detalhe de requisições dos EndPoints

Configurações de filtros do Grafana:

Bom, deu pra ter uma ideia do quão poderosa é essa ferramenta, certo? A ideia é demonstrar como subir esse ambiente e rapidamente configurar sua API.

O projeto utilizado no GitHub encontra-se no link a seguir:

Até a próxima!

Microsoft (MVP), atualmente trabalha como Arquiteto de Software para TV Bandeirantes. Nesses últimos anos, focou nas tecnologias criadas pela Microsoft, mas sempre esteve antenado para as novas tecnologias que estão surgindo no mercado. Em um breve resumo, é uma pessoa apaixonada pelo que faz, tem a sua profissão como hobby.

Ver perfil