Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Setup la roation des journaux systemd #209

Open
wants to merge 4 commits into
base: main
Choose a base branch
from

Conversation

Shamzic
Copy link
Contributor

@Shamzic Shamzic commented Oct 29, 2024

Procédure / investigation effectuée sur la pré-production

Espace actuel sur /var/log :

# du -sh /var/log
3.1G	/var/log

# du -h * | sort -hr | head -n 10
2.4G	journal/fd0521a42fe0428b995fe75d36995a4b
2.4G	journal
88M	mongodb
22M	btmp
21M	btmp.1
8.5M	auth.log.1
5.1M	main
4.0M	nginx
3.3M	auth.log

On constate que c'est les journaux qui prennent le plus de place (plus de 2.4G).
J'ai donc lancé la commande pour supprimer tous les journaux de plus de 30 jours:

journalctl --vacuum-time=30d

Résultat :

Vacuuming done, freed 2.1G of archived journals from /var/log/journal/fd0521a42fe0428b995fe75d36995a4b.
Vacuuming done, freed 0B of archived journals from /var/log/journal.

Vérification du poids post traitement :

# journalctl --disk-usage
Archived and active journals take up 236.2M in the file system.

# du -h * | sort -hr | head -n 10
42M	system@693f4b9529004d63aa21d297a40e91cc-0000000000576fc5-0006251ba9b32815.journal
42M	system@693f4b9529004d63aa21d297a40e91cc-0000000000558d25-000623fcf1b85fe8.journal
41M	system@693f4b9529004d63aa21d297a40e91cc-00000000005694a8-00062494ee9d16e1.journal
41M	system@693f4b9529004d63aa21d297a40e91cc-000000000054bf70-00062379fabc3bc1.journal
17M	system.journal
12M	user-1000@8be920b2e7294d8a88dfbc51f201d8ae-000000000055a9b0-0006240bda797840.journal
8.0M	user-1001.journal
8.0M	user-1000.journal
5.0M	user-1000@8be920b2e7294d8a88dfbc51f201d8ae-0000000000569b4a-00062497b1ff66a5.journal
4.8M	user-1000@8be920b2e7294d8a88dfbc51f201d8ae-000000000054c3a3-0006237b2f8d1d60.journal

Il n'y a pas de délai préconisé par l'Etat en ce qui concerne le délai de conservation des journaux, aussi il est souvent recommandé de les conserver sur une plage de 3 à 6 mois. Pour la production, si on choisi 3 mois on devra utiliser cette commande pour le nettoyage manuel :

journalctl --vacuum-time=3m

Ajouts proposés par cette PR

Configuration ansible pour la mise en place de la conservation des journaux à 90 jours avec un clean effectif à chaque déploiement.

Copy link
Contributor

@jenovateurs jenovateurs left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

J'ai lancé le code en local et j'obtiens l'erreur suivante :

TASK [bootstrap : Setup systemd journal rotation] *********************************************************************************************************************
ERROR! The requested handler 'restart systemd-journald' was not found in either the main handlers list nor in the listening handlers list


J'ai relancé le script et pas de soucis, c'est à l'init que le bug est généré. Je te laisse y jeter un oeil @Shamzic .

30 jours me convient parfaitement pour le delai d'archivage.
J'ai fait le tests 2 fois et j'obtiens le même résultat.

J'ai trouvé encore plus simple pour reproduire le bug, tu modifies le temps dans le fichier roles/bootstrap/tasks/setup_systemd_journal.yaml par exemple 2min et tu relances en local, l'erreur va apparaître.

Pour moi journalctl --vacuum-time=3m => 3minutes et non 3month - https://www.freedesktop.org/software/systemd/man/latest/journald.conf.html#MaxRetentionSec=

De plus, je n'ai pas réussi à prouver que cela fonctionne en local car j'ai modifier le timing à 2minutes et il n'y a pas de changement. Comment as-tu pu vérifier que tout fonctionner bien ?

@Shamzic
Copy link
Contributor Author

Shamzic commented Nov 15, 2024

@jenovateurs Merci pour tes retours

J'ai relancé le script et pas de soucis, c'est à l'init que le bug est généré. Je te laisse y jeter un oeil @Shamzic .

C'est normalement lié au problème de casse du notify que j'ai corrigé dans ce commit. Dis moi si ça ne fonctionne toujours pas, on pourra investiguer ensemble. De mon côté ça fonctionne.

Pour moi journalctl --vacuum-time=3m => 3minutes et non 3month -

Oui, c'est juste. Il faudrait mettre 3month si on voulait 3 mois. Je vais mettre 30d si 30 jours ça te semble cohérent.

De plus, je n'ai pas réussi à prouver que cela fonctionne en local car j'ai modifier le timing à 2minutes et il n'y a pas de changement. Comment as-tu pu vérifier que tout fonctionner bien ?

Il faut générer des logs de test et ensuite voir les entrées des logs 3 minutes après.

Procédure de test

Ton idée de mettre 2 minutes dans la rotation pour tester est pertinente donc on va l'utiliser ici.

Premièrement, avec la commande :

cat /etc/systemd/journald.conf | grep -A 4 "\[Journal\]"

On a la config qui est affichée avec les paramètres requis (2 minutes de délai pour le test ici) ⬇️

[Journal]
#Storage=auto
#Compress=yes
#Seal=yes
#SplitMode=uid
--
[Journal]
SystemMaxUse=2G
SystemMaxFileSize=100M
MaxRetentionSec=2m
Compress=yes

Ensuite, tu peux lancer la commande suivante qui va afficher les 10 logs les plus anciens :

journalctl --reverse | tail

Tu pourras constater en attendant 2 min que si tu relances cette commande 2 minutes plus tard, le timestamp du log le plus ancien aura 2 minutes de plus et ça confirmera que le clean est effectif.

Ex:

journalctl --reverse | tail
Nov 15 17:45:16 ...

Relance 2 minutes plus tard :

journalctl --reverse | tail
Nov 15 17:47:16 ...

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Nettoyage des logs #logrotate 2.8G Preprod / 3.2G /var/log Prod
2 participants