Table des matières

Problèmes et solutions

Logstash & syslog


:!: EDIT : Suite à des problèmes pour récupérer les noms de conteneurs avec rsyslog (voir ici), nous avons finalement décidé d’implémenter la solution utilisant Logspout


La première approche adoptée lorsque nous avons mis en place l’infrastructure de monitoring des services, a été d’utiliser le log-driver syslog au lancement des services. De cette manière, chaque service aurait été capable d’envoyer ses logs (“par lui même”) directement à Logstash.

Pour se faire il est nécessaire de lancer les conteneurs Docker avec les flags suivants:

docker run \
 --log-driver=syslog \
 --log-opt syslog-address=tcp://<SyslogServerIP>:1234
 \ <image> <command>

Le problème quand les services reportent leurs logs directement à l’instance de Logstash est dû au principe adopté par Docker, qui stipule qu’aucun message de log ne doit être perdu. De ce fait, un service ne pouvant pas reporter ses messages de logs à Logstash est amené à crasher et redémarrer jusqu’à ce qu’il puisse reporter ses messages de log. Ainsi, si Logstash ne tourne pas, ce sont tous les services de Picasoft qui risquent de ne plus pouvoir reporter leurs messages de log et donc qui risquent de crasher. On voit donc que la VM de monitoring devient un point de faille de l’infrastructure de Picasoft dans son intégralité.

Pour corriger ce problème, nous avons pensé utiliser:

Avantages et inconvénients de chaque solution

Logspout:

Rsyslog

plus de détails

Ainsi, étant une solution built-in à notre problème de report de log entre les conteneurs Docker et Logstash il nous a paru de bonne augure de la choisir pour l’implémentation finale de l’infrastructure de monitoring. De cette manière, nos services Docker peuvent reporter leurs logs sur la machine hôte sur laquelle ils s’exécutent, et c’est Rsyslog qui, ensuite, prend le relais pour envoyer les messages de logs des conteneurs Docker à l’instance Logstash.

Ainsi, travailler avec Rsyslog et journald nous a demandé plus de temps de configuration que de travailler simplement avec des solutions conteneurisées (propres à Docker). Toutefois, l’utilisation d’un logiciel par défaut de la machine nous a semblé être la meilleure solution pour limiter les risques liés au reporting des messages de log.