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:
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.
Par défaut, rsyslog
utilise 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 rsyslog
d'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 rsyslogd
tant que vous avez toujours accès aux journaux système à l'aide de journalctl
name__.
$ 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 rsyslog
alors 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 messages
name__.
Pour moi, il apparaît dans les noms journalctl
et syslog
name __.
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.