Monitoramento de aplicações C# (.NET) com OpenTelemetry e Prometheus

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): Guia completo sobre OpenTelemetry e Prometheus



Aplicações .NET modernas exigem observação constante de desempenho, erros e estado. Sem monitoramento, você corre o risco de perder o controle sobre a produção. Neste artigo, vamos abordar como configurar um monitoramento eficaz de aplicações C# (.NET) usando a combinação de OpenTelemetry (coleta de telemetria) e Prometheus + Grafana (visualização e alertas).



Por que OpenTelemetry?

OpenTelemetry (OTel) é o padrão da indústria para coleta de métricas, traces (rastreamento) e logs. Para .NET, ele fornece SDKs oficiais e instrumentação automática de bibliotecas populares (ASP.NET Core, gRPC, Entity Framework).



Instalação e configuração do OpenTelemetry no projeto C#

Adicione os pacotes NuGet ao seu projeto:

dotnet add package OpenTelemetrydotnet add package OpenTelemetry.Extensions.Hostingdotnet add package OpenTelemetry.Instrumentation.AspNetCoredotnet add package OpenTelemetry.Exporter.Prometheus.AspNetCore


Configuração básica no Program.cs

Configure a coleta de métricas e exportação para Prometheus:

using OpenTelemetry.Metrics;using OpenTelemetry.Resources;

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddOpenTelemetry() .ConfigureResource(resource => resource .AddService("MyApp", serviceVersion: "1.0.0")) .WithMetrics(metrics => metrics .AddAspNetCoreInstrumentation() .AddHttpClientInstrumentation() .AddMeter("Microsoft.AspNetCore.Hosting") .AddMeter("Microsoft.AspNetCore.Server.Kestrel") .AddPrometheusExporter());

var app = builder.Build();

// Endpoint para Prometheus (padrão /metrics)app.MapPrometheusScrapingEndpoint();

app.Run();


Criação de métricas personalizadas

Você pode adicionar seus próprios contadores, histogramas e medidores:

using System.Diagnostics.Metrics;

public class OrderMetrics{ private readonly Counter<int> _ordersCreated; private readonly Histogram<double> _orderProcessingTime;

public OrderMetrics(IMeterFactory meterFactory) { var meter = meterFactory.Create("MyApp.Orders"); _ordersCreated = meter.CreateCounter<int>("orders.created", description: "Quantidade de pedidos criados"); _orderProcessingTime = meter.CreateHistogram<double>("orders.processing_time", unit: "ms"); }

public void RecordOrderCreated() => _ordersCreated.Add(1); public void RecordProcessingTime(double ms) => _orderProcessingTime.Record(ms);}


Rastreamento de requisições (Distributed Tracing)

Para rastrear cadeias de chamadas, adicione tracing:

using OpenTelemetry.Trace;

builder.Services.AddOpenTelemetry() .WithTracing(tracing => tracing .AddAspNetCoreInstrumentation() .AddHttpClientInstrumentation() .AddEntityFrameworkCoreInstrumentation() .AddConsoleExporter()); // Para depuração, em produção — Jaeger ou Zipkin


Registro de logs via OpenTelemetry

Conecte o logger ao OTel:

using OpenTelemetry.Logs;

builder.Logging.AddOpenTelemetry(logging => logging .AddConsoleExporter() .AddOtlpExporter(options => options.Endpoint = new Uri("http://localhost:4317")));


Configuração do Prometheus para coleta de métricas

No arquivo prometheus.yml, especifique seu endpoint:

scrape_configs:  - job_name: 'dotnet-app'    scrape_interval: 5s    static_configs:      - targets: ['localhost:5000']  # Porta da sua aplicação


Visualização no Grafana

Após conectar o Prometheus ao Grafana, crie um dashboard com as métricas principais:

Recommendations