GNU/Linux >> Tutoriels Linux >  >> Linux

Lisez et analysez vos journaux système Linux avec Journalctl

Ce n'est pas parce que vous n'obtenez pas d'erreurs sur votre système que tout fonctionne bien. Pourquoi ne pas lire et analyser vos journaux système Linux pour voir ce qui se passe avec votre système ? Vous ne savez pas comment ? Heureusement pour vous, Journalctl est à la hauteur !

Dans ce didacticiel, vous apprendrez à surveiller de près le comportement de votre système avec l'outil journalctl en lisant et en analysant les fichiers journaux du journal de systemd.

Continuez à lire et gardez votre système à son meilleur !

Prérequis

Ce tutoriel sera une démonstration pratique. Si vous souhaitez suivre, assurez-vous d'avoir les éléments suivants.

  • Une machine Linux :cette démo utilise Ubuntu 20.04 LTS, mais vous pouvez utiliser n'importe quelle distribution.
  • Un compte non root avec des privilèges sudo.

Réglage de l'heure système correcte

Avant de pouvoir utiliser Journalctl, vous devez régler l'heure de votre système. Les horodatages enregistrés dans le journal systemd sont en UTC, vous devez donc sélectionner le fuseau horaire correct. Si votre temps n'est décalé que de quelques secondes, certaines entrées du journal peuvent ne pas s'afficher correctement lorsque vous les utiliserez ultérieurement.

1. Ouvrez votre terminal et exécutez le timedatectl commande ci-dessous pour obtenir une liste des fuseaux horaires disponibles.

timedatectl list-timezones

Choisissez et notez-en un dans la liste ci-dessous qui correspond à votre région. Par exemple, si vous vivez en Amérique, choisissez le fuseau horaire qui correspond à la ville la plus proche.

2. Ensuite, exécutez la commande ci-dessous pour définir votre fuseau horaire (set-timezone ). Remplacer your-zone avec le nom du fuseau horaire que vous avez précédemment choisi (première étape). Cette commande définit l'heure de votre système sur le fuseau horaire que vous avez choisi.

À partir de maintenant, chaque entrée de journal sera enregistrée en tant que votre heure locale.

sudo timedatectl set-timezone your-zone

3. Enfin, exécutez la commande suivante pour vérifier que vous avez correctement défini le fuseau horaire.

timedatectl status

Comme indiqué ci-dessous, la date et l'heure actuelles du système doivent correspondre à la région et au fuseau horaire que vous avez sélectionnés.

Afficher tous les journaux

Maintenant que le réglage du fuseau horaire est terminé, vous pouvez commencer à afficher les journaux dans votre système. Le Systemd System and Service Manager fournit une gestion centralisée des démons de journalisation, qui collecte les journaux de divers composants/outils du système.

Mais comment visualisez-vous les journaux ? L'utilitaire journalctl vous permet de visualiser les journaux de votre machine. Et la première chose que vous voulez généralement faire est de montrer tout ce qui s'est passé depuis le dernier démarrage.

Exécutez le journalctl commande ci-dessous pour afficher tous les journaux du démon journald.

L'utilitaire journalctl implémente l'interface de ligne de commande du démon journald pour collecter et afficher le journal systemd. L'utilitaire journalctl permet aux utilisateurs d'introspecter l'activité et l'état de toute unité gérée par systemd (service, processus, etc.).

 sudo journalctl 

La commande affiche l'intégralité du journal ci-dessous, et c'est un peu difficile à lire. Les journaux les plus anciens sont en haut de la liste, tandis que les journaux les plus récents sont en bas.

Vous aurez probablement des centaines ou des milliers d'entrées si le journal systemd enregistre les journaux depuis assez longtemps.

Vous pouvez utiliser d'autres paramètres pour filtrer les journaux, mais vous n'aborderez pas ces filtres ici car ce sujet dépasse ce didacticiel.

Étant donné que vous souhaitez probablement parcourir la liste de manière plus sélective, une page flèches haut/bas serait bien. Appuyez sur K pour sauter une page et J pour descendre d'une page. Appuyez sur FIN pour passer à la dernière page.

Notez que les horodatages au début de chaque entrée correspondent à votre heure locale puisque vous avez précédemment défini votre fuseau horaire dans la section "Réglage de l'heure système correcte" (étape 2).

Rendre le journal persistant

Vous avez vu comment afficher tous les journaux, mais vous souhaitez généralement conserver les journaux plus longtemps, vous avez donc plus de chances de trouver des données sur des problèmes qui se produisent rarement. Comment? En rendant le journal persistant.

Le /run/log/journal/ Le répertoire est l'emplacement par défaut des données du journal et n'est pas persistant par défaut. Dès que vous redémarrez le système, tous les journaux ont disparu. L'idée de la journalisation persistante est de conserver tous les fichiers journaux, mais les journaux plus anciens sont archivés lorsqu'ils deviennent trop volumineux.

Pour rendre le journal persistant entre les démarrages, vous modifierez le fichier /etc/systemd/journald.conf fichier et configurez-le pour utiliser un emplacement de stockage persistant.

1. Ouvrez le fichier /etc/systemd/journald.conf fichier avec votre éditeur de texte préféré et recherchez Storage=auto directive, comme indiqué ci-dessous.

2. Ensuite, modifiez le stockage valeur de la directive de auto à persistant , puis enregistrez les modifications et fermez l'éditeur. Gardez le stockage directive sur une ligne et aucun espace entre la directive et la valeur, sinon la configuration ne fonctionnera pas.

3. Exécutez la commande suivante pour redémarrer le systemd-journald service pour activer toutes les modifications. Cette commande n'imprime pas la sortie, mais redémarre votre machine et ouvre un autre terminal une fois cette commande terminée.

À ce stade, systemd ignorera /run/log/journal et à la place stocker les données du journal dans le /var/log/journal répertoire, afin que votre journal de journal devienne persistant entre les démarrages.

Lorsque vous démarrez le systemd-journald service, il crée automatiquement le répertoire /var/log/journal s'il n'existe pas.

sudo systemctl restart systemd-journald

4. Maintenant, exécutez la commande ci-dessous pour vérifier l'état du systemd-journald.service .

sudo systemctl status systemd-journald.service

Vous verrez un statut actif (en cours d'exécution) si votre configuration fonctionne, comme indiqué ci-dessous. La sortie ci-dessous confirme que le journal fonctionne comme prévu.

5. Exécutez le ls commande ci-dessous pour voir si le /var/log/journal répertoire existe.

ls /var/log/journal

Vous verrez la sortie suivante, qui est l'UUID du journal persistant. Cet UUID n'a pas de signification particulière et n'est qu'une chaîne aléatoire unique générée lors du processus de démarrage. Cette chaîne est un identifiant que vous pouvez utiliser pour référencer les données dans /var/log/journal .

Notez l'UUID car vous l'utiliserez pour répertorier les journaux de journaux (étape 6).

6. Enfin, exécutez la commande ci-dessous pour répertorier les journaux de journaux. Assurez-vous de remplacer myUUID avec votre UUID précédemment noté (étape cinq).

ls /var/log/journal/myUUID

De même ci-dessous, vous verrez le journal de votre dernier démarrage. Et à ce stade, vous disposez maintenant d'un système de journalisation persistant !

Liste des entrées de journal du démarrage actuel

Vous avez appris à afficher toutes les entrées du journal. Mais peut-être préférez-vous filtrer des types de journaux spécifiques. Si tel est le cas, vous souhaiterez peut-être afficher uniquement les entrées du journal du noyau.

L'outil journalctl possède une puissante syntaxe de filtrage qui vous permet d'afficher des types spécifiques d'entrées de journal. Ou même afficher des informations connexes telles que l'ID de processus (PID) ou le nom d'unité du service d'origine.

Il existe différentes façons de filtrer les journaux, mais peut-être souhaitez-vous uniquement afficher les journaux de votre démarrage actuel. Si oui, le journalctl de base commande fera l'affaire.

Exécutez le journalctl commande ci-dessous pour répertorier toutes les entrées de journal de votre démarrage actuel (-b ) correspondant à votre système/environnement actuel. Le -b flag indique le journalctl commande pour afficher les journaux stockés par journald depuis le dernier démarrage du système.

journalctl -b

Liste des journaux des démarrages passés

Lors de l'utilisation de journalctl pour le dépannage, vous devrez peut-être également afficher les entrées de journal d'un démarrage passé spécifique. Peut-être avez-vous un service qui démarre dans un démarrage mais échoue dans un autre. Dans ce cas, vous devez isoler l'entrée de journal du deuxième démarrage pour voir ce qui n'a pas fonctionné.

1. Exécutez la commande ci-dessous pour afficher la liste des démarrages passés (–list-boots).

journalctl --list-boots

Comme indiqué ci-dessous, puisque vous avez configuré la journalisation persistante dans la section précédente, journalctl affiche tous les démarrages passés.

  • Chaque ligne de la liste indique une entrée de journal de démarrage passée. La première colonne est le décalage du démarrage, que vous pouvez utiliser pour référencer chaque entrée. Les décalages sont affichés sous forme de nombres (-1, 0 ).
  • Vous pouvez également utiliser la deuxième colonne, l'ID de démarrage, comme référence absolue à une entrée de démarrage.

2. Ensuite, exécutez le journalctl -b -1 commande pour afficher les entrées de journal du démarrage 1 (le démarrage précédent). Mais vous pouvez également afficher les entrées de journal d'autres démarrages en modifiant le numéro de démarrage (c'est-à-dire, démarrage 2, démarrage 3…)

journalctl -b -1

3. Enfin, exécutez la commande ci-dessous pour afficher les entrées de journal du même démarrage mais référencées par son ID de démarrage (boot_id ). Assurez-vous de remplacer boot_id avec l'ID de démarrage que vous avez noté à la première étape.

journalctl -b boot_id

Liste des journaux en fonction des fenêtres horaires

Vous avez vu comment afficher tous les journaux des démarrages précédents, mais que se passe-t-il si vous avez besoin d'afficher des journaux spécifiques par heure ? Ajouter le --since et --until les options filtrent les entrées du journal de journal en fonction des fenêtres horaires.

Exécutez le journalctl commande ci-dessous pour trouver toutes les écritures de journal générées il y a 24 heures à partir d'une date et d'une heure spécifiques (--since "2022-02-04 12:40:49” ).

journalctl --since "2022-02-04 12:40:49”

Peut-être que vous n'êtes pas en train de spécifier la date et l'heure. Si tel est le cas, utilisez plutôt des valeurs relatives et des durées. Par exemple, "2 minutes", "30m", "1h", et même des jours comme "hier", ou "maintenant, etc."

Exécutez la commande ci-dessous pour afficher toutes les entrées de journal depuis 24 heures à partir de la date et de l'heure actuelles (”yesterday” ).

journalctl --since "yesterday"

Maintenant, que se passerait-il si votre service SSH fonctionnait depuis 10h10 aujourd'hui et continuait jusqu'à ce qu'il soit interrompu il y a une heure ? Ajoutez les deux --since et --until options au journalctl commande pour découvrir ce qui n'allait pas.

Exécutez la commande ci-dessous pour rechercher les journaux générés à partir de 10:10 aujourd'hui jusqu'au 1 hour ago .

journalctl --since 10:10 --until "1 hour ago"

Filtrage des journaux en fonction de l'unité du processus d'origine

La recherche de journaux générés à partir de et jusqu'à une date et une heure spécifiques est pratique pour le dépannage, mais vous pouvez toujours obtenir de nombreux enregistrements dans la sortie. Comment filtrez-vous davantage les journaux ?

Par exemple, vous souhaitez filtrer les entrées de journal d'une unité de serveur Web NGINX qui n'a pas pu démarrer au démarrage. Utilisez le journalctl commande avec le -unit option et le nom de l'unité du service pour afficher les journaux.

Exécutez la commande ci-dessous pour répertorier toutes les entrées de journal en fonction de l'unité du processus d'origine (-u ) (nginx.service ). Ce type de filtrage est bénéfique pour connaître les PID des processus ou services liés à une erreur ou un avertissement particulier.

journalctl -u nginx.service

Peut-être préférez-vous afficher activement les modifications au fur et à mesure qu'elles se produisent, comme lors du service de dépannage, et avez besoin d'afficher les journaux au fur et à mesure qu'ils sont chargés par journald. Si tel est le cas, exécutez la commande ci-dessous pour répertorier ou suivre (-f ) tous les changements au fur et à mesure qu'ils se produisent.

journalctl -f

Jusqu'à présent, vous avez vu que journalctl est flexible et propose de nombreuses options pour filtrer et afficher les journaux. Il est impossible d'afficher toutes sortes de filtres et d'intervalles de temps dans ce didacticiel, mais vous pouvez exécuter le man journalctl commande pour voir les autres options offertes par l'outil journalctl.

Personnalisation du format de sortie

Par défaut, journalctl affiche les entrées du journal dans un format semblable à celui d'un téléavertisseur et colore le texte du terminal en sortie. Mais vous souhaitez probablement générer vos journaux dans un format standardisé et plus analysable. Dans ce cas, vous pouvez utiliser n'importe quel outil de manipulation de texte.

Exécutez la commande ci-dessous pour supprimer la pagination et la coloration. L'outil journalctl vous permet de spécifier ce qu'il faut afficher sur stdout avec une directive de sortie dans le fichier de configuration.

journalctl --no-pager

Mais si vous préférez spécifier un format de sortie, ajoutez le -o option à la commande journalctl. L'exemple suivant utilise le format de sortie JSON, mais vous pouvez utiliser toutes les autres options disponibles dans journalctl.

La commande ci-dessous répertorie les entrées de journal du démarrage actuel (-b ) généré pour le service NGINX (nginx ) et affiche la liste au format JSON (-o json ).

journalctl -b -u nginx -o json

Bien que vous puissiez également utiliser un format de sortie personnalisé, journalctl fournit plusieurs prédéfinis utiles, tels que JSON, CSV et Syslog. Chacun de ces formats a ses mérites, mais vous devriez consulter les pages des outils de manipulation de texte pour plus d'informations sur la façon dont ils traitent le texte.

Conclusion

Dans ce tutoriel, vous avez appris à utiliser le journalctl commande pour afficher les journaux de journal systemd. Mais avant d'utiliser l'une de ces commandes, vous devez d'abord sélectionner les options de sous-commande appropriées pour spécifier ce que vous souhaitez afficher.

À ce stade, vous pouvez désormais localiser et identifier rapidement des informations spécifiques dans vos journaux système via journalctl . Vous êtes maintenant équipé des connaissances nécessaires, alors pourquoi ne pas passer à la gestion des services Linux avec systemctl et journalctl ?


Linux
  1. Surveillez votre système Linux dans votre terminal avec procps-ng

  2. Contrôlez l'heure et la date de votre ordinateur avec systemd

  3. Récupérez votre système avec le mode mono-utilisateur dans Linux Mint / Linux Mint 12

  4. Sécurité Linux :protégez vos systèmes avec fail2ban

  5. Obtenir la date et l'heure de démarrage du système sous Linux

Surveiller les ressources système avec Bashtop et Bpytop sous Linux

Dépanner et surveiller les performances du système Linux avec nmon

Vérifiez et découvrez combien de temps il faut pour démarrer votre système Linux

Guide du débutant pour analyser les journaux sous Linux avec la commande journalctl

Journalctl :comment lire et modifier les journaux Systemd

Comment installer et utiliser Docker dans votre système Linux