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:
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:
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.
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:
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!