Métricas Prometheus em C# (.NET) — biblioteca prometheus-net
No desenvolvimento moderno de aplicações web e microsserviços na plataforma .NET, o monitoramento e a observability (observabilidade) tornaram-se elementos obrigatórios em ambientes de produção. A biblioteca prometheus-net é a biblioteca cliente oficial para .NET, que permite exportar facilmente as métricas da aplicação em um formato compreensível para o servidor de monitoramento Prometheus.
Com o prometheus-net, você pode coletar dados de desempenho (tempo de resposta, número de requisições, erros, uso de memória) e enviá-los para o Prometheus para posterior visualização no Grafana ou outras ferramentas. A biblioteca suporta tanto versões antigas do .NET Framework (4.6.1+) quanto as modernas .NET Core / .NET 5/6/7/8.
Instalação
A biblioteca pode ser instalada através do NuGet Package Manager ou usando a CLI do .NET:
dotnet add package prometheus-netPara aplicações ASP.NET Core, o pacote prometheus-net.AspNetCore também é necessário:
dotnet add package prometheus-net.AspNetCoreTipos principais de métricas
O Prometheus suporta quatro tipos principais de métricas. No prometheus-net, eles são implementados como fábricas estáticas na classe Metrics:
- Counter — um contador que só pode aumentar (por exemplo, número de requisições processadas).
- Gauge — uma métrica que pode tanto aumentar quanto diminuir (por exemplo, número de conexões ativas ou temperatura atual).
- Histogram — um histograma que conta o número de observações em intervalos definidos (buckets). Usado para medir a distribuição do tempo de resposta ou tamanho dos dados.
- Summary — uma métrica resumida que calcula quantis (p50, p95, p99) com base em um fluxo de observações.
Exemplo de uso do Counter
Vamos criar um contador simples para contar o número de requisições HTTP processadas:
using Prometheus;
// Criamos um contador com nome e descriçãoprivate static readonly Counter RequestCount = Metrics .CreateCounter("myapp_requests_total", "Total number of HTTP requests.");
// No manipulador da requisição, incrementamos o contadorpublic IActionResult Index(){ RequestCount.Inc(); // incrementar em 1 // Ou RequestCount.Inc(5); // incrementar em 5 return View();}Exemplo de uso do Gauge
O Gauge é útil para monitorar o estado atual, por exemplo, o número de usuários ativos:
private static readonly Gauge ActiveUsers = Metrics .CreateGauge("myapp_active_users", "Number of active users.");
// Quando um usuário entraActiveUsers.Inc();
// Quando um usuário saiActiveUsers.Dec();Exemplo de uso do Histogram
O histograma é ideal para medir o tempo de execução das requisições:
private static readonly Histogram RequestDuration = Metrics .CreateHistogram("myapp_request_duration_seconds", "Histogram of request duration.", new HistogramConfiguration { // Configuramos os limites dos buckets Buckets = new[] { 0.1, 0.25, 0.5, 1.0, 2.5 } });
// No middleware ou na ação do controladorusing (RequestDuration.NewTimer()){ // execução da requisição await Next(context);}Integração com ASP.NET Core
Para que seu endpoint /metrics comece a fornecer dados no formato Prometheus, basta adicionar o middleware no Program.cs:
using Prometheus;
var builder = WebApplication.CreateBuilder(args);var app = builder.Build();
// Adicionamos o middleware para coleta de Também na biblioteca
SwiftyJSON para Swift: guia completo com exemplos práticos
Trabalhando com CSV em C# (.NET): bibliotecas e exemplos
Biblioteca Padrão Java (Java Standard Library)
Rate Limiting em JavaScript (Node.js): Guia Completo da Biblioteca express-rate-limit
TBB (Intel Threading Building Blocks) para C++: guia completo com exemplos