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)