Rotation des journaux Linux avec logratate
Introduction à la rotation des journaux
La journalisation est une partie très importante des services en ligne. Divers services enregistrent constamment leurs propres journaux opérationnels pendant leur exécution, tels que les journaux d'accès nginx, les journaux de flux des systèmes métier, divers journaux d'erreurs, etc. Ces journaux sont généralement stockés dans différents fichiers, et la taille des fichiers de journaux augmente avec le temps d'exécution.
Mais l'espace disque d'un serveur en ligne est limité, et si la taille des fichiers de journaux continue de croître, cela finira par entraîner un manque d'espace disque. Pour résoudre ce problème, nous devons effectuer des rotations sur les journaux.
Plus précisément, la rotation effectuera plusieurs choses.
- définir certaines règles de rotation (par exemple, par temps ou par volume)
- transformer le journal actuel en journal historique lorsque la règle est satisfaite, et générer un nouveau fichier journal comme fichier journal actuel
- nettoyer automatiquement certains anciens fichiers journaux lorsqu'il y a trop de fichiers journaux historiques
De cette façon, le fichier journal original volumineux deviendra un ensemble de petits fichiers journaux, qui seront coupés et tournés de temps en temps, et l'historique total des journaux est globalement stable et inchangé, donc vous n'avez pas à vous inquiéter que les journaux continuent de croître et d'occuper de l'espace disque.
Utilisation de logrotate
La plupart des distributions Linux ont un outil logrotate intégré, qui facilite la définition des règles de rotation des journaux et le nettoyage automatique des fichiers journaux obsolètes.
Le fichier de configuration pour logrotate
est
/etc/logrotate.conf
fichier de configuration principal- Le répertoire
/etc/logrotate.d
peut contenir de nombreux fichiers de configuration spécifiques à logrotate
Lorsque nous devons configurer une règle de rotation des journaux, nous pouvons créer un nouveau fichier de configuration sous /etc/logrotate.d
. Par exemple /etc/logrotate.d/nginx
, le contenu de ce fichier est le suivant
/var/log/nginx/*.log {
daily
missingok
rotate 7
compress
delaycompress
notifempty
create 640 root root
sharedscripts
postrotate
[ -f /var/run/nginx.pid ] && kill -USR1 \`cat /var/run/nginx.pid`
endscript
}
La signification de ce fichier de configuration est.
daily
rotation une fois par jourmissingok
ne fait pas de rotation si le fichier n'existe pasrotate 7
conserve les 7 derniers fichiers journauxcompress
Compresse les fichiers journauxdelaycompress
Retarde la compressionnotifempty
Ne fait pas de rotation si le fichier est videcreate 640 root root
Le propriétaire et les permissions du nouveau fichier journal, surtout si nginx n'est pas exécuté par l'utilisateurroot
sharedscripts
partage les scripts, c'est-à-dire exécute les scripts après que les journaux ont fini de tourner, sinon vous devrez exécuter des scripts une fois pour chaque fichier journal tournépostrotate
script qui s'exécute après que les journaux ont fini de tourner, certains journaux métier peuvent ne pas avoir besoin de ce script
Une fois la configuration de la règle de rotation des journaux définie, vous pouvez utiliser logrotate -d
pour vérifier la règle, par exemple
sh
logrotate -d /etc/logrotate.d/nginx
renvoie quelque chose comme ce qui suit.
reading config file /etc/logrotate.d/nginx
Allocating hash table for state file, size: 15360 B
Handling 1 logs
rotating pattern: /var/log/nginx/*.log after 1 days (7 rotations)
empty log files are not rotated, old logs are removed
considering log /var/log/nginx/*.log /access.log
log does not need rotating (log has been already rotated)
considering log /var/log/nginx/*.log /error.log
log does not need rotating (log has been already rotated)
running postrotate script
......
Pas d'erreurs signifie que le fichier de configuration est correct.
Si vous voulez voir les résultats immédiatement, vous pouvez utiliser logrotate -f
pour forcer une rotation, par exemple
sh
logrotate -f /etc/logrotate.d/nginx
Autres paramètres
compress
compresse les journaux historiques après la rotationnocompress
ne compresse pas le journal historique après la rotationcopytruncate
est utilisé pour sauvegarder et tronquer le fichier journal actuel alors qu'il est encore ouvert; c'est une façon de copier puis de vider, il y a un décalage temporel entre la copie et le vidage, et certaines données de journal peuvent être perdues.nocopytruncate
sauvegarde le fichier journal mais ne le tronque pascreate mode owner group
Spécifie le propriétaire et les permissions pour la création de nouveaux fichiersnocreate
ne crée pas de nouveaux fichiers journauxdelaycompress
etcompress
ensemble compressent le fichier journal historique jusqu'à la prochaine rotationnodelaycompress
remplace l'optiondelaycompress
et compresse lors de la rotationmissingok
Si un journal est manquant, continue à passer au journal suivant sans signaler d'erreurerrors address
Envoie les messages d'erreur à l'adresse Email spécifiée lors de la rotationifempty
Fait la rotation même si le fichier journal est videnotifempty
Ne fait pas de rotation lorsque le fichier journal est videmail address
Envoie le fichier journal en rotation à l'adresse Email spécifiéenomail
N'envoie pas de fichiers journaux lors de la rotationolddir directory
Place le fichier journal en rotation dans le répertoire spécifié, il doit être sur le même système de fichiers que le fichier journal actuelnoolddir
Le fichier journal en rotation est placé dans le même répertoire que le fichier journal actuelsharedscripts
partage les scripts, c'est-à-dire exécute les scripts après la rotation des journaux, sinon exécute les scripts une fois pour chaque fichier journal tournéprerotate
la commande à exécuter avant la rotation, comme la modification des propriétés du fichier; doit être sur une ligne séparéepostrotate
Une commande à exécuter après la rotation, comme le redémarrage (kill -HUP
) d'un service; doit être sur une ligne séparéedaily
spécifie que la période de rotation est quotidienneweekly
spécifie que la période de rotation est hebdomadairemonthly
spécifie un cycle de rotation mensuelrotate count
spécifie le nombre de fois que le fichier journal est tourné avant d'être supprimé,0
signifie qu'aucune sauvegarde n'est conservée,5
signifie que 5 sauvegardes sont conservéesdateext
utilise la date actuelle comme format de nommagedateformat . %s
utilisé avec dateext, apparaît immédiatement après la ligne suivante, définit le nom du fichier après sa coupe, doit être utilisé avecdateext
, ne prend en charge que les quatre paramètres%Y
/%m
/%d
/%s
size log-size
(ouminsize log-size
) Fait tourner le fichier journal lorsqu'il atteint la taille spécifiée, voici le format légal.size = 5
ousize 5
(tourne lorsque >= 5 octets)size = 100k
ousize 100k
size = 100M
ousize 100M