Monitoreo de aplicaciones .NET con Prometheus y OpenTelemetry

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): desde métricas hasta alertas



Las aplicaciones .NET modernas requieren una supervisión constante del rendimiento, la disponibilidad y el estado de los procesos internos. En este artículo, exploraremos las herramientas clave para organizar el monitoreo: Prometheus para la recolección de métricas, OpenTelemetry para el trazado y Serilog para el registro estructurado. Aprenderá cómo implementar la observabilidad en su aplicación C#.



¿Por qué es necesario el monitoreo de aplicaciones .NET?

La falta de monitoreo convierte la depuración en una adivinanza. Sin métricas, no sabrá sobre el aumento del tiempo de respuesta; sin trazas, no encontrará el cuello de botella en la cadena de llamadas; sin registros, no entenderá la causa del error. Un monitoreo correctamente configurado permite:

  • Detectar anomalías antes de que afecten a los usuarios.
  • Analizar el rendimiento de componentes individuales (bases de datos, API, caché).
  • Recolectar métricas de negocio (número de pedidos, sesiones activas).
  • Automatizar las notificaciones de incidentes.


Herramientas para el monitoreo de .NET

Usaremos tres componentes principales:

  • Prometheus — sistema de recolección y almacenamiento de métricas con un potente lenguaje de consultas PromQL.
  • OpenTelemetry — estándar para la recolección de telemetría (trazas, métricas, registros).
  • Serilog — biblioteca de registro estructurado para .NET.


Paso 1: Instalación y configuración de Prometheus con .NET

Para integrar Prometheus con C#, use el paquete prometheus-net. Instálelo a través de NuGet:

dotnet add package prometheus-net

Luego, agregue el middleware en su Program.cs:

using Prometheus;

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

// Habilitamos el endpoint /metrics para Prometheusapp.UseHttpMetrics();app.MapMetrics();

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

Después de iniciar la aplicación, navegue a http://localhost:5000/metrics. Verá métricas estándar: http_requests_total, http_request_duration_seconds y otras.



Paso 2: Creación de métricas personalizadas

A menudo es necesario rastrear indicadores de negocio. Por ejemplo, la cantidad de pedidos procesados:

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 en el controlador[ApiController][Route("api/orders")]public class OrdersController : ControllerBase{ [HttpPost] public IActionResult CreateOrder() { // ... lógica de creación del pedido OrderMetrics.RecordOrder(); return Ok(); }}

Ahora en /metrics aparecerá la línea orders_processed_total 1.



Paso 3: Trazado con OpenTelemetry

El trazado ayuda a entender cuánto tiempo toma cada etapa del procesamiento de una solicitud. Instale los paquetes:

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

Configure OpenTelemetry en Program.cs:

using OpenTelemetry.Trace;

var builder = WebApplication.CreateBuilder(args);

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

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

Ahora cada solicitud HTTP creará automáticamente una traza con información sobre el tiempo de ejecución. Para export

Recommendations