Monitoreo de aplicaciones C#: métricas y alertas de la A a la Z

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

Introducción: Por qué el monitoreo es crítico para aplicaciones C#

\n\n

En el desarrollo de software moderno, escribir código es solo la mitad del trabajo. Para que una aplicación funcione de manera estable, rápida y predecible, es necesario un monitoreo constante. Para las aplicaciones C# (.NET), que a menudo se utilizan en sistemas empresariales de alta carga, el sector bancario, el comercio electrónico y los servicios en la nube, el monitoreo se convierte no solo en una opción, sino en un requisito obligatorio.

\n\n

Sin monitoreo, trabajas a ciegas: las fugas de memoria pasan desapercibidas hasta que el servidor se cae, las solicitudes lentas se acumulan y los usuarios se van a la competencia. En este artículo, analizaremos el ciclo completo de configuración de la observabilidad para aplicaciones C#: desde la recolección de métricas básicas hasta la configuración de alertas inteligentes en tiempo real.

\n\n

1. Fundamentos del monitoreo: qué métricas recopilar en .NET

\n\n

Antes de configurar las herramientas, es importante entender qué métricas son realmente importantes para las aplicaciones C#. Las dividiremos en tres grupos:

\n\n

1.1. Métricas del sistema (nivel de infraestructura)

\n
    \n
  • CPU y Memoria — carga del procesador y consumo de RAM del proceso dotnet.
  • \n
  • GC (Garbage Collection) — frecuencia y duración de las recolecciones de basura, tamaño de los montones (Gen0, Gen1, Gen2, LOH).
  • \n
  • Thread Pool — cantidad de hilos activos, libres y en espera.
  • \n
  • Disk I/O y Red — lectura/escritura en disco, conexiones de red.
  • \n
\n\n

1.2. Métricas de negocio (nivel de aplicación)

\n
    \n
  • Request Rate — cantidad de solicitudes por segundo (RPS).
  • \n
  • Latencia — tiempo de respuesta (percentiles p50, p95, p99).
  • \n
  • Tasa de Error — porcentaje de errores 4xx y 5xx.
  • \n
  • Usuarios Activos — cantidad de usuarios trabajando simultáneamente.
  • \n
\n\n

1.3. Métricas de .NET Runtime

\n
    \n
  • Compilación JIT — tiempo de compilación de métodos.
  • \n
  • Carga de Ensamblados — cantidad de ensamblados cargados.
  • \n
  • Excepciones — cantidad de excepciones lanzadas por segundo.
  • \n
\n\n

Para recopilar estas métricas en .NET se utiliza una herramienta potente: System.Diagnostics.Metrics (API integrada desde .NET 6+) y la biblioteca OpenTelemetry.

\n\n

2. Configuración de la recolección de métricas con OpenTelemetry y Prometheus

\n\n

La mejor manera de organizar el monitoreo de una aplicación C# es usar la combinación OpenTelemetry (recolección de métricas) + Prometheus (almacenamiento) + Grafana (visualización). Veamos la configuración paso a paso.

\n\n

2.1. Instalación de paquetes NuGet

\n

Agregue los siguientes paquetes al proyecto:

\n
dotnet add package OpenTelemetry.Extensions.Hosting\ndotnet add package OpenTelemetry.Exporter.Prometheus.AspNetCore\ndotnet add package OpenTelemetry.Instrumentation.AspNetCore\ndotnet add package OpenTelemetry.Instrumentation.Runtime
\n\n

2.2. Configuración en Program.cs

\n

Configure OpenTelemetry para la recolección automática de métricas de ASP.NET Core y .NET Runtime:

\n
using OpenTelemetry.Metrics;\n\nvar builder = WebApplication.CreateBuilder(args);\n\nbuilder.Services.AddOpenTelemetry()\n    .WithMetrics(metrics => metrics\n        .AddAspNetCoreInstrumentation() // métricas de solicitudes HTTP\n        .AddRuntimeInstrumentation()    // métricas de GC, JIT, ThreadPool\n        .AddPrometheusExporter());      // exportación a Prometheus\n\nvar app = builder.Build();\n\napp.UseOpenTelemetryPrometheusScrapingEndpoint(); // endpoint /metrics\n\napp.Run();
\n\n

Ahora, en la dirección http://localhost:5000/metrics estará disponible un endpoint con métricas en formato Prometheus.

\n\n

2.3. Creación de métricas personalizadas

\n

Agreguemos una métrica de negocio: un contador de pedidos procesados:

\n
public class OrderMetrics\                

Blogs

Book Recommendations