Les journaux sont parfaits pour savoir ce que fait une application ou pour résoudre un éventuel problème. Presque toutes les applications que nous traitons génèrent des journaux, et nous voulons que les applications que nous développons nous-mêmes les génèrent également. Plus les journaux sont détaillés, plus nous avons d'informations. Mais laissés à eux-mêmes, les journaux peuvent atteindre une taille ingérable, et ils peuvent, à leur tour, devenir un problème à part entière. C'est donc une bonne idée de les réduire, de garder ceux dont nous aurons besoin et d'archiver le reste.
Plus de ressources Linux
- Aide-mémoire des commandes Linux
- Aide-mémoire des commandes Linux avancées
- Cours en ligne gratuit :Présentation technique de RHEL
- Aide-mémoire sur le réseau Linux
- Aide-mémoire SELinux
- Aide-mémoire sur les commandes courantes de Linux
- Que sont les conteneurs Linux ?
- Nos derniers articles Linux
Les bases
Le logrotate
L'utilitaire est excellent pour gérer les journaux. Il peut les faire pivoter, les compresser, les envoyer par e-mail, les supprimer, les archiver et en créer de nouveaux lorsque vous en avez besoin.
Exécution de logrotate
est assez simple - il suffit d'exécuter logrotate -vs state-file config-file
. Dans la commande ci-dessus, le v
l'option active le mode verbeux, s
spécifie un fichier d'état, et le dernier config-file
mentionne le fichier de configuration, où vous spécifiez ce que vous devez faire.
Pratique
Voyons un logrotate
configuration qui s'exécute silencieusement sur notre système, gérant la richesse des journaux que nous trouvons dans /var/log
annuaire. Extrayez les fichiers actuels dans ce répertoire. Voyez-vous beaucoup de *.[number].gz
des dossiers? C'est ce que logrotate
fait. Vous pouvez trouver le fichier de configuration correspondant sous /etc/logrotate.d/rsyslog
. Le mien ressemble à ceci :
/var/log/syslog
{
rotate 7
daily
missingok
notifempty
delaycompress
compress
postrotate
reload rsyslog >/dev/null 2>&1 || true
endscript
}
/var/log/mail.info
/var/log/mail.warn
/var/log/mail.err
/var/log/mail.log
/var/log/daemon.log
/var/log/kern.log
/var/log/auth.log
/var/log/user.log
/var/log/lpr.log
/var/log/cron.log
/var/log/debug
/var/log/messages
{
rotate 4
weekly
missingok
notifempty
compress
delaycompress
sharedscripts
postrotate
reload rsyslog >/dev/null 2>&1 || true
endscript
}
Le fichier commence par définir les instructions de rotation du /var/log/syslog
fichier et les instructions sont contenues dans les accolades qui suivent. Voici ce qu'ils signifient :
rotate 7
:Conservez les journaux des sept dernières rotations. Ensuite, commencez à les supprimer.daily
:Faites pivoter le journal quotidiennement. Avecrotate 7
, cela signifierait que les journaux seraient conservés pendant les sept derniers jours. Les autres options sontweekly
,monthly
,yearly
. Il y a aussi unesize
paramètre qui fera pivoter les fichiers journaux si leur taille dépasse une limite spécifiée, par exemplesize 10k
,size 10M
,size 10G
, etc. Si rien n'est spécifié, les journaux feront l'objet d'une rotation chaque fois quelogrotate
court. Vous pouvez même exécuterlogrotate
dans uncron
pour l'utiliser à des intervalles de temps plus spécifiques.missingok
:Ce n'est pas grave si le fichier journal est manquant. Ne paniquez pas.notifempty
:Ne pas faire pivoter si le fichier journal est vide.delaycompress
:Si la compression est activée, retarder la compression jusqu'à la rotation suivante. Cela permet au moins un fichier pivoté mais non compressé d'être présent. Utile si vous souhaitez que les journaux d'hier restent non compressés pour le dépannage. Il est également utile si un programme peut encore écrire dans l'ancien fichier jusqu'à ce qu'il soit redémarré/rechargé, comme Apache.compress
:La compression est activée. Utilisernocompress
pour l'éteindre.postrotate/endscript
:Exécutez le script dans cette section après la rotation. Utile pour faire des trucs de nettoyage. Il existe également unprerotate/endscript
pour faire des choses avant le début de la rotation.
Pouvez-vous comprendre ce que fait la section suivante pour tous les fichiers mentionnés dans la configuration ci-dessus ? Le seul paramètre supplémentaire dans la deuxième section est sharedscripts
, qui indique logrotate
pour ne pas exécuter la section dans postrotate/endscript
jusqu'à ce que toute la rotation des journaux soit terminée. Il empêche l'exécution du script pour chaque rotation de journal et s'exécute une fois à la fin.
Quelque chose de nouveau
J'utilise la configuration suivante pour gérer les accès Nginx et les journaux d'erreurs sur mon système.
/var/log/nginx/access.log
/var/log/nginx/error.log {
size 1
missingok
notifempty
create 544 www-data adm
rotate 30
compress
delaycompress
dateext
dateformat -%Y-%m-%d-%s
sharedscripts
extension .log
postrotate
service nginx reload
endscript
}
Le script ci-dessus peut être exécuté en utilisant :
logrotate -vs state-file /tmp/logrotate
La première exécution de la commande donne ce résultat :
L'extensionreading config file /tmp/logrotate
extension is now .log
Handling 1 logs
rotating pattern: /var/log/nginx/access.log
/var/log/nginx/error.log 1 bytes (30 rotations)
empty log files are not rotated, old logs are removed
considering log /var/log/nginx/access.log
log needs rotating
considering log /var/log/nginx/error.log
log does not need rotating
rotating log /var/log/nginx/access.log, log->rotateCount is 30
Converted ' -%Y-%m-%d-%s' -> '-%Y-%m-%d-%s'
dateext suffix '-2021-08-27-1485508250'
glob pattern '-[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
glob finding logs to compress failed
glob finding old rotated logs failed
renaming /var/log/nginx/access.log to /var/log/nginx/access-2021-08-27-1485508250.log
creating new /var/log/nginx/access.log mode = 0544 uid = 33 gid = 4
running postrotate script
* Reloading nginx configuration nginx
Et l'exécuter une seconde fois :
L'extensionreading config file /tmp/logrotate
extension is now .log
Handling 1 logs
rotating pattern: /var/log/nginx/access.log
/var/log/nginx/error.log 1 bytes (30 rotations)
empty log files are not rotated, old logs are removed
considering log /var/log/nginx/access.log
log needs rotating
considering log /var/log/nginx/error.log
log does not need rotating
rotating log /var/log/nginx/access.log, log->rotateCount is 30
Converted ' -%Y-%m-%d-%s' -> '-%Y-%m-%d-%s'
dateext suffix '-2021-08-27-1485508280'
glob pattern '-[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
compressing log with: /bin/gzip
renaming /var/log/nginx/access.log to /var/log/nginx/access-2021-08-27-1485508280.log
creating new /var/log/nginx/access.log mode = 0544 uid = 33 gid = 4
running postrotate script
* Reloading nginx configuration nginx
Et l'exécuter une troisième fois :
L'extensionreading config file /tmp/logrotate
extension is now .log
Handling 1 logs
rotating pattern: /var/log/nginx/access.log
/var/log/nginx/error.log 1 bytes (30 rotations)
empty log files are not rotated, old logs are removed
considering log /var/log/nginx/access.log
log needs rotating
considering log /var/log/nginx/error.log
log does not need rotating
rotating log /var/log/nginx/access.log, log->rotateCount is 30
Converted ' -%Y-%m-%d-%s' -> '-%Y-%m-%d-%s'
dateext suffix '-2021-08-27-1485508316'
glob pattern '-[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
compressing log with: /bin/gzip
renaming /var/log/nginx/access.log to /var/log/nginx/access-2021-08-27-1485508316.log
creating new /var/log/nginx/access.log mode = 0544 uid = 33 gid = 4
running postrotate script
* Reloading nginx configuration nginx
Le contenu du fichier d'état ressemble à ceci :
logrotate state -- version 2
"/var/log/nginx/error.log" 2021-08-27-9:0:0
"/var/log/nginx/access.log" 2021-08-27-9:11:56
Téléchargez l'aide-mémoire Linux logrotate.
Cet article a été initialement publié sur le blog personnel de l'auteur et a été adapté avec sa permission.