Journalctl est un excellent outil d'analyse des journaux, généralement l'un des premiers à se familiariser avec les futurs administrateurs Linux. Les capacités de rotation intégrées, les capacités de filtrage riches et la possibilité d'afficher les journaux de tous les services de l'unité systemd avec un seul outil sont très pratiques et facilitent grandement le travail des administrateurs système.
Cet article couvre les principales fonctionnalités de journalctl et comment il peut être utilisé. En utilisant journalctl, vous pouvez afficher les journaux système pour résoudre les problèmes survenus sur un poste de travail ou un serveur en utilisant une distribution Linux avec le démon d'initialisation systemd, qui est déjà devenu un standard de facto dans les systèmes Linux modernes, par exemple: RHEL, CentOS, Fedora, Debian et bien d'autres.
Il y a une perception que systemd n'est pas si génial - il charge le système et est encore un sujet de controverse aujourd'hui, mais on ne peut nier qu'il fournit un excellent ensemble d'outils pour la gestion du système et le dépannage. Imaginez avoir à gérer un serveur problématique qui ne démarre même pas, auquel cas vous pouvez démarrer à partir de la distribution en direct, monter la partition système et consulter les journaux systemd pour voir quel est le problème.
Systemd
Systemd a trois composants principaux:
- systemd - gestionnaire de système et de service
- systemctl - utilitaire pour visualiser et gérer l'état des services
- systemd-analyser - fournit des statistiques sur le processus de démarrage du système, vérifie l'exactitude des fichiers d'unité et dispose également de capacités de débogage systemd
Journald
Journald est le démon de journalisation de systemd. Systemd est conçu pour gérer de manière centralisée les journaux système des processus, des applications, etc. Tous ces événements sont gérés par le démon journald, il collecte les journaux de l'ensemble du système et les enregistre dans des fichiers binaires.
La journalisation centralisée des événements dans un format binaire présente de nombreux avantages, par exemple, les journaux système peuvent être traduits dans différents formats, tels que du texte brut ou JSON, si nécessaire. Il est également assez facile de retracer le journal jusqu'à un seul événement à l'aide de filtres de date et d'heure.
Les fichiers journaux Journald peuvent collecter des milliers d'événements et ils sont mis à jour à chaque nouvel événement, donc si votre système Linux fonctionne suffisamment longtemps, la taille des fichiers journaux peut atteindre plusieurs gigaoctets ou plus. Par conséquent, l'analyse de ces journaux peut se produire avec des retards.Dans ce cas, lors de l'analyse des journaux, vous pouvez filtrer la sortie pour accélérer le travail.
Fichier de configuration Journald
Le fichier de configuration se trouve dans le chemin suivant: /etc/systemd/journald.conf, il contient divers paramètres pour journald, je ne recommanderais pas de changer ce fichier à moins que vous ne soyez sûr de ce que vous faites.
Le répertoire avec le journal journald se trouve dans / run / log / journal (dans le cas où le stockage persistant des journaux n'est pas configuré, mais nous en parlerons plus tard).
Les fichiers sont stockés au format binaire, il est donc normal de les visualiser en utilisant cat ou nano, comme de nombreux administrateurs y sont habitués, cela ne fonctionnera pas.
Utilisation de journalctl pour afficher et analyser les journaux
Commande de base pour afficher:
# journalctl
Il imprimera toutes les entrées de tous les journaux, y compris les erreurs et les avertissements, à partir du moment où le système a commencé à démarrer. Les enregistrements d'événements plus anciens seront en haut, les plus récents en bas, vous pouvez utiliser PageUp et PageDown pour vous déplacer dans la liste, Entrée pour faire défiler le journal ligne par ligne et Q pour quitter.
Par défaut, journalctl affiche l'heure des événements en fonction du fuseau horaire configuré dans votre système, également journalctl vous permet de visualiser les journaux avec l'heure UTC (dans ce standard de temps, les événements sont stockés dans des fichiers journald), pour cela, vous pouvez utiliser la commande:
# journalctl --utc
Filtrer les événements par importance
Le système enregistre les événements avec différents niveaux d'importance, certains événements peuvent être un avertissement qui peut être ignoré, d'autres peuvent être des erreurs critiques. Si nous voulons afficher uniquement les erreurs, en ignorant les autres messages, entrez la commande indiquant le code de
gravité : # journalctl -p 0
Pour les niveaux de gravité , la notation suivante est acceptée:
- 0: urgence
- 1: alertes (alertes nécessitant une attention immédiate)
- 2: critique
- 3: erreurs
- 4: avertissement
- 5: avis
- 6: info (messages d'information)
- 7: débogage (messages de débogage)
Lorsque vous spécifiez un code de gravité, journalctl imprimera tous les messages avec ce code de gravité et plus. Par exemple, si nous spécifions l'option -p 2, journalctl affichera tous les messages avec les niveaux 2, 1 et 0.
Configuration du stockage des journaux
Par défaut, journald écrase ses journaux à chaque redémarrage, et l'appel de journalctl imprimera les journaux à partir du démarrage actuel du système.
Si vous devez configurer l'enregistrement permanent des journaux, vous devrez le configurer séparément, car les développeurs ont abandonné le stockage permanent de tous les logs afin de ne pas dupliquer rsyslog.
Lorsque le paramètre Storage = est défini sur auto) dans le fichier de configuration /etc/systemd/journald.conf et que le répertoire / var / log / journal / n'existe pas, le journal sera écrit dans / run / log / journal sans enregistrement entre les redémarrages si / var / log / journal / existe, les journaux y seront enregistrés de manière permanente, mais si le répertoire est supprimé, systemd ne le recréera pas automatiquement et se reconnectera à / run / systemd / journal sans enregistrer. Le répertoire peut être recréé dans ce cas en ajoutant Storage = persistent à journald.conf et en redémarrant systemd-journald.service (ou en redémarrant).
Créez un répertoire pour stocker les journaux, définissez les attributs nécessaires et redémarrez le service:
# mkdir /var/log/journal
# systemd-tmpfiles --create --prefix /var/log/journal
# systemctl restart systemd-journald
Afficher les journaux de téléchargement
Si journald a été configuré pour stocker les journaux de manière persistante, nous pouvons afficher les journaux pour chaque téléchargement individuel, la commande suivante répertorie les journaux:
# journalctl --list-boots
Le premier numéro indique le numéro de journal qui peut être utilisé pour afficher le journal d'une session spécifique. Le deuxième ID de démarrage peut également être utilisé pour afficher un journal distinct.
Les deux dates suivantes, la période pendant laquelle les journaux y ont été écrits, cela est pratique si vous souhaitez rechercher des journaux pour une certaine période.
Par exemple, pour afficher le journal depuis le démarrage actuel du système, vous pouvez utiliser la commande:
# journalctl -b 0
Et pour afficher le journal du téléchargement précédent:
# journalctl -b -1
Afficher le journal pour une période de temps spécifique
Journalctl vous permet d'utiliser des mots tels que «hier», «aujourd'hui», «demain» ou «maintenant».
Par conséquent, nous pouvons utiliser l'option "--since" (à partir du début de quelle période pour afficher le journal).
À partir d'une date et d'une heure spécifiques:
# journalctl --since "2020-12-18 06:00:00"
D'une date précise à une date et une heure spécifiques:
# journalctl --since "2020-12-17" --until "2020-12-18 10:00:00
Depuis hier:
# journalctl --since yesterday
De 9h à l'instant, il y a une heure:
# journalctl --since 09:00 --until "1 hour ago"
Affichage des messages du noyau
Pour afficher les messages du noyau Linux pour le démarrage actuel, utilisez la commande avec le commutateur -k:
# journalctl -k
Affichage des journaux pour un service ou une application systemd spécifique
Vous pouvez filtrer les journaux par service systemd spécifique. Par exemple, pour afficher les journaux de NetworkManager, vous pouvez utiliser la commande suivante:
# journalctl -u NetworkManager.service
Si vous avez besoin de trouver le nom du service, utilisez la commande:
# systemctl list-units --type=service
Vous pouvez également afficher le journal de l'application en spécifiant son fichier exécutable, par exemple, pour afficher tous les messages de nginx pour aujourd'hui, nous pouvons utiliser la commande:
# journalctl /usr/sbin/nginx --since today
Ou en spécifiant un PID spécifique:
# journalctl _PID=1
Options d'affichage supplémentaires
Surveillez les nouveaux messages (similaire à tail -f):
# journalctl -f
Ouvrez le journal en le "rembobinant" jusqu'à la dernière entrée:
# journalctl -e
S'il y a beaucoup de données dans le répertoire avec les journaux, le filtrage de la sortie journalctl peut prendre un certain temps, le processus peut être considérablement accéléré en utilisant l'option --file, en spécifiant journalctl uniquement le journal que nous devons surveiller:
journalctl --file /var/log/journal/e02689e50bc240f0bb545dd5940ac213/system.journal -f
Par défaut, journalctl coupe les portions de lignes qui ne correspondent pas à la largeur de l'écran, bien que parfois un retour à la ligne soit préférable. Cette fonctionnalité est contrôlée par la variable d'environnement SYSTEMD_LESS, qui contient les options passées à less (le programme de pagination par défaut). Par défaut, la variable est FRSXMK, si vous supprimez l'option S, les lignes ne seront pas tronquées.
Par exemple:
SYSTEMD_LESS=FRXMK journalctl
Limiter la taille du journal
Si journald est configuré pour enregistrer les journaux après le redémarrage, alors par défaut, la taille du journal est limitée à 10% du volume de la partition de fichiers et peut occuper un maximum de 4 Go d'espace disque.
La taille maximale du journal peut être ajustée en supprimant les commentaires et en modifiant le paramètre suivant dans le fichier de configuration journald:
SystemMaxUse=50M
Suppression des journaux
Vous pouvez supprimer manuellement les fichiers journaux archivés avec rm ou en utilisant journalctl.
Supprimer les journaux en ne laissant que les 100 derniers Mo:
# journalctl --vacuum-size=100M
Supprimer les journaux, ne laissant que les journaux des 7 derniers jours:
# journalctl --vacuum-time=7d
Conclusion
Le service de journalisation journald est un outil très puissant et flexible, et si vous savez l'utiliser, il peut vous faciliter la vie tout en recherchant les causes des problèmes avec le système ou ses services.