Back to "Auto Hosting Seq para ASP.NET Logging"

This is a viewer only at the moment see the article on how this works.

To update the preview hit Ctrl-Alt-R (or ⌘-Alt-R on Mac) or Enter to refresh. The Save icon lets you save the markdown file to disk

This is a preview from the server running through my markdig pipeline

ASP.NET Docker Seq Serilog

Auto Hosting Seq para ASP.NET Logging

Wednesday, 28 August 2024

Introducción

Seq es una aplicación que le permite ver y analizar registros. Es una gran herramienta para depurar y monitorear tu aplicación. En este post cubriré cómo configuré Seq para registrar mi aplicación ASP.NET Core. Nunca puede tener demasiados tableros :)

SeqDashboard

Configuración de Seq

Seq viene en un par de sabores. Puede utilizar la versión en la nube o auto hospedarla. Elegí ser el anfitrión ya que quería mantener mis registros privados.

Primero empecé visitando el sitio web de Seq y encontrando el Instrucciones de instalación Docker.

Localmente

Para ejecutar localmente primero necesita obtener una contraseña de hashed. Puede hacerlo ejecutando el siguiente comando:

echo '<password>' | docker run --rm -i datalust/seq config hash

Para ejecutarlo localmente puede utilizar el siguiente comando:

docker run --name seq -d --restart unless-stopped -e ACCEPT_EULA=Y -e SEQ_FIRSTRUN_ADMINPASSWORDHASH=<hashfromabove> -v C:\seq:/data -p 5443:443 -p 45341:45341 -p 5341:5341 -p 82:80 datalust/seq

En mi máquina local de Ubuntu hice esto en un guión sh:

#!/bin/bash
PH=$(echo 'Abc1234!' | docker run --rm -i datalust/seq config hash)

mkdir -p /mnt/seq
chmod 777 /mnt/seq

docker run \
  --name seq \
  -d \
  --restart unless-stopped \
  -e ACCEPT_EULA=Y \
  -e SEQ_FIRSTRUN_ADMINPASSWORDHASH="$PH" \
  -v /mnt/seq:/data \
  -p 5443:443 \
  -p 45341:45341 \
  -p 5341:5341 \
  -p 82:80 \
  datalust/seq

Entonces

chmod +x seq.sh
./seq.sh

Esto te va a poner en marcha y luego ir a http://localhost:82 / http://<machineip>:82 para ver su siguiente instalación (contraseña de administrador por defecto es la que ha introducido para arriba.

En Docker

He añadido siguientes a mi Docker componer el archivo de la siguiente manera:

  seq:
    image: datalust/seq
    container_name: seq
    restart: unless-stopped
    environment:
      ACCEPT_EULA: "Y"
      SEQ_FIRSTRUN_ADMINPASSWORDHASH: ${SEQ_DEFAULT_HASH}
    volumes:
      - /mnt/seq:/data
    networks:
      - app_network

Tenga en cuenta que tengo un directorio llamado /mnt/seq (para ventanas, utilice una ruta de ventanas). Aquí es donde se almacenarán los registros.

También tengo un SEQ_DEFAULT_HASH variable de entorno que es la contraseña hashed para el usuario administrador en mi archivo.env.

Configuración de ASP.NET Core

Como uso Serilog Para mi registro es bastante fácil configurar Seq. Incluso tiene documentos sobre cómo hacer esto. aquí.

Básicamente usted acaba de agregar el fregadero a su proyecto:

dotnet add package Serilog.Sinks.Seq

Prefiero usar appsettings.json para mi configuración así que sólo tengo la configuración 'estándar' en mi Program.cs:

builder.Host.UseSerilog((context, configuration) =>
{
    configuration.ReadFrom.Configuration(context.Configuration);
    Serilog.Debugging.SelfLog.Enable(Console.Error);
    Console.WriteLine($"Serilog Minimum Level: {configuration.MinimumLevel.ToString()}");
});

Entonces en mi 'appsettings.json' tengo esta configuración

  "Serilog": {
    "Using": ["Serilog.Sinks.Console", "Serilog.Sinks.File", "Serilog.Sinks.Seq"],
    "MinimumLevel": "Warning",
    "WriteTo": [
        {
          "Name": "Seq",
          "Args":
          {
            "serverUrl": "http://seq:5341",
            "apiKey": ""
          }
        },
      {
        "Name": "Console"
      },
      {
        "Name": "File",
        "Args": {
          "path": "logs/applog-.txt",
          "rollingInterval": "Day"
        }
      }

    ],
    "Enrich": ["FromLogContext", "WithMachineName"],
    "Properties": {
      "ApplicationName": "mostlylucid"
    }
  }

Ya verás que tengo un serverUrl de http://seq:5341. Esto es porque tengo ssigu corriendo en un contenedor de contenedores llamado seq y está en el puerto 5341. Si lo está ejecutando localmente, puede utilizar http://localhost:5341. También uso la clave API para poder usar la clave para especificar el nivel de registro dinámicamente (puede establecer una clave para aceptar sólo un cierto nivel de mensajes de registro).

Usted lo estableció en su siguiente instancia por ir a http://<machine>:82 y haciendo clic en el engranaje de configuración en la parte superior derecha. A continuación, haga clic en el botón API Keys y añadir una nueva clave. Usted puede entonces utilizar esta clave en su appsettings.json archivo.

Seq

Docker Composite

Ahora tenemos esta configuración que necesitamos para configurar nuestra aplicación ASP.NET para recoger una clave. Utilizo un .env archivo para almacenar mis secretos.

SEQ_DEFAULT_HASH="<adminpasswordhash>"
SEQ_API_KEY="<apikey>"

Entonces en mi archivo de composición Docker especifico que el valor debe ser inyectado como una variable de entorno en mi aplicación ASP.NET:

services:
  mostlylucid:
    image: scottgal/mostlylucid:latest
    ports:
      - 8080:8080
    restart: always
    labels:
        - "com.centurylinklabs.watchtower.enable=true"
    env_file:
      - .env
    environment:
      - Auth__GoogleClientId=${AUTH_GOOGLECLIENTID}
      - Auth__GoogleClientSecret=${AUTH_GOOGLECLIENTSECRET}
      - Auth__AdminUserGoogleId=${AUTH_ADMINUSERGOOGLEID}
      - SmtpSettings__UserName=${SMTPSETTINGS_USERNAME}
      - SmtpSettings__Password=${SMTPSETTINGS_PASSWORD}
      - Analytics__UmamiPath=${ANALYTICS_UMAMIPATH}
      - Analytics__WebsiteId=${ANALYTICS_WEBSITEID}
      - ConnectionStrings__DefaultConnection=${POSTGRES_CONNECTIONSTRING}
      - TranslateService__ServiceIPs=${EASYNMT_IPS}
      - Serilog__WriteTo__0__Args__apiKey=${SEQ_API_KEY}
    volumes:
      - /mnt/imagecache:/app/wwwroot/cache
      - /mnt/markdown/comments:/app/Markdown/comments
      - /mnt/logs:/app/logs
    networks:
      - app_network

Tenga en cuenta que la Serilog__WriteTo__0__Args__apiKey se establece en el valor de SEQ_API_KEY desde el .env archivo. El '0' es el índice de la WriteTo array en la ventana appsettings.json archivo.

Caddy

Nota tanto para Seq como para mi aplicación ASP.NET He especificado que ambos pertenecen a mi app_network network. Esto es porque uso Caddy como un proxy inverso y está en la misma red. Esto significa que puedo usar el nombre del servicio como URL en mi archivo Caddy.

{
    email [email protected]
}
seq.mostlylucid.net
{
   reverse_proxy seq:80
}

http://seq.mostlylucid.net
{
   redir https://{host}{uri}
}

Así que esto es capaz de mapear seq.mostlylucid.net a mi siguiente instancia.

Conclusión

Seq es una gran herramienta para registrar y monitorear su aplicación. Es fácil de configurar y utilizar e integra bien con Serilog. Lo he encontrado invaluable en la depuración de mis aplicaciones y estoy seguro de que usted también lo hará.

logo

©2024 Scott Galloway