logo

Observabilidad Avanzada: Centralización de Logs en Grafana Cloud con Loki y .NET 10


La capacidad de depurar errores en tiempo real y analizar el comportamiento de una aplicación en producción depende directamente de una buena estrategia de logging. Grafana Loki se ha posicionado como el estándar «S3 para logs», ofreciendo una solución eficiente y rentable. En este artículo, aprenderemos a configurar un pipeline de logs desde una aplicación .NET 10 hacia Grafana Cloud utilizando Serilog, el framework de diagnóstico más flexible del ecosistema C#.

1. ¿Por qué Grafana Loki y Serilog?

A diferencia de otras soluciones que indexan el contenido completo de los logs, Loki solo indexa las etiquetas (metadata). Esto reduce drásticamente el uso de memoria y los costes de almacenamiento. Por su parte, Serilog permite el Structured Logging, lo que facilita enormemente las consultas posteriores en Grafana mediante LogQL.


2. Configuración de Grafana Cloud

Para comenzar, necesitamos las credenciales de nuestro stack de Grafana Cloud:

  1. Accede a tu cuenta de Grafana.com.
  2. En la sección Loki, haz clic en «Details».
  3. Anota el URL de Host, el User ID y genera un API Token (Access Policy con permisos de escritura).

3. Instalación de Dependencias

Necesitamos el core de Serilog y el «sink» específico para Loki que soporte autenticación HTTP básica.

Bash

dotnet add package Serilog.AspNetCore
dotnet add package Serilog.Sinks.Grafana.Loki

4. Implementación en el Program.cs

La configuración se realiza durante el arranque de la aplicación. Es fundamental definir etiquetas fijas (como el nombre del entorno o la aplicación) para que Loki pueda organizar los datos eficientemente.

C#

using Serilog;
using Serilog.Sinks.Grafana.Loki;

var builder = WebApplication.CreateBuilder(args);

// Configuración de Serilog
Log.Logger = new LoggerConfiguration()
    .MinimumLevel.Information()
    .Enrich.FromLogContext()
    // Etiqueta global para identificar la fuente en Grafana
    .Enrich.WithProperty("app", "api-digital-v1") 
    .WriteTo.Console()
    .WriteTo.GrafanaLoki(
        "https://logs-prod-eu-west-0.grafana.net", // Tu endpoint de Loki
        new [] { new LokiLabel { Key = "env", Value = "production" } },
        credentials: new LokiCredentials 
        { 
            User = "123456", // Tu User ID de Grafana Cloud
            Password = "tu-api-token-aqui" 
        }
    )
    .CreateLogger();

builder.Host.UseSerilog();

var app = builder.Build();

app.MapGet("/", () => {
    Log.Information("Acceso al endpoint raíz detectado");
    return "Log enviado a Grafana Cloud";
});

app.Run();

5. Visualización de Datos en Grafana

Una vez que la aplicación esté enviando datos, podemos visualizarlos en el explorador de Grafana:

  1. Ve a la sección Explore en tu panel de Grafana.
  2. Selecciona la fuente de datos Loki.
  3. Ejecuta una consulta LogQL simple para ver tus logs: {app="api-digital-v1", env="production"}

6. Buenas Prácticas y Rendimiento

Conclusión

La integración de Serilog con Grafana Loki dota a las aplicaciones .NET de una visibilidad de nivel empresarial. Para una empresa beneficiaria del Kit Digital, esto supone pasar de una gestión de errores reactiva (mirar logs en archivos de texto locales) a una proactiva, donde los errores se visualizan en dashboards centralizados antes incluso de que el cliente final los reporte.