Guide du Routage Multi-destination avec Logspout pour les Journaux de Conteneurs Docker

Logspout est un outil conçu pour router les journaux des conteneurs Docker, offrant la possbiilité de diffuser les logs vers plusieurs systèmes en parallèle. En intégrant des mécanismes de configuration flexibles, il simplifie la gestion des flux de journaux dans des environnements distribués.

Raisons d'utiliser un routage multi-destination

Dans une architecture microservices, il est courant de devoir :

  • Envoyer les journaux critiques vers Elasticsearch pour l'analyse
  • Transmettre les erreurs en temps réel à Slack pour les alertes
  • Sauvegarder tous les logs sur un serveur Syslog
  • Écrire les journaux de dévelopement dans un système de fichiers local

Configuration initiale : URIs séparées par des virgules

La méthode la plus directe consiste à lister plusieurs URIs dans la commande :

docker run -v /var/run/docker.sock:/var/run/docker.sock \
    monregistre/logspout \
    raw://10.0.0.15:4500?filter.name=*_db,syslog+tls://serveur-logs.example.com:5555?filter.name=*_app

Cette configuration dirige les journaux des conteneurs dont le nom se termine par _db vers un hôte raw, et ceux terminant par _app vers un serveur Syslog sécurisé.

Filtrage avancé pour un contrôle précis

Par nom de conteneur :

docker run -v /var/run/docker.sock:/var/run/docker.sock \
    monregistre/logspout \
    raw://192.168.1.50:6000?filter.name=*_backend

Par source de journal :

docker run -v /var/run/docker.sock:/var/run/docker.sock \
    monregistre/logspout \
    raw://192.168.1.50:6000?filter.sources=stdout%2Cstderr

Par étiquettes :

docker run -v /var/run/docker.sock:/var/run/docker.sock \
    monregistre/logspout \
    raw://192.168.1.50:6000?filter.labels=env:prod%2Crole:api

Gestion dynamique via l'API REST

Logspout expose une API HTTP pour modifier les routes à chaud :

curl -X POST \
  -H "Content-Type: application/json" \
  -d '{
    "adapter": "syslog",
    "address": "logs.fournisseur.com:5555",
    "filter_name": "*_api",
    "filter_sources": ["stdout"],
    "options": {
      "append_tag": ".api-gateway"
    }
  }' \
  http://localhost:8080/routes

Pour lister les routes existantes :

curl http://localhost:8080/routes

Scénarios de configuration pratiques

Environnement de développement :

docker run -v /var/run/docker.sock:/var/run/docker.sock \
    monregistre/logspout \
    raw://localhost:4000?filter.name=*_dev,syslog://syslog-interne:514?filter.name=*_microservice

Haute disponbiilité en production :

docker run -v /var/run/docker.sock:/var/run/docker.sock \
    monregistre/logspout \
    syslog+tls://principal.logs.com:6514,syslog+tls://secondaire.logs.com:6514

Bonnes pratiques et astuces

Priorité des routes : Lorsque plusieurs routes correspondent à un conteneur, elles sont traitées dans l'ordre de configuration. Placez les routes les plus spécifiques en premier.

Optimisation des performances : Utilisez BACKLOG=false pour ignorer les journaux historiques et ajustez INACTIVITY_TIMEOUT pour détecter les flux inactifs.

Exclusion de conteneurs : Désactivez le routage pour un conteneur avec :

docker run -d -e 'LOGSPOUT=ignore' mon-app

Traitement des logs multi-lignes : Pour les piles d'erreurs comme Java :

docker run -v /var/run/docker.sock:/var/run/docker.sock \
    monregistre/logspout \
    multiline+raw://agregateur-logs:5000

Avantages clés

La fonctionnalité multi-destination de Logspout offre :

  • Flexibilité via une variété d'adaptateurs et protocoles
  • Extensibilité grâce à une architecture modulaire
  • Simplicité de configuration par des URIs
  • Réalité du routage sans délai
  • Fiabilité avec reconnexion automatique et récupération des pannes

Étiquettes: logspout Docker routage-journaux syslog api-rest

Publié le 1 juin à 22h58