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
Pipeline de logs #
Pasos guiados, con su corrección.
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. Leer los archivos
¿Por qué?
Enlocal.file_matchencuentra los archivos,loki.source.filelos lee y memoriza su posición.config.alloy, lee/var/log/myapp/*.logcon la etiquetajob=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. Procesar las líneas
¿Por qué?
Extraestage.labelstoma un valor extraído; un valor fijo requierestage.static_labels.leveldel JSON para convertirlo en etiqueta, añadeenv=productiony conservamsgcomo 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. 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. Comprobar
¿Por qué? Un componente
Crea un archivo de logs, inicia la pila y consulta Loki: debes ver las etiquetashealthyno demuestra que lleguen los datos.envylevel, y los textospaiement refuséycommande 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
Inicia sesión para seguir tu progreso y tomar notas. Iniciar sesión
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 : Collecter les métriques système et les logs locaux
Découvrez comment configurer Grafana Alloy pour superviser le serveur sur lequel il s'exécute, av...
Grafana Alloy vs Grafana Agent vs Promtail : Lequel choisir ?
Découvrez l'évolution des collecteurs de télémétrie de l'écosystème Grafana. Comparatif détaillé ...
Grafana Loki vs Elasticsearch : La bataille du stockage de logs
Comparatif entre Loki, le système de logs inspiré par Prometheus, et Elasticsearch, le moteur de ...
Grafana Alloy : L'importance de l'auto-supervision (Self-Monitoring)
Découvrez pourquoi et comment configurer Grafana Alloy pour qu'il se supervise lui-même, en colle...
LogQL (1/2) : requêter les logs (sélecteurs, filtres et parsers)
Apprendre LogQL : sélecteurs de flux, filtres de ligne, parsers json/logfmt/pattern/regexp, filtr...
LogQL (2/2) : transformer les logs en métriques
Créer des métriques à partir des logs avec LogQL : rate, count_over_time, bytes_rate, agrégations...
Bonnes pratiques de collecte de logs avec Fluent Bit et Vector
Check-list de production pour la collecte de logs : structure, filtrage à la source, masquage, ta...
Fluent Bit : les outputs (sorties), routage et fiabilité de l'envoi
Envoyer les données de Fluent Bit : routage par Match et Match_Regex, sorties Loki, Elasticsearch...
Projet fil rouge : les quatre signaux de l'OpenTelemetry Demo dans la stack Grafana
Un projet fil rouge qui traverse les formations d'observabilité : déployer l'OpenTelemetry Demo, ...