Monitoreo de aplicaciones C#: métricas y alertas en .NET

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é es necesario monitorear aplicaciones C#?

Las aplicaciones C# modernas en la plataforma .NET son sistemas distribuidos complejos que operan bajo altas cargas. Sin un monitoreo de calidad, corre el riesgo de pasar por alto la degradación del rendimiento, fugas de memoria o fallos críticos. El monitoreo no solo permite detectar problemas, sino también predecirlos, respondiendo oportunamente a las anomalías.

En este artículo, analizaremos cómo configurar la recopilación de métricas, el registro de logs y el sistema de alertas para aplicaciones C# (.NET) utilizando herramientas modernas: Prometheus, Grafana, Serilog y los Health Checks integrados. Obtendrá ejemplos de código listos para usar y recomendaciones prácticas.



Métricas principales para aplicaciones C# (.NET)

El monitoreo comienza con la definición de indicadores clave. Para aplicaciones .NET, se pueden dividir en tres categorías:

  • Métricas de infraestructura — uso de CPU, memoria, disco, red.
  • Métricas de aplicación — tiempo de respuesta de la API, cantidad de solicitudes, errores (4xx/5xx), tamaño de colas.
  • Métricas específicas de .NET — tamaño del heap de GC, cantidad de hilos, tiempo de recolección de basura, cantidad de conexiones a la base de datos.


Recopilación de métricas con Prometheus y .NET

Para exportar métricas a Prometheus, use la librería prometheus-net. Instálela a través de NuGet:

dotnet add package prometheus-net.AspNetCore

Agregue el middleware en Program.cs:

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

// Habilitamos métricas de Prometheusapp.UseHttpMetrics(); // HTTP metricsapp.UseMetricServer(); // /metrics endpoint

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

Ahora, en la dirección /metrics, estarán disponibles las métricas estándar: cantidad de solicitudes, duración, errores. Agreguemos una métrica personalizada: un contador de visitas al endpoint:

using Prometheus;

var requestCounter = Metrics.CreateCounter( "myapp_requests_total", "Total requests to the endpoint");

app.MapGet("/api/data", () => { requestCounter.Inc(); return new { Message = "Data loaded" };});


Health Checks: verificación básica del estado

El mecanismo integrado de Health Checks en .NET permite evaluar rápidamente la salud de la aplicación. Agregue una verificación de conexión a la base de datos:

using Microsoft.Extensions.Diagnostics.HealthChecks;

builder.Services.AddHealthChecks() .AddDbContextCheck<AppDbContext>() .AddUrlGroup(new Uri("https://external-api.com"), "External API");

app.MapHealthChecks("/health");

Los Health Checks devuelven el estado Healthy, Degraded o Unhealthy — esto es una fuente ideal para alertas.



Registro de logs con Serilog: logs estructurados

Los logs son la fuente de datos más importante para el diagnóstico. Serilog permite enviar logs a Elasticsearch, Seq o simplemente a un archivo con formato estructurado.

Instalación:

dotnet add package Serilog.AspNetCoredotnet add package Serilog.Sinks.Seq

Configuración en Program.cs:

Log.Logger = new LoggerConfiguration()    .MinimumLevel.Information()    .WriteTo.Console()    .WriteTo.Seq("http://localhost:5341")    .Enrich.WithProperty("Application", "MyApp")    .CreateLogger();

builder.Host.UseSerilog();

Ahora todos los logs contendrán información contextual: RequestId, UserId, tiempo de ejecución. Ejemplo de registro de un error:

try {    // código peligroso} catch (Exception ex) {    Log.Error(ex, "Error al procesar el pedido {OrderId}", orderId);}

Los logs estructurados son fáciles de analizar en Grafana o Kibana, construir

Blogs

Book Recommendations