web-dev-qa-db-fra.com

Relation entre rsyslog et journald sur Ubuntu 16.04

J'utilise un serveur Vanilla Ubuntu 16.04 et j'essaie de comprendre comment la journalisation est configurée par défaut. Je peux voir que journald et rsyslog sont installés et en cours d’exécution, mais la façon dont les messages de journalisation sont traités n’est pas claire.

La plupart des messages semblent apparaître à la fois dans /var/log/syslog et via journalctl, mais je ne vois aucune configuration explicite pour le transfert entre les deux dans /etc/systemd/journald.conf (qui est essentiellement tous commentés par défaut), /etc/rsyslog.conf ou /etc/rsyslog.d/50-default.conf. J'ai essayé de chercher de la documentation officielle, voire un billet de blog expliquant comment ces deux éléments sont configurés dans Ubuntu, mais je n'ai rien trouvé.

Pour ajouter à ma confusion, j'ai exécuté logger -p local1.info Test sur l'hôte et constaté que rien n'avait été écrit dans /var/log/syslog, alors que le message était affiché sous journalctl.

Mes questions sont:

  1. Comment journald et rsyslog travaillent-ils ensemble sur Ubuntu 16.04 (par défaut)?
  2. Comment se fait-il que les messages envoyés depuis logger finissent apparemment dans le journal, mais pas dans syslog?

Mise à jour: Il s'avère que logger ne fonctionnant pas comme prévu était une erreur de mon côté, ce n'est donc pas pertinent pour la question principale.

14
motns

Par défaut, rsyslogutilise le module "imuxsock", le module fournit:

la possibilité d'accepter des messages syslog via des sockets Unix locales. Plus important encore, il s’agit du mécanisme par lequel l’appel syslog (3) transmet des messages syslog à rsyslogd [1] .

Il est possible pour rsyslogd'importer des messages de journal structurés depuis systemd-journal en utilisant un module nommé "imjournal" [2] .

Il peut être chargé comme:

module(load="imjournal") 

dans:

/etc/rsyslog.conf

D'autre part, "systemd-journald" capture toutes les données elles-mêmes:

man systemd-journald

systemd-journald est un service système qui collecte et stocke les données de journalisation. Il crée et gère des journaux structurés et indexés en fonction des informations de journalisation reçues de diverses sources:

   ·   Kernel log messages, via kmsg
   ·   Simple system log messages, via the libc syslog(3) call
   ·   Structured system log messages via the native Journal API, 
       see sd_journal_print(4)
   ·   Standard output and standard error of system services
   ·   Audit records, via the audit subsystem

Vous pouvez désactiver rsyslogdtant que vous avez toujours accès aux journaux système à l'aide de journalctlname__.

$ Sudo systemctl mask rsyslogd
$ Sudo systemctl stop syslog.socket
$ Sudo systemctl stop rsyslog.service
$ systemctl is-active rsyslog.service 
inactive
$ logger -p mail.info Helllooo
$ journalctl

Par exemple, centos utilise le module "imuxsock" pour capturer toutes les données "systemd-journald" via rsyslogalors qu'opensuse n'a pas du tout "syslog".


Pour savoir pourquoi votre message ne s'est pas terminé par /var/log/syslog, vous devriez vérifier ce fichier:

less /etc/rsyslog.d/50-default.conf

cherchez *.info, voyez où ils seront stockés, ce pourrait être un autre fichier comme messagesname__.

Pour moi, il apparaît dans les noms journalctlet syslogname __.

12
Ravexina

Systemd est un système init utilisé pour démarrer les services au démarrage du système. Journald est responsable de la création de journaux pour les services démarrés par systemd. En intégrant journald à systemd, même les premiers messages de processus de démarrage sont disponibles pour journald.

Rsyslog est un démon spécialement conçu pour le traitement des journaux, rien à voir avec journald. Il peut prendre des journaux de plusieurs manières et les sortir de plusieurs manières. Il n’est pas activé par défaut qu’il prenne également des messages de journalisation. Pour cela, vous devez écrire dans le fichier /etc/rsyslog.conf,

$ModLoad imjournal # im -> input module
OR
load(type="imjournal")

Maintenant, il acceptera également les journaux de journal. Mais je vous suggère de ne pas modifier votre fichier /etc/rsyslog.conf.

À la fin du fichier /etc/rsyslog.conf, il y a une ligne écrite,

$IncludeConfig /etc/rsyslog.d/*.conf

Cela signifie que tous les fichiers ayant .conf à la fin du dossier /etc/rsyslog.d/ doivent être inclus lors du chargement de rsyslog. Donc, toutes vos configurations personnalisées devraient aller dans ces fichiers

Je vous suggère de créer un fichier /etc/rsyslog.d/journald.conf et de coller l’extrait ci-dessous dans celui-ci.

Ci-dessous l'extrait de la page officielle de rsyslog de imjournal

module(load="imjournal" PersistStateInterval="100"
   StateFile="/path/to/file") #load imjournal module
module(load="mmjsonparse") #load mmjsonparse module for structured logs

template(name="CEETemplate" type="string" string="%TIMESTAMP% %HOSTNAME% %syslogtag% @cee: %$!all-json%\n" ) #template for messages

action(type="mmjsonparse")
action(type="omfile" file="/var/log/ceelog" template="CEETemplate")

Ligne 1 - il charge le module imjournal d'acceptation des journaux de journald

2 - Le module mmjsonparse est chargé et est utilisé dans l'analyse des journaux

3 - Ils sont structurés dans le format décrit dans le modèle

4 - Il analyse ces journaux à l’aide du module mmjsonparse.

5 - Il envoie ces journaux dans un fichier, à savoir/var/log/ceelog, conformément à la structure fournie dans le modèle donné, à l’aide du module omfile (module de sortie fichier - sortie vers fichier).

Modifiez la configuration en fonction de vos besoins.

4
luv.preet