RousselTMLEARNING

TP · Alloy: del descubrimiento a la maestría

Práctica: recopilación y envío de logs a Loki con corrección

La corrección está integrada en el TP (Ver los recuadros verdes)

Lo que vas a aprender en este TP
  • Leer archivos de logs
  • Extraer y añadir etiquetas
  • Enviar a Loki y comprobar

Introducción #

Lo que vas a aprender en esta sección
  • Leer archivos de logs
  • Extraer y añadir etiquetas
  • Enviar a Loki y comprobar

Contexto. Una aplicación escribe sus logs JSON en archivos y nadie los consulta hasta el incidente. Los centralizas en Loki.

Requisitos: Docker Compose, curl  ·  Duración estimada: 30 min

Logs consultables por nivel y entorno.

Pipeline de logs #

Pasos guiados, con su corrección.

  1. 1. Preparar la pila

    ¿Por qué? El volumen conserva las posiciones de lectura: sin él, Alloy lo releería todo en cada reinicio.

    Escribe un Compose con Loki y Alloy.
    Ver la corrección
    services:
      loki:
        image: grafana/loki:latest
        command: -config.file=/etc/loki/local-config.yaml
        ports:
          - "3100:3100"
    
      alloy:
        image: grafana/alloy:v1.21.3
        command: run --server.http.listen-addr=0.0.0.0:12345 --storage.path=/var/lib/alloy/data /etc/alloy/config.alloy
        ports:
          - "12345:12345"
        volumes:
          - ./config.alloy:/etc/alloy/config.alloy:ro
          - ./logs:/var/log/myapp:ro
          - alloy-data:/var/lib/alloy/data
        depends_on: [loki]
    
    volumes:
      alloy-data:
  2. 2. Leer los archivos

    ¿Por qué? local.file_match encuentra los archivos, loki.source.file los lee y memoriza su posición.

    En config.alloy, lee /var/log/myapp/*.log con la etiqueta job=myapp.
    Ver la corrección
    local.file_match "app" {
      path_targets = [{ "__path__" = "/var/log/myapp/*.log", "job" = "myapp" }]
    }
    
    loki.source.file "app_logs" {
      targets    = local.file_match.app.targets
      forward_to = [loki.process.app.receiver]
    }
  3. 3. Procesar las líneas

    ¿Por qué? stage.labels toma un valor extraído; un valor fijo requiere stage.static_labels.

    Extrae level del JSON para convertirlo en etiqueta, añade env=production y conserva msg como texto.
    Ver la corrección
    loki.process "app" {
      forward_to = [loki.write.local_loki.receiver]
    
      stage.json {
        expressions = { level = "", msg = "" }
      }
    
      stage.labels {
        values = { level = "" }
      }
    
      stage.static_labels {
        values = { env = "production" }
      }
    
      stage.output {
        source = "msg"
      }
    }
  4. 4. Enviar a Loki

    ¿Por qué? En la red de Compose, a Loki se llega por su nombre de servicio.

    Añade el componente de envío.
    Ver la corrección
    loki.write "local_loki" {
      endpoint {
        url = "http://loki:3100/loki/api/v1/push"
      }
    }
  5. 5. Comprobar

    ¿Por qué? Un componente healthy no demuestra que lleguen los datos.

    Crea un archivo de logs, inicia la pila y consulta Loki: debes ver las etiquetas env y level, y los textos paiement refusé y commande créée.
    Ver la corrección
    mkdir -p logs
    cat >> logs/app.log <<'EOF'
    {"level":"error","msg":"paiement refusé"}
    {"level":"info","msg":"commande créée"}
    EOF
    docker compose up -d
    sleep 20
    curl -s http://localhost:3100/loki/api/v1/labels
    curl -s -G http://localhost:3100/loki/api/v1/query_range \
      --data-urlencode 'query={job="myapp",env="production"}' \
      --data-urlencode "start=$(( $(date +%s)-600 ))000000000"

Nivel de dificultad : ●●○○○ (2/5)

Mi seguimiento

  • ⏱ Duración estimada : ≈ 30 min

Inicia sesión para seguir tu progreso y tomar notas. Iniciar sesión

💬 Hacer una pregunta

Glossaire de la formation

Observabilidad

La capacidad de conocer el estado interno de un sistema a partir de los datos que emite.Estos datos se clasifican en 3 pilares: logs (registros)métric...

Trazas distribuidas

Técnica (proveniente del pilar de Trazas) que permite seguir el recorrido completo de una solicitud a través de múltiples microservicios para identifi...

Métricas

Medidas numéricas recopiladas a intervalos regulares (ej: CPU, RAM, tiempo de respuesta) utilizadas para evaluar el estado de salud general de un sist...

Perfilado continuo (Continuous Profiling)

Análisis constante de la ejecución de código en producción para identificar con precisión qué líneas de código o funciones consumen más recursos (CPU,...

Access Log (Registro de acceso)

Archivo de registro que guarda las solicitudes procesadas por un servidor web (Apache, Nginx, Lighttpd, etc.). Permite rastrear la actividad del servi...

Client IP (IP del Cliente)

La dirección IP del usuario que realiza la solicitud hacia el servidor web. Cuando un usuario pasa por un Load Balancer o un proxy (ej: Cloudflare), l...

Timestamp (Marca de tiempo)

La fecha y la hora exactas en las que el servidor recibió la solicitud.Configuración: %t en Apache, $time_local o $time_iso8601 en Nginx.

Request (Solicitud)

La línea de solicitud inicial del cliente. Generalmente incluye el método HTTP (ej: GET), la URL solicitada y la versión del protocolo HTTP.Configurac...

Status Code (Código de estado)

El código de estado HTTP final devuelto por el servidor al cliente (ej: 200 para un éxito, 404 para recurso no encontrado).Configuración: %>s en Apach...

Size (Tamaño)

El volumen de datos devuelto al cliente, medido en bytes (generalmente sin los encabezados HTTP).Configuración: %b u %O en Apache, $body_bytes_sent en...

Referrer (Referente)

La URL de la página web desde la que el cliente hizo clic o siguió un enlace para acceder al recurso actual.Configuración: %{Referer}i en Apache, $htt...

User-Agent

La información de identificación proporcionada por el cliente sobre su navegador, su sistema operativo y su dispositivo. Su estructura estándar a menu...

Response Time (Tiempo de respuesta)

El tiempo total que tarda el servidor en procesar la solicitud y devolver la respuesta al cliente.Configuración: %D (microsegundos) o %T (segundos) en...

Artículos recomendados

Grafana Alloy et les logs : collecter et envoyer vers Loki

Découvrez comment configurer Grafana Alloy pour lire des fichiers de logs, journald ou des flux r...

La stack LGTM (Loki, Grafana, Tempo, Mimir) : architecture et mise en place

Comprendre la stack LGTM de Grafana Labs : Loki pour les logs, Grafana pour la visualisation, Tem...

Référence des Composants Grafana Alloy

Un guide de référence complet sur tous les composants disponibles dans Grafana Alloy, organisé pa...

Collecter des logs vers Loki : Alloy, Promtail, Docker et OpenTelemetry

Envoyer des logs vers Loki : Grafana Alloy, Promtail, driver Docker, OTLP, bons labels, parsing e...

Grafana Alloy : Collecte et Transformation de Télémétrie

Apprenez à utiliser Grafana Alloy pour collecter, transformer et acheminer logs, métriques et tra...

Grafana Loki : le système de logs inspiré de Prometheus

Découvrir Grafana Loki : philosophie d'indexation par labels, architecture (distributor, ingester...

Alerter sur les logs avec le Ruler de Loki

Mettre en place des alertes et des recording rules LogQL avec le Ruler Loki : configuration, fich...

Corréler traces, logs, métriques et profils dans Grafana

Relier Tempo aux logs (Loki), aux métriques (Prometheus) et aux profils (Pyroscope) : tracesToLog...

Grafana Alloy : Guide complet pour collecter métriques, logs et traces

Tutoriel complet sur Grafana Alloy. Découvrez comment installer, configurer et utiliser ce collec...

Apoyar

♥ APOYAR

Apoya RousselTM Learning

Los cursos, artículos, prácticas y certificados siguen siendo gratuitos y sin publicidad intrusiva. Una contribución libre, por el importe que elijas, financia el alojamiento, los entornos de prácticas y nuevos contenidos.

Contribuir con PayPal Importe libre · tarjeta o cuenta PayPalMás información
QR code PayPal
O escanea este código QR con tu teléfono

¡Gracias, cada contribución cuenta!