Apprendre à lire les logs
Les logs sont des fichiers textes dans lesquels les divers logiciels journalisent leur activité. Il s’agit d’un journal de bord précis, fiable et très utile en cas de bug à priori incompréhensible. Les logs se trouvent dans le répertoire /var/log/.
$ ls /var/log/acpid daemon.log dmesg.2.gz kern.log mail.log syslog wtmpaptitude debug dmesg.3.gz lastlog mail.warn syslog.0auth.log dmesg dpkg.log lpr.log messages syslog.1.gzboot dmesg.0 faillog mail.err news user.logbtmp dmesg.1.gz fsck mail.info pycentral.log uucp.log
Le programme de journalisation s’appelle syslog : il se charge d’inscrire dans des fichiers les messages générés par le noyau et les services.
Chaque message possède une origine (facility) et une priorité. L’origine peut être un système ou un sous-système. Voici une liste des facilities intéressants pour un serveur :
| Facility | Explication |
|---|---|
| auth, authpriv, security | authentification et sécurité |
| cron | service cron (exécution périodique de commandes) |
| daemon | processus démons, càd qui tournent en arrière-plan |
| ftp | service ftp |
| kern | pour kernel (noyau) |
| service email | |
| syslog | service syslogd |
| user | processus lancés par les utilisateurs, excepté root |
| local0 à local7 | messages du noyau, en fonction de leur niveau |
Chaque facility dispose de priorités, càd un terme qui définit l’importance du message. Les priorités sont, par importance décroissance : emerg, alert, crit, error, warning, notice, info et debug. Les messages emerg (emergency, urgence) ne sont pas logués mais directement affichés sur le terminal des utilisateurs connectés (par exemple le reboot immédiat de la machine).
Le fichier de configuration de syslog est /etc/syslog.conf . Il indique pour chaque facility le fichier de destination en fonction de sa priorité. Dans l’exemple suivant, les messages relatifs à la sécurité et aux tentatives d’authentification (et non de connexion) sont inscrites dans le fichier /var/log/auth.log.
auth,authpriv.* /var/log/auth.log
Il existe également une version plus poussée de syslog : syslog-ng. Sa configuration se trouve dans /etc/syslog-ng/syslog-ng.conf et est semblable à celle de syslog.
Pour en revenir à ce qui nous intéresse ici, càd les logs pour chercher et comprendre l’origine d’une erreur, il faut tout d’abord déterminer la facility de cette erreur. Mais encore faut-il qu’elle existe : en effet, syslog ne log que les messages de programmes lui confiant cette gestion (en utilisation l’API syslog). Tous les programmes ne le font pas, et en particulier Apache qui définit en interne les chemins de log. Dans le cas d’Apache, les logs se trouvent dans /var/log/apache2/ ou /var/log/httpd/ et sont répartis entre les fichiers access.log (log principal) et error.log (log d’erreurs). En général, les logs de ces programmes se trouvent dans /var/log/<nom du programme>/.
Quelques fichiers logs de /var/log/
Ces fichiers sont ou non présents selon la configuration de syslog et donc selon la distribution choisie.
- dmesg.log : messages du noyau lors du boot. La commande dmesg affiche la même chose, à une différence près : sa mémoire est cyclique, les nouvelles informations finiront par écraser les plus anciennes.
- syslog : le fichier par défaut où atterrissent les messages envoyés par le noyau et les services, excepté les messages de DEBUG (débogage du noyau, encombrant et inutile pour les non développeurs)
- auth.log : authentifications, càd les tentatives de connexion locale et distantes
- daemon.log : messages relatifs aux démons en cours d’exécutions (programmes s’exécutant en tâche de fond)
- messages : messages de priorité réduite (INFO, NOTICE, WARN)
- lastlog : dernières connexions, ce fichier est à lire avec la commande
lastlog - wtmp : même chose que lastlog mais avec plus d’informations, se lit avec la commande
last - emerge.log et dpkg.log : logs des gestionnaires de paquets emerge (Gentoo) et apt (ou aptitude, qui utilisent dpkg) pour Debian/Ubuntu.
NB : on peut également trouver des fichiers se terminant par .numéro.gz : il s’agit d’archives crées par un programme chargé de faire tourner les logs (logrotate) afin de garder des fichiers utilisables (càd qui ne font pas 20Go au bout d’un an).