Monitoreo de aplicaciones C# (.NET) con OpenTelemetry y Prometheus

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Monitoreo de aplicaciones C# (.NET): Guía completa de OpenTelemetry y Prometheus



Las aplicaciones .NET modernas requieren una supervisión constante del rendimiento, errores y estado. Sin monitoreo, corres el riesgo de perder el control sobre la producción. En este artículo, analizaremos cómo configurar un monitoreo eficaz de aplicaciones C# (.NET) utilizando la combinación de OpenTelemetry (recolección de telemetría) y Prometheus + Grafana (visualización y alertas).



¿Por qué OpenTelemetry?

OpenTelemetry (OTel) es el estándar de la industria para la recolección de métricas, trazas (trazabilidad) y logs. Para .NET, proporciona SDK oficiales e instrumentación automática de bibliotecas populares (ASP.NET Core, gRPC, Entity Framework).



Instalación y configuración de OpenTelemetry en un proyecto C#

Agregue los paquetes NuGet a su proyecto:

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


Configuración básica en Program.cs

Configure la recolección de métricas y la exportación a 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 (por defecto /metrics)app.MapPrometheusScrapingEndpoint();

app.Run();


Creación de métricas personalizadas

Puede agregar sus propios contadores, histogramas y 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: "Cantidad de pedidos creados"); _orderProcessingTime = meter.CreateHistogram<double>("orders.processing_time", unit: "ms"); }

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


Trazado de solicitudes (Distributed Tracing)

Para rastrear cadenas de llamadas, agregue trazabilidad:

using OpenTelemetry.Trace;

builder.Services.AddOpenTelemetry() .WithTracing(tracing => tracing .AddAspNetCoreInstrumentation() .AddHttpClientInstrumentation() .AddEntityFrameworkCoreInstrumentation() .AddConsoleExporter()); // Para depuración, en producción — Jaeger o Zipkin


Registro de logs a través de OpenTelemetry

Conecte el registrador a OTel:

using OpenTelemetry.Logs;

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


Configuración de Prometheus para la recolección de métricas

En el archivo prometheus.yml, especifique su endpoint:

scrape_configs:  - job_name: 'dotnet-app'    scrape_interval: 5s    static_configs:      - targets: ['localhost:5000']  # Puerto de su aplicación


Visualización en Grafana

Después de conectar Prometheus a Grafana, cree un panel con las métricas clave:

  • http_server_duration_ms — tiempo de respuesta del servidor
  • http_server_request_count — número de solicitudes
  • orders_created_total — total de pedidos creados


Con esta configuración, obtendrá visibilidad completa de su aplicación .NET. OpenTelemetry unifica la recolección de datos, Prometheus almacena las métricas y Grafana las visualiza. ¡Comience a monitorear hoy mismo!

Recommendations