Ubuntu 16.04 Server : Installer et configurer logrotate
logrotate est un outil qui remplace les fichiers journaux en fonction de la fréquence ou de la taille et gère les fichiers précédents en les stockant, les compressant ou les supprimant. Sur Ubuntu, il peut gérer des journaux à croissance continue, mais le moment réel du remplacement dépend du calendrier d'exécution de logrotate et des conditions de configuration.
Support et préparation pour Ubuntu 16.04
La maintenance de sécurité générale pour Ubuntu 16.04 LTS et la maintenance de sécurité étendue générale (ESM) pour Ubuntu Pro ont pris fin. Canonical propose des services supplémentaires Legacy distincts, donc vérifiez la couverture et le coût sur Guide de support Ubuntu 16.04, et prévoyez de passer à une version d'Ubuntu prise en charge si possible. Les principes de base ci-dessous s'appliquent également à d'autres versions, mais le comportement détaillé peut varier selon la version de logrotate installée et le calendrier d'exécution.
Tout d'abord, vérifiez s'il est installé, et si le paquet n'est pas présent sur Ubuntu, installez-le. Avant de modifier les paramètres du serveur de production, assurez-vous de vérifier les méthodes de sauvegarde et de récupération pour les paramètres existants et les journaux nécessaires.
logrotate --version
sudo apt update
sudo apt install logrotate
Vérifiez les paramètres par défaut et le calendrier d'exécution
Les paramètres globaux se trouvent généralement dans /etc/logrotate.conf, et les paramètres individuels sont lus si le fichier est configuré pour inclure /etc/logrotate.d/. Vérifiez les fichiers réels sur le serveur. Dans les environnements où le paquet Apache est installé, /etc/logrotate.d/apache2 peut exister, mais le chemin du journal et les paramètres varient en fonction de l'environnement d'installation.
cat /etc/logrotate.conf
ls -l /etc/logrotate.d/
cat /etc/logrotate.d/apache2
Sur les systèmes sans fichiers de configuration Apache, la dernière commande peut échouer. Ne gérez pas le même chemin de journal de manière redondante dans deux configurations. logrotate ne s'exécute pas en continu par lui-même et ne planifie pas sa propre exécution. Sur Ubuntu 16.04, il est généralement exécuté périodiquement via /etc/cron.daily/logrotate, donc vérifiez ce fichier et si l'exécution se fait via cron. Dans d'autres versions, les horaires réels peuvent différer, comme avec les minuteries systemd.
Créer des journaux de test et des paramètres indépendants
L'exercice suivant utilise un nouveau répertoire temporaire plutôt que les journaux de production. Exécutez dans l'ordre dans le même shell et vérifiez les chemins de sortie. Il utilise un répertoire temporaire et des fichiers d'état séparés, donc il ne modifie pas les paramètres ou l'état de logrotate existants du système.
demo_dir=$(mktemp -d)
printf 'first log line\n' > "$demo_dir/app.log"
cat > "$demo_dir/logrotate.conf" <<EOF
$demo_dir/app.log {
daily
rotate 3
missingok
notifempty
compress
delaycompress
create 0600
}
EOF
printf 'Test directory: %s\n' "$demo_dir"
cat "$demo_dir/logrotate.conf"
daily est une condition de rotation quotidienne, et rotate 3 est un paramètre qui conserve les journaux précédents jusqu'à trois rotations. missingok évite les erreurs lorsqu'un fichier n'existe pas, et notifempty ne fait pas tourner les journaux vides. compress compresse les journaux précédents, et delaycompress retarde la compression du journal le plus récemment tourné jusqu'à la rotation suivante. create 0600 définit les permissions lors de la création de nouveaux fichiers journaux après rotation.
Le fichier de configuration dans cet exemple n'est pas enregistré dans le calendrier du système, et aucune application réelle n'écrit dans le journal de test. La configuration de daily ne crée pas elle-même un calendrier d'exécution. Reportez-vous au manuel officiel logrotate pour vérifier les options et conditions appropriées pour votre version installée.
Vérification des exécutions d'essai et des rotations réelles
Tout d'abord, vérifiez les paramètres et le comportement attendu en mode débogage. -d ne modifie pas les journaux ni ne met à jour les fichiers d'état. Avec un nouveau fichier d'état, la sortie peut indiquer qu'il n'est pas encore temps pour la rotation.
logrotate -d -s "$demo_dir/state" "$demo_dir/logrotate.conf"
Forcez une rotation uniquement dans le fichier d'entraînement et vérifiez les résultats. -f force la rotation même si les conditions ne sont pas remplies, il ne doit donc pas être utilisé imprudemment sur des journaux d'opérations réels.
logrotate -v -f -s "$demo_dir/state" "$demo_dir/logrotate.conf"
ls -l "$demo_dir"
cat "$demo_dir/app.log.1"
Si cela réussit, le contenu original se trouve dans app.log.1 et un nouveau app.log est créé. La portion la plus récente de rotation n'est pas encore compressée en raison de delaycompress. Après avoir ajouté du contenu au nouveau journal et forcé une rotation une fois de plus, la portion de rotation précédente est généralement compressée en tant que app.log.2.gz.
printf 'second log line\n' >> "$demo_dir/app.log"
logrotate -v -f -s "$demo_dir/state" "$demo_dir/logrotate.conf"
ls -l "$demo_dir"
gzip -cd "$demo_dir/app.log.2.gz"
Vous pouvez vérifier la première ligne du journal à partir de la dernière commande. Cet exercice ne reproduit pas un service en cours d'exécution qui enregistre des journaux. Une fois l'entraînement terminé, vérifiez le chemin temporaire où la sortie a été enregistrée et supprimez tous les fichiers dont vous n'avez plus besoin.
Application à un service en production
Un programme en cours d'exécution peut continuer à écrire dans le fichier journal précédent même après que le fichier a été renommé. Vérifiez la procédure fournie pour faire rouvrir le fichier journal par le service et examinez le script postrotate du package existant, et vérifiez si le propriétaire, le groupe et les permissions du nouveau fichier sont appropriés pour le service. Avant de modifier les règles Apache existantes, consultez la documentation de la distribution et du service et sauvegardez votre configuration.
copytruncate copie le journal puis tronque l'original sur place ; il peut être utilisé pour les programmes qui ne peuvent pas rouvrir leurs fichiers journaux, mais des journaux peuvent être perdus entre la copie et la troncature. Dans la mesure du possible, vérifiez d'abord si le service dispose d'un moyen de rouvrir le journal. rotate 3 fait référence au nombre de rotations à conserver, et non à une limite en jours ou en taille, donc la politique de rétention et l'utilisation du disque doivent être vérifiées séparément.
Que vérifier si la rotation ne se produit pas
- Vérifiez que le fichier de configuration est inclus dans les paramètres globaux et que le chemin cible correspond au journal réel. Les fichiers vides ne tournent pas dans
notifempty. - Vérifiez si le cron ou le minuteur fonctionne réellement et si une rotation est nécessaire en fonction du fichier d'état et des conditions périodiques.
dailyne garantit pas la rotation à l'heure exacte chaque jour dans les environnements vérifiés une fois par jour. - Recherchez des problèmes de permissions, de propriété, de syntaxe et de chemins en double dans la sortie de débogage et les journaux d'erreurs du planificateur. Examinez les résultats et les plans de récupération avant d'appliquer
-faux journaux opérationnels.




