Monitoramento de aplicações .NET com Prometheus e OpenTelemetry

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

Monitoramento de aplicações C# (.NET): das métricas aos alertas



As aplicações .NET modernas exigem monitoramento constante de desempenho, disponibilidade e estado dos processos internos. Neste artigo, abordaremos as principais ferramentas para organizar o monitoramento: Prometheus para coleta de métricas, OpenTelemetry para rastreamento e Serilog para registro estruturado de logs. Você aprenderá como implementar observabilidade em sua aplicação C#.



Por que o monitoramento de aplicações .NET é necessário?

A falta de monitoramento transforma a depuração em um jogo de adivinhação. Sem métricas, você não saberá sobre o aumento no tempo de resposta; sem rastreamentos, não encontrará o gargalo na cadeia de chamadas; sem logs, não entenderá a causa do erro. Um monitoramento configurado corretamente permite:

  • Detectar anomalias antes que elas afetem os usuários.
  • Analisar o desempenho de componentes individuais (banco de dados, API, cache).
  • Coletar métricas de negócios (número de pedidos, sessões ativas).
  • Automatizar notificações sobre incidentes.


Ferramentas para monitoramento .NET

Usaremos três componentes principais:

  • Prometheus — sistema de coleta e armazenamento de métricas com a poderosa linguagem de consulta PromQL.
  • OpenTelemetry — padrão para coleta de telemetria (rastreamentos, métricas, logs).
  • Serilog — biblioteca de registro estruturado de logs para .NET.


Passo 1: Instalação e configuração do Prometheus com .NET

Para integrar o Prometheus com C#, use o pacote prometheus-net. Instale-o via NuGet:

dotnet add package prometheus-net

Em seguida, adicione o middleware ao seu Program.cs:

using Prometheus;

var builder = WebApplication.CreateBuilder(args);var app = builder.Build();

// Habilita o endpoint /metrics para o Prometheusapp.UseHttpMetrics();app.MapMetrics();

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

Após iniciar a aplicação, acesse http://localhost:5000/metrics. Você verá métricas padrão: http_requests_total, http_request_duration_seconds e outras.



Passo 2: Criação de métricas personalizadas

Frequentemente, é necessário monitorar indicadores de negócios. Por exemplo, o número de pedidos processados:

using Prometheus;

public class OrderMetrics{ private static readonly Counter OrdersCounter = Metrics .CreateCounter("orders_processed_total", "Total number of processed orders");

public static void RecordOrder() { OrdersCounter.Inc(); }}

// Uso no controller[ApiController][Route("api/orders")]public class OrdersController : ControllerBase{ [HttpPost] public IActionResult CreateOrder() { // ... lógica de criação do pedido OrderMetrics.RecordOrder(); return Ok(); }}

Agora, em /metrics, aparecerá a linha orders_processed_total 1.



Passo 3: Rastreamento com OpenTelemetry

O rastreamento ajuda a entender quanto tempo cada etapa do processamento da requisição leva. Instale os pacotes:

dotnet add package OpenTelemetry.Extensions.Hostingdotnet add package OpenTelemetry.Instrumentation.AspNetCoredotnet add package OpenTelemetry.Exporter.Console

Configure o OpenTelemetry no Program.cs:

using OpenTelemetry.Trace;

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddOpenTelemetry() .WithTracing(tracing => tracing .AddAspNetCoreInstrumentation() .AddConsoleExporter());

var app = builder.Build();app.Run();

Agora, cada requisição HTTP criará automaticamente um rastreamento com informações sobre o tempo de execução. Para export

Recommendations