No cenário moderno de aplicações distribuídas, a observabilidade é um dos pilares mais importantes para garantir estabilidade, performance e confiabilidade. Ao desenvolver APIs com .NET moderno, é fundamental expor métricas que permitam monitorar o comportamento da aplicação em produção.
Uma das ferramentas mais utilizadas para esse propósito é o Prometheus, que coleta métricas em tempo real e oferece suporte à análise e integração com dashboards como o Grafana.
Neste artigo, vamos ver como mapear métricas de uma API .NET utilizando Prometheus.
📌 Por que utilizar Prometheus com .NET?
- 📊 Coleta de métricas em tempo real.
- 🚀 Baixa sobrecarga para aplicações em produção.
- 🔗 Integração fácil com Grafana e outros sistemas de observabilidade.
- ✅ Suporte a alertas customizáveis com base em queries PromQL.
- 🔍 Monitoramento de APIs REST, gRPC, workers e microservices.
⚙️ Preparando o projeto .NET
Primeiro, crie uma API simples com .NET 7+:
dotnet new webapi -n ApiPrometheusDemo
cd ApiPrometheusDemo
Adicione o pacote Prometheus.Net.AspNetCore:
dotnet add package prometheus-net.AspNetCore
🛠️ Configurando métricas na API
No arquivo Program.cs
, configure o middleware do Prometheus:
using Prometheus;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllers();
var app = builder.Build();
app.UseRouting();
// Exposição do endpoint padrão do Prometheus
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
endpoints.MapMetrics(); // expõe /metrics
});
app.Run();
Agora, ao rodar a aplicação, as métricas estarão disponíveis em:
👉 http://localhost:5000/metrics
📡 Criando métricas customizadas
Além das métricas padrão, é possível definir métricas específicas para sua API.
Exemplo: contador de requisições de um endpoint de pedidos:
using Microsoft.AspNetCore.Mvc;
using Prometheus;
namespace ApiPrometheusDemo.Controllers
{
[ApiController]
[Route("[controller]")]
public class OrdersController : ControllerBase
{
private static readonly Counter OrdersCounter =
Metrics.CreateCounter("orders_created_total", "Número total de pedidos criados");
[HttpPost]
public IActionResult CreateOrder()
{
OrdersCounter.Inc(); // Incrementa a métrica
return Ok(new { Message = "Pedido criado com sucesso!" });
}
}
}
Agora, cada chamada a POST /orders
será refletida em orders_created_total
.
🧩 Configurando Prometheus
Crie o arquivo prometheus.yml
:
global:
scrape_interval: 5s
scrape_configs:
- job_name: "dotnet-api"
metrics_path: /metrics
static_configs:
- targets: ["host.docker.internal:5000"]
Inicie o Prometheus via Docker:
docker run -d --name=prometheus -p 9090:9090 -v ./prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus
📊 Visualizando métricas no Grafana
- Configure o Prometheus como Data Source no Grafana.
-
Crie dashboards para acompanhar:
- 🔹 Latência das requisições.
- 🔹 Número de pedidos criados.
- 🔹 Consumo de memória e CPU da API.
✅ Conclusão
Integrar o Prometheus com uma API .NET é uma prática essencial para equipes que desejam garantir observabilidade e confiabilidade em produção. Além das métricas padrão, o poder está em criar métricas customizadas que refletem diretamente o negócio, como número de pedidos, falhas ou tempo médio de resposta.
Combinado ao Grafana, o Prometheus oferece uma visão clara da saúde e do desempenho da aplicação, ajudando a antecipar problemas antes que impactem os usuários.
🤝 Conecte-se Comigo
Se você trabalha com .NET moderno e quer dominar arquitetura, C#, observabilidade, DevOps ou interoperabilidade, vamos conversar:
💼 LinkedIn
✍️ Medium
📬 contato@dopme.io
¹⁰ Não confieis na opressão, nem vos ensoberbeçais na rapina; se as vossas riquezas aumentam, não ponhais nelas o coração.
Salmos 62:10
Top comments (0)