Observabilidad en .NET: la diferencia entre saber que falló y saber por qué
Monitorear te dice que el servicio está caído. Observar te dice que fue una consulta sin índice que se disparó tras el despliegue del martes. Aquí empieza el cambio.
Son las 10:15 de la mañana. Tu monitoreo dispara una alerta: «API de pedidos: tiempo de respuesta mayor a 3 segundos». El equipo se conecta, mira el CPU (normal), mira la memoria (normal), reinicia el servicio y todo vuelve a la normalidad. Se cierra el ticket.
Tres días después vuelve a pasar. Y otra vez. Nadie sabe por qué.
Esa es exactamente la frontera entre monitorear y observar. El monitoreo responde a preguntas que ya sabías formular: ¿está arriba?, ¿cuánto CPU usa?, ¿responde el endpoint de salud? La observabilidad responde a la pregunta que no anticipaste: ¿por qué esta petición específica, de este cliente, a esta hora, tardó 3.4 segundos?
La diferencia entre monitorear y observar no es filosófica. Es la diferencia entre resolver en cuatro minutos o en cuatro horas.
Los tres pilares, contados con un pedido real
Imagina una petición POST /api/pedidos que atraviesa tu API, valida inventario, cobra con un proveedor externo y encola un correo. Cada pilar de la observabilidad te cuenta una parte distinta de esa historia.
Métricas · ¿qué tan bien va, en general?
Números agregados en el tiempo. Baratos de almacenar, perfectos para tableros y alertas, incapaces de explicar un caso individual.
«El 4.2% de los pedidos falló en la última hora, contra un 0.3% habitual.»
Trazas · ¿por dónde pasó y dónde se fue el tiempo?
El recorrido completo de una petición, con el tiempo consumido en cada tramo. Es el pilar que más rápido convierte una investigación de horas en una de minutos.
«De los 3.4 segundos, 3.1 se fueron esperando al proveedor de pagos, no en tu código.»
Logs · ¿qué pasó exactamente en ese punto?
El detalle fino. Con logging estructurado y correlación dejan de ser un archivo de texto que nadie lee y se convierten en una base de datos consultable.
«El proveedor devolvió el código 429 —demasiadas peticiones— a las 10:14:52 para el comercio 8841.»
Ninguno de los tres sustituye a los otros. Las métricas te dicen que algo pasa, las trazas te dicen dónde, y los logs te dicen qué.
Por qué .NET está hoy en un momento ideal
Durante años, instrumentar una aplicación .NET significaba atarse a una herramienta comercial concreta. Eso cambió. OpenTelemetry es hoy un estándar abierto, soportado nativamente en .NET a través de System.Diagnostics.Activity y System.Diagnostics.Metrics, y respaldado prácticamente por toda la industria.
Si mañana cambias de plataforma de observabilidad, cambias el exportador, no el código.
ASP.NET Core, HttpClient, Entity Framework y los clientes SQL ya emiten información: solo hay que recogerla.
Se agrega a una aplicación existente, en producción, sin tocar la lógica de negocio.
Un puñado de paquetes NuGet y unas veinte líneas en Program.cs bastan para ver trazas de extremo a extremo.
builder.Services.AddOpenTelemetry()
.ConfigureResource(r => r.AddService("api-pedidos"))
.WithTracing(t => t
.AddAspNetCoreInstrumentation() // peticiones entrantes
.AddHttpClientInstrumentation() // llamadas salientes
.AddSqlClientInstrumentation() // consultas a base de datos
.AddOtlpExporter())
.WithMetrics(m => m
.AddAspNetCoreInstrumentation()
.AddRuntimeInstrumentation() // GC, hilos, memoria
.AddOtlpExporter());
Ese bloque es, honestamente, el mejor retorno de inversión disponible hoy en un proyecto .NET.
Las cuatro señales que deberías ver desde el primer día
No empieces instrumentando todo. Empieza por lo que responde a la pregunta que hace tu director general: «¿está funcionando bien para el cliente?».
| Señal | Qué mide | Por qué importa |
|---|---|---|
| Latencia | Tiempo de respuesta en percentiles p50, p95 y p99 | El promedio miente: si 95 peticiones tardan 100 ms y 5 tardan 8 s, el promedio dice 495 ms y nadie ve el problema |
| Tráfico | Peticiones por segundo o por minuto | Da contexto: una caída de errores puede ser que se arregló… o que ya nadie está entrando |
| Errores | Porcentaje de respuestas fallidas, separadas por tipo | Es la métrica que se traduce directamente a clientes afectados |
| Saturación | Qué tan cerca está el recurso más limitado de su tope | Predice la caída antes de que ocurra: pool de conexiones, cola de hilos, memoria |
Con estas cuatro, bien graficadas y con alertas sensatas, ya cubres la enorme mayoría de los incidentes que hoy te toman horas.
Una ruta de adopción en cuatro etapas
-
1Ver Semanas 1 y 2
Instrumentación automática con OpenTelemetry en tus servicios principales, exportando a un destino único. El objetivo es que exista un solo lugar donde mirar cuando algo pase. Nada más.
-
2Correlacionar Semanas 3 y 4
Logging estructurado y propagación del
TraceIdentre servicios y hacia los logs. El objetivo es que desde un error puedas saltar a la traza completa de esa petición exacta, sin buscar a mano por hora aproximada. -
3Alertar con criterio Mes 2
Definir SLIs y SLOs con el negocio y construir alertas sobre síntomas visibles para el usuario, no sobre causas internas. Menos alertas, y que cada una tenga una acción clara. Un equipo que recibe doscientas alertas al día ya no lee ninguna.
-
4Medir el negocio Mes 3
Métricas propias: pedidos procesados, tiempo de cobro, fallas por proveedor de pago. Que el mismo tablero sirva al líder técnico y a la dirección. Aquí la observabilidad deja de ser un gasto de TI y empieza a defenderse sola.
Los tres errores que vemos una y otra vez
Genera un volumen de datos enorme, una factura desagradable y un ruido en el que nadie encuentra nada. Empieza por los dos o tres servicios que sostienen el dinero.
Poner el ID de usuario o de pedido como dimensión multiplica la cardinalidad y con ella el costo. Esos datos viven en las trazas y en los logs, nunca en las métricas.
Si tu tablero de guardia no cabe en una pantalla y no responde en diez segundos «¿está bien o está mal?», no es un tablero de operación: es una obra decorativa.
Lo que realmente cambia cuando lo tienes
El cambio más visible no es técnico, es de conversación. Se acaban las juntas donde el área de sistemas dice «de nuestro lado todo está bien» y el área comercial insiste en que los clientes se quejan. Con trazas, ambos miran el mismo dato y la discusión se vuelve un diagnóstico.
Y aparece algo que casi nadie anticipa: empiezas a encontrar problemas que llevaban meses ahí y que nadie había reportado.
- ▪Un 3% de checkouts que fallaba en silencio y se contabilizaba como «el cliente se arrepintió».
- ▪Un trabajo nocturno que dejó de correr en marzo y nadie notó hasta el cierre anual.
- ▪Una integración que reintenta cuatro veces cada llamada y triplica el costo del proveedor.
Ese suele ser el momento en que la inversión se paga sola.
Por dónde seguir
Este artículo es la puerta de entrada. Cada etapa de la ruta tiene su propia guía con el código y la configuración concreta:
- —OpenTelemetry en .NET desde cero: tu primera traza distribuida en 30 minutos — el paso a paso de la etapa 1.
- —Logging estructurado en .NET con Serilog — para dejar de escribir logs que nadie puede consultar.
- —TraceId y correlación: cómo seguir una petición a través de 6 microservicios — el corazón de la etapa 2.
- —Los 4 golden signals aplicados a una API .NET real — cómo instrumentar latencia, tráfico, errores y saturación.
- —SLI, SLO y presupuesto de error explicados sin jerga — la base de la etapa 3.
- —Métricas personalizadas en .NET: qué medir de tu negocio — el salto de la etapa 4.
- —Cardinalidad: el error que multiplica tu factura por 40 — para no tropezar con el error 2.
No puedes mejorar lo que no puedes ver. Y no puedes ver lo que nunca instrumentaste.
Si tu equipo hoy diagnostica a base de reiniciar servicios y revisar archivos de log por SSH, no es falta de talento: es falta de instrumentos. Y eso, a diferencia de casi todo lo demás, se resuelve en semanas.
¿Tu equipo tarda horas en explicar por qué falló algo?
Implementamos observabilidad en aplicaciones .NET sin reescribir tu sistema. Instrumentamos con OpenTelemetry, correlacionamos logs y trazas, definimos las alertas que sí importan y dejamos a tu equipo capacitado para operarlo. En semanas, no en trimestres.
- —Observabilidad y OpenTelemetry para .NET
- —Diagnóstico de rendimiento, memoria y concurrencia
- —Instrumentación de aplicaciones .NET Framework legacy
- —Mantenimiento y monitoreo de servidores