Exécution de Syslog Dans un conteneur Docker – Projet Atomic

Récemment, j’ai reçu un rapport de bogue sur Docker se plaignant de l’utilisation de rsyslogd dans un conteneur.

L’utilisateur a exécuté un conteneur RHEL7, installé rsyslog, démarré le démon, puis envoyé un message d’enregistreur, et rien ne s’est passé.

# docker run -it --rm rhel /bin/bash # yum -y install rsyslog # /usr/sbin/rsyslogd # logger "this is a test" 

Aucun message n’est apparu dans /var/log/messages dans le conteneur, ou sur la machine hôte d’ailleurs.

L’utilisateur a ensuite regardé et a remarqué que /dev/log n’existait pas et c’est là que logger écrivait le message. L’utilisateur pensait que c’était un bug.

Le problème était que dans RHEL7 et Fedora, nous utilisons maintenant journald, qui écoute sur /dev/log les messages entrants. Dans RHEL7 et Fedora, rsyslog lit par défaut les messages du journal via son API.

Mais tous les conteneurs docker n’exécutent pas systemd et journald. (La plupart ne le font pas). Pour que le rsyslogd fonctionne comme l’utilisateur le souhaitait, il devrait modifier le fichier de configuration, /etc/rsyslogd.conf:

  • Dans /etc/rsyslog.conf supprimer $ModLoad imjournal.
  • Définissez $OmitLocalLogging sur off.
  • Assurez-vous que $ModLoad imuxsock est présent.
  • Commentez également: $IMJournalStateFile imjournal.state.

Après avoir apporté ces modifications, rsyslogd commencera à écouter sur /dev/log dans le conteneur et les messages de l’enregistreur seront acceptés par rsyslogd et écrits sur /var/log/messages dans le conteneur.

Si vous souhaitez enregistrer des messages pour accéder à l’enregistreur hôte, vous pouvez monter en volume /dev/log dans le conteneur.

# docker run -v /dev/log:/dev/log -it --rm rhel /bin/bash # logger "this is a test" 

Le message doit apparaître dans le journal journalct de l’hôte, et si vous exécutez rsyslog sur l’hôte, le message doit se retrouver dans /var/log/messages.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.