DevOpsFacile
AccueilParcours de formationCertificationsModulesCheat SheetÀ Propos
DevOpsFacile

Une plateforme d'apprentissage complète pour maîtriser les pratiques DevOps modernes, du débutant à l'expert.

contact@devopsfacile.fr

Formation

  • Parcours de formation
  • Modules

Informations

  • À Propos
  • Conditions d'utilisation
  • Confidentialité
  • Mentions légales

© 2026 DevOps Facile. Tous droits réservés.

Fait avec pour la communauté DevOps

ModulesSurveiller ses applications avec Prometheus et Grafana05 - Centraliser les logs avec Loki et Promtail

Détails

  • 30 minutes
  • Intermédiaire

Objectifs

  • Déployer la stack Loki + Promtail + Grafana avec Docker Compose
  • Configurer Promtail pour collecter des logs locaux
  • Explorer les logs avec LogQL dans Grafana
Module Surveiller ses applications avec Prometheus et Grafana

Exercice 05 : Centraliser les logs avec Loki et Promtail

🎯 Objectifs

À la fin de cet exercice, vous serez capable de :

  • ✅ Déployer Loki, Promtail et Grafana avec Docker Compose
  • ✅ Configurer promtail-config.yml pour scraper des logs locaux
  • ✅ Ajouter Loki comme datasource dans Grafana
  • ✅ Explorer les logs avec des requêtes LogQL
  • ✅ Corréler métriques Prometheus et logs Loki dans un même dashboard

Durée estimée : 30 minutes

Difficulté : ⭐⭐⭐☆☆ (Intermédiaire)

Prérequis : Exercice 03 complété, notions de Docker Compose


📖 Contexte

Loki est un système d'agrégation de logs conçu par Grafana Labs. Contrairement à Elasticsearch, il n'indexe pas le contenu des logs mais uniquement leurs labels - ce qui le rend très économique en ressources. Promtail est l'agent qui collecte les logs et les envoie à Loki.


📋 Énoncé

Déployez la stack PLG (Promtail + Loki + Grafana), collectez les logs système, et explorez-les avec LogQL.


🧭 Déroulement de l'exercice

Tâche 1 : Créer le docker-compose.yml

Créez un docker-compose.yml avec 3 services : Loki (port 3100), Promtail, et Grafana (port 3000).

Indice :

`yaml

version: "3.8"

services:

loki:

image: grafana/loki:latest

ports: ["3100:3100"]

command: -config.file=/etc/loki/local-config.yaml

>

promtail:

image: grafana/promtail:latest

volumes:

- /var/log:/var/log:ro

- ./promtail-config.yml:/etc/promtail/config.yml

command: -config.file=/etc/promtail/config.yml

>

grafana:

image: grafana/grafana-oss:latest

ports: ["3000:3000"]

environment:

- GF_SECURITY_ADMIN_PASSWORD=admin

`

Vérification : docker compose up -d démarre les 3 services. curl http://localhost:3100/ready retourne ready.


Tâche 2 : Configurer Promtail

Créez promtail-config.yml pour collecter les logs du fichier /var/log/syslog (ou /var/log/messages selon la distribution) et les envoyer à Loki.

Indice :

`yaml

server:

http_listen_port: 9080

>

positions:

filename: /tmp/positions.yaml

>

clients:

- url: http://loki:3100/loki/api/v1/push

>

scrape_configs:

- job_name: system

static_configs:

- targets:

- localhost

labels:

job: varlogs

host: devopsfacile

__path__: /var/log/*.log

`

Vérification : docker compose logs promtail ne montre pas d'erreurs. curl http://localhost:9080/metrics | grep promtail_read_lines_total retourne un compteur.


Tâche 3 : Ajouter Loki comme datasource Grafana

Dans Grafana (http://localhost:3000) : Connections → Data sources → Add new data source → Loki. URL : http://loki:3100. Cliquez Save & Test.

Indice : Si Grafana et Loki sont dans le même réseau Docker Compose, utilisez le nom de service loki comme hostname. Le test affiche "Data source connected and labels found."

Vérification : La datasource Loki est configurée et le test réussit avec le message de succès.


Tâche 4 : Explorer les logs avec LogQL

Dans Grafana : Explore → sélectionner Loki. Exécutez ces requêtes LogQL :

  • {job="varlogs"} : tous les logs du job
  • {job="varlogs"} |= "error" : logs contenant "error"
  • {job="varlogs"} | json | level = "warn" : filtrage JSON
  • rate({job="varlogs"}[5m]) : taux de logs par seconde

Indice : Le sélecteur de stream {} est obligatoire. |= filtre par contenu texte. | json parse les logs JSON. rate() sur un log stream donne le débit de logs.

Vérification : Des logs s'affichent pour chaque requête. Le timeline en haut montre la distribution temporelle.


Tâche 5 : Corréler métriques et logs

Créez un dashboard Grafana qui affiche côte à côte :

  • Un panel Time series (datasource: Prometheus) : rate(prometheus_http_requests_total[5m])
  • Un panel Logs (datasource: Loki) : {job="varlogs"}

Configurez les deux panels sur la même plage temporelle.

Indice : Dans un dashboard, ajoutez un panel de type Logs (pas Time series). Sélectionnez Loki comme datasource. Activez l'option Time range synchronisée dans les paramètres du dashboard pour lier les plages de temps des 2 panels.

Vérification : Les 2 panels se mettent à jour en même temps quand vous changez la plage de temps dans le dashboard.


🗂️ Mini-Projet

Ajoutez la collecte des logs des conteneurs Docker dans Promtail :

yaml
# Dans promtail-config.yml, ajoutez un second scrape_config
  - job_name: docker
    docker_sd_configs:
      - host: unix:///var/run/docker.sock
        refresh_interval: 5s
    relabel_configs:
      - source_labels: ['__meta_docker_container_name']
        regex: '/(.*)'
        target_label: container

Montez le socket Docker dans Promtail :

yaml
# Dans docker-compose.yml, pour le service promtail
volumes:
  - /var/run/docker.sock:/var/run/docker.sock

Checkpoints :

  • Promtail collecte les logs des fichiers /var/log/*.log
  • Loki reçoit les logs (visible dans Grafana Explore)
  • Les requêtes LogQL avec filtre |= fonctionnent
  • Le dashboard mixe métriques Prometheus et logs Loki

Retour au module

Sur cette page

  • 🎯 Objectifs
  • 📖 Contexte
  • 📋 Énoncé
  • 🧭 Déroulement de l'exercice
  • Tâche 1 : Créer le docker-compose.yml
  • Tâche 2 : Configurer Promtail
  • Tâche 3 : Ajouter Loki comme datasource Grafana
  • Tâche 4 : Explorer les logs avec LogQL
  • Tâche 5 : Corréler métriques et logs
  • 🗂️ Mini-Projet