Monitoreo de aplicaciones C#: métricas, alertas y prácticas avanzadas

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 de aplicaciones C# es un arte

En el desarrollo moderno de C# (.NET), el monitoreo ha dejado de ser solo una opción. Es un elemento obligatorio en entornos de producción que permite no solo registrar fallos, sino también predecirlos. A nivel avanzado, el monitoreo se convierte en un sistema de alerta temprana: no solo miras los paneles, sino que configuras alertas basadas en métricas complejas.

En este artículo analizaremos cómo ir más allá de los contadores estándar de CPU y memoria. Aprenderás a recopilar métricas de negocio personalizadas, configurar alertas con Prometheus y Alertmanager, y utilizar OpenTelemetry para trazabilidad. Todos los ejemplos serán en C#.



1. Instrumentación avanzada: App Metrics y Prometheus

1.1. Conexión de Prometheus a ASP.NET Core

El monitoreo básico en .NET a menudo se limita al PerformanceCounter integrado. Sin embargo, para arquitecturas de microservicios, el estándar es Prometheus. Instala el paquete:

dotnet add package prometheus-net.AspNetCore

Luego agrega el middleware en Program.cs:

using Prometheus;

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

// Habilitamos el endpoint de métricasapp.UseHttpMetrics();app.UseRouting();app.MapMetrics(); // /metrics

app.Run();

Esto te dará métricas básicas: cantidad de solicitudes, duración, errores. Pero para un nivel avanzado, esto no es suficiente.



1.2. Métricas de negocio personalizadas

Supongamos que quieres rastrear la cantidad de pedidos creados o el tiempo de ejecución de una operación crítica de negocio. Usa Counter y Histogram:

using Prometheus;

public class OrderMetrics{ private static readonly Counter OrdersCreated = Metrics .CreateCounter("orders_created_total", "Total number of created orders");

private static readonly Histogram OrderProcessingTime = Metrics .CreateHistogram("order_processing_seconds", "Histogram of order processing time");

public void RecordOrderCreation(double elapsedSeconds) { OrdersCreated.Inc(); OrderProcessingTime.Observe(elapsedSeconds); }}

Ahora, en cualquier servicio puedes inyectar OrderMetrics y registrar datos. Esto te permitirá construir paneles en Grafana con precisión de segundos.



2. Alertas: de disparadores simples a reglas orientadas a SLO

2.1. Configuración de Alertmanager para métricas C#

Recopilar métricas es la mitad del trabajo. La otra mitad son las alertas. Crea una regla para Prometheus (alerts.yml):

groups:  - name: csharp_app_alerts    rules:      - alert: HighErrorRate        expr: rate(http_requests_total{status=~"5.."}[5m]) > 0.05        for: 2m        labels:          severity: critical        annotations:          summary: "High error rate in C# app"          description: "Error rate is {{ $value }} for the last 5 minutes"

Este es un ejemplo básico. A nivel avanzado, vale la pena agregar alertas SLO. Por ejemplo, si el 99% de las solicitudes no se completan en 200 ms, es motivo de pánico.



2.2. Alertas basadas en métricas de negocio

Usa los contadores personalizados de la sección anterior. Si la cantidad de pedidos cae drásticamente, significa que algo se rompió:

      - alert: OrdersStopped        expr: rate(orders_created_total[10m]) == 0        for: 5m        labels:          severity: warning        annotations:          summary: "No orders created in last 10 minutes"

Esta alerta no se puede obtener con métricas estándar del sistema operativo; requiere un profundo conocimiento de la lógica de negocio.



3. OpenTelemetry: trazabilidad distribuida en C#

3.1. Integración del SDK de OpenTelemetry

Cuando tienes 10 microservicios en C#, las métricas individuales no ayudan. Se necesita trazabilidad. Inst

Blogs

Book Recommendations