CodeGym /Cursos /C# SELF /Recolección de logs: Seq

Recolección de logs: Seq y Application Insights

C# SELF
Nivel 64 , Lección 2
Disponible

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.

  1. Descarga Seq e instálalo.
  2. Después de la instalación abre la interfaz web (normalmente http://localhost:5341).
  3. ¡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.

Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION