1. Introducción
Antes de meternos en la práctica, aclaremos por qué hacen falta sistemas externos para recoger logs. Imagina que tu aplicación está desplegada no en tu PC, sino en producción: cientos de servidores, microservicios, muchos usuarios, alguien se queja de "la aplicación va lenta". Encontrar el evento correcto en ese torrente de logs es como buscar una aguja en un pajar. Sin recolección centralizada de logs, depurar y mantener esas aplicaciones es prácticamente imposible. Aquí es donde entran Seq y Application Insights.
Seq: UI agradable, búsqueda rápida, tiempo real
Seq es un sistema para recolección y análisis de logs estructurados, orientado a .NET y Serilog. No es solo un servicio para volcar archivos de log, es una herramienta potente: ves flujos de logs en tiempo real, filtras, buscas por propiedades, creas alertas. Seq puede desplegarse localmente o en la nube.
¿Por qué elegir Seq?
- Diseñado para .NET y Serilog, funciona "out of the box".
- Búsqueda y filtrado increíblemente rápidos por cualquier propiedad de los mensajes.
- Interfaz web sencilla y cómoda.
- Se puede desplegar localmente sin burocracia, incluso en un portátil.
¿Cómo se ve un esquema arquitectónico simple?
+--------------+ +-------------+ +-------------+
| .NET-aplicac. | --(log)| Serilog | --(http)| Seq |
+--------------+ +-------------+ +-------------+
| ^
| |
(búsqueda, filtros, <----[Web UI]
alertas, integraciones)
La aplicación escribe logs estructurados a través de Serilog, Serilog los envía a Seq. En la interfaz web de Seq haces lo que quieras.
2. Integración de Serilog con Seq
Instalación de Seq
Seq se puede probar rápido localmente incluso para experimentos personales. Por ejemplo, si usas Windows, descarga Seq desde el sitio oficial.
- Descarga Seq e instálalo.
- Después de la instalación abre la interfaz web (normalmente http://localhost:5341).
- ¡Listo! Ahora solo falta configurar el envío de logs a Seq.
Integración de Serilog con Seq
Instalar el paquete NuGet:
dotnet add package Serilog.Sinks.Seq
Ejemplo de configuración de logging en Program.cs:
using Serilog;
public class Program
{
public static void Main(string[] args)
{
// Configuración de Serilog para enviar logs a Seq
Log.Logger = new LoggerConfiguration()
.MinimumLevel.Information()
.WriteTo.Console()
.WriteTo.Seq("http://localhost:5341") // URL de tu servidor Seq
.CreateLogger();
Log.Information("La aplicación arranca");
// ... Resto del código de la aplicación ...
Log.CloseAndFlush();
}
}
Si todo está bien configurado, tus logs de la aplicación empezarán a fluir hacia Seq.
Ejemplo de evento estructurado
Log.Information("Usuario {User} inició sesión en {Time}", userName, DateTime.UtcNow);
En Seq ahora puedes buscar todas las entradas de un usuario concreto:
User == 'user'
Filtrado y búsqueda
Seq puede filtrar eventos por cualquier campo y valor. Por ejemplo, ¿quieres ver todos los errores de hoy? Solo pon el filtro:
@Level = 'Error' and @Timestamp > today()
Puedes combinar condiciones — es realmente cómodo.
Alertas e integraciones
Seq puede crear alertas: si, por ejemplo, el número de errores supera un umbral, te llega un email, se dispara un webhook, o incluso puedes enviar un mensaje a Slack.
¿Qué más puede hacer?
- Integración con sistemas CI/CD para recoger automáticamente logs de tests.
- Dashboards personalizados (por pago adicional).
- Plugins para análisis de logs, automatización de acciones (por ejemplo, crear bugs automáticamente cuando hay fallos).
- Integración con Grafana/Prometheus mediante plugins.
Errores típicos al configurar Seq
Uno de los problemas más comunes — olvidarse de poner correctamente la URL del servidor Seq en Serilog, o que el servidor Seq esté escuchando en otro puerto.
Otro problema — no abrir el puerto para conexiones entrantes si Seq corre en Docker o en un servidor. Revisa la accesibilidad del puerto desde la aplicación hacia Seq.
3. Application Insights: telemetría para .NET, nube y magia
Application Insights (o "App Insights") es la plataforma en la nube de monitorización y análisis de aplicaciones de Microsoft Azure. No es solo recolección de logs, también detecta anomalías automáticamente, analítica de uso, monitorización de dependencias, peticiones, APIs externas — y, por supuesto, visualización en tiempo real. Azure Application Insights es un estándar en el mundo enterprise .NET.
¿Qué ventajas tiene Application Insights?
- No requiere instalar un servidor separado: todo está en la nube.
- Integración profunda con .NET, ASP.NET, Azure, Visual Studio.
- Recoge automáticamente no solo tus logs, sino métricas, errores, requests, queries SQL.
- Permite crear dashboards, monitorizar SLA, detectar anomalías, analizar trazas distribuidas (distributed tracing).
¿Cómo funciona Application Insights?
+--------------+ +-------------------+ +---------------------+
| .NET-aplicac. | --(SDK)| AppInsights SDK | --(https)| Azure Application |
+--------------+ +-------------------+ | Insights (nube) |
+---------------------+
^ |
(W3C Trace +----> Analítica, búsqueda, paneles
Context)
La aplicación con el SDK conectado envía telemetría a la nube de Azure, y tú analizas y visualizas todo desde el portal web de Azure.
Integración de Application Insights con una app .NET
Opción 1: Rápido y sencillo
Si tienes una aplicación ASP.NET Core, es muy simple:
dotnet add package Microsoft.ApplicationInsights.AspNetCore
En Program.cs:
builder.Services.AddApplicationInsightsTelemetry("<tu_clave_de_instrumento>");
Y si tienes una aplicación de consola o de escritorio:
dotnet add package Microsoft.ApplicationInsights
Inicialización:
using Microsoft.ApplicationInsights;
using Microsoft.ApplicationInsights.Extensibility;
var telemetryConfig = TelemetryConfiguration.CreateDefault();
telemetryConfig.InstrumentationKey = "<tu_clave_de_instrumento>";
var telemetryClient = new TelemetryClient(telemetryConfig);
telemetryClient.TrackTrace("Hola desde Application Insights!");
telemetryClient.TrackException(new Exception("OOPS, ocurrió un error!"));
La clave del instrumento la obtienes en el portal de Azure tras crear el recurso de Application Insights.
¿Cómo enviar datos estructurados?
Puedes añadir propiedades a cada trace:
telemetryClient.TrackTrace("Usuario inició sesión",
new Dictionary<string, string> { ["User"] = userName }
);
Ejemplo: logging de acciones de usuario
Supongamos que quieres loggear el login de un usuario:
var props = new Dictionary<string, string>
{
{ "User", userName },
{ "Time", DateTime.UtcNow.ToString("o") }
};
telemetryClient.TrackEvent("UserLogin", props);
Ahora no solo el evento en sí, sino todas las propiedades se ven en el portal.
4. Detalles útiles
¿Qué ves en Application Insights?
- Overview de la app: entradas, errores, dependencias (por ejemplo, queries SQL).
- Búsqueda en logs: cualquier evento, filtrado por propiedades.
- Visualización: gráficos, dashboards.
- Tracing: puedes ver la cadena de llamadas y cuánto tarda cada operación.
- Alerting: configuración de alertas por cualquier condición.
Bref sobre la estructura de Application Insights
| Objeto | Descripción |
|---|---|
| Trace | Mensaje de texto (log normal). |
| Event | Evento arbitrario (por ejemplo, "Compra"). |
| Exception | Información sobre un error/excepción. |
| Dependency | Llamada externa (SQL, petición HTTP, etc.). |
| Metric | Métricas numéricas (por ejemplo, conteos). |
| Request | Petición del usuario (para apps web). |
Ejemplo: buscar errores en Application Insights
En el portal de Azure puedes crear una query simple (Kusto Query Language — KQL):
exceptions
| where timestamp > ago(1d)
| where outerMessage contains "Timeout"
| project timestamp, operation_Name, user_Id, outerMessage
Esto te mostrará todos los timeouts del último día, con detalles.
Limitaciones/consideraciones de Application Insights
- Necesitas una cuenta de Azure. Hay opción gratuita, pero con límites.
- A veces hay retraso entre el envío de logs y su aparición en la UI — hasta un par de minutos.
- Para proyectos muy privados — es una solución en la nube, no una instalación local.
- Si abusas de los traces — puedes quemar rápidamente el límite diario.
5. Comparativa entre Seq y Application Insights
| Seq | Application Insights | |
|---|---|---|
| Dónde se guarda | Servidor local (o nube) | Nube de Azure |
| Costo | Gratis/paid en local | Existe plan gratuito, pago en Azure |
| Mejor uso | Aplicaciones .NET, CI local | Cualquier app, producción/enterprise |
| UI/Búsqueda | Muy cómodo, filtros | Potente, analítica, dashboards |
| Alerting | Integrado | Condiciones complejas, integración con Azure |
| Integración | Serilog, otros sinks | SDK para ASP.NET, .NET, JS y más |
| Flexibilidad | Control total por tu parte | Todo bajo el paraguas de Microsoft |
Aplicando esto en la práctica
Los conocimientos sobre Seq y Application Insights te servirán no solo en producción, sino también durante desarrollo y testing (por ejemplo, para analizar comportamiento de tests automatizados), y cuando trabajas con microservicios y quieres ver la foto completa. En entrevistas suelen preguntar "¿Cómo organizarías la recolección de logs para encontrar problemas en producción rápidamente?" — ahora tienes qué responder.
Además, muchas empresas usan estas herramientas para construir pipelines DevOps completos: Continuous Delivery, creación automática de bugs por alertas, etc. Un sistema de logging no es solo "a dónde va esa línea de Console.WriteLine", es la caja negra y el monitor de tu aplicación.
GO TO FULL VERSION