Métricas Prometheus em C# (.NET): integração e configuração

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

Métricas Prometheus em C# (.NET): guia completo de integração



Prometheus é um sistema de monitoramento de código aberto que coleta e armazena métricas na forma de séries temporais. Para desenvolvedores em C# (.NET), a integração com Prometheus abre a possibilidade de acompanhar o desempenho das aplicações, indicadores de negócio e o estado do sistema em tempo real. Neste artigo, vamos abordar como conectar o Prometheus a uma aplicação .NET, quais bibliotecas usar e como configurar métricas corretamente.



Por que usar métricas Prometheus no .NET?

O monitoramento com Prometheus permite:

  • Acompanhar o número de requisições, erros e tempo de resposta.
  • Coletar métricas de desempenho (CPU, memória, GC).
  • Criar métricas de negócio personalizadas (usuários ativos, pedidos).
  • Integrar com Grafana para visualização de dashboards.
  • Configurar alertas com base em valores limite.


Biblioteca prometheus-net

A principal biblioteca para trabalhar com Prometheus no .NET é prometheus-net. Ela suporta ASP.NET Core, .NET Core, .NET Framework e gRPC. Instalação via NuGet:

dotnet add package prometheus-net

Para ASP.NET Core, instale adicionalmente:

dotnet add package prometheus-net.AspNetCore


Tipos de métricas no Prometheus

A biblioteca suporta todos os tipos padrão de métricas:

  • Counter — contador que apenas aumenta (número de requisições).
  • Gauge — valor que pode aumentar e diminuir (temperatura atual).
  • Histogram — histograma para medir a distribuição de valores (tempo de resposta).
  • Summary — quantis para agregação de dados (p95, p99).


Exemplo: Counter básico

Vamos criar uma métrica que conta o número de requisições a um endpoint:

using Prometheus;

public class MetricsService{ private static readonly Counter RequestCount = Metrics .CreateCounter("app_requests_total", "Total number of requests", new CounterConfiguration { LabelNames = new[] { "method", "endpoint" } });

public void RecordRequest(string method, string endpoint) { RequestCount.WithLabels(method, endpoint).Inc(); }}

No controller ASP.NET Core, a chamada ficará assim:

[ApiController][Route("api/order")]public class OrderController : ControllerBase{    private readonly MetricsService _metrics;

public OrderController(MetricsService metrics) => _metrics = metrics;

[HttpGet] public IActionResult GetOrders() { _metrics.RecordRequest("GET", "/api/order"); return Ok(new { orders = new[] { "order1", "order2" } }); }}


Exemplo: Gauge para usuários ativos

private static readonly Gauge ActiveUsers = Metrics    .CreateGauge("app_active_users", "Number of active users");

public void UserLoggedIn() => ActiveUsers.Inc();public void UserLoggedOut() => ActiveUsers.Dec();


Exemplo: Histogram para tempo de resposta

private static readonly Histogram RequestDuration = Metrics    .CreateHistogram("app_request_duration_seconds", "Request duration in seconds",        new HistogramConfiguration        {            Buckets = Histogram.ExponentialBuckets(0.001, 2, 10) // de 1ms até ~1s        });

public void RecordRequestDuration(double seconds){ RequestDuration.Observe(seconds);}


Exportação de métricas no ASP.NET Core

Para que o Prometheus possa coletar métricas, é necessário adicionar o endpoint /metrics. No Program.cs:

using Prometheus;

var builder = WebApplication.CreateBuilder(args);builder.Services.AddCont

Recommendations