Monitoramento de aplicações C# (.NET) com AppMetrics

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Biblioteca AppMetrics para monitoramento de aplicações C# (.NET)



No desenvolvimento de aplicações .NET modernas, é fundamental monitorar seu estado, desempenho e identificar gargalos. A biblioteca AppMetrics é uma ferramenta poderosa e flexível para coletar, agregar e exportar métricas em tempo real. Ela permite que desenvolvedores e administradores obtenham uma visão completa do funcionamento do serviço: desde o tempo de execução das requisições até a taxa de erros.



O AppMetrics suporta diversos backends para armazenamento de métricas: Prometheus, InfluxDB, Graphite, Elasticsearch e outros. Graças aos Health Checks integrados, você pode não apenas coletar estatísticas, mas também verificar a disponibilidade de dependências (bancos de dados, APIs externas).



Principais funcionalidades

  • Contadores (Counters) — número de requisições, erros, eventos.
  • Histogramas (Histograms) — distribuição do tempo de execução das operações.
  • Temporizadores (Timers) — medição da duração da execução do código.
  • Medidores (Meters) — taxa de eventos por segundo.
  • Health Checks — verificação da disponibilidade de serviços externos.
  • Exportação de métricas — para Prometheus (formato /metrics), InfluxDB e outros.


Instalação e configuração

Instale o pacote via NuGet:

dotnet add package AppMetrics.AspNetCore.Mvcdotnet add package AppMetrics.Reporting.Prometheus.Client


Em seguida, adicione os serviços no Program.cs (ou Startup.cs):

using App.Metrics;using App.Metrics.AspNetCore;using App.Metrics.Formatters.Prometheus;

var builder = WebApplication.CreateBuilder(args);

// Configuração das métricasvar metrics = AppMetrics.CreateDefaultBuilder() .OutputMetrics.AsPrometheusPlainText() .Build();

builder.Services.AddMetrics(metrics);builder.Services.AddMetricsTrackingMiddleware();builder.Services.AddMetricsEndpoints();

var app = builder.Build();

app.UseMetricsAllMiddleware();app.UseMetricsAllEndpoints();

app.MapGet("/", () => "Hello World!");

app.Run();


Após iniciar a aplicação, as métricas estarão disponíveis no endereço /metrics no formato Prometheus.



Criação de métricas personalizadas

Defina uma classe para armazenar as métricas:

public class MyMetrics{    private readonly IMetrics _metrics;

public MyMetrics(IMetrics metrics) { _metrics = metrics; }

// Contador de requisições private readonly CounterOptions _requestCounter = new CounterOptions { Name = "myapp_requests_total", MeasurementUnit = Unit.Requests };

// Temporizador para medir o tempo de execução private readonly TimerOptions _requestTimer = new TimerOptions { Name = "myapp_request_duration_seconds", MeasurementUnit = Unit.Requests, DurationUnit = TimeUnit.Seconds };

public void TrackRequest() { _metrics.Measure.Counter.Increment(_requestCounter); }

public IDisposable MeasureRequestDuration() { return _metrics.Measure.Timer.Time(_requestTimer); }}


Utilize as métricas nos controladores:

[ApiController][Route("api/[controller]")]public class SampleController : ControllerBase{    private readonly MyMetrics _myMetrics;

public SampleController(MyMetrics myMetrics) { _myMetrics = myMetrics; }

[HttpGet] public IActionResult Get() { _myMetrics.TrackRequest();

using (_myMetrics.MeasureRequestDuration()) { // Simulação de trabalho Thread.Sleep(100); }

return Ok("Metrics tracked"); }}


Health Checks

Recommendations