Comment configurer la politique de stockage des journaux par unité avec journald?

14

J'ai un service particulier, qui enregistre des informations rares mais importantes. Je l'ai installé il y a quelques mois et aujourd'hui, j'ai couru journalctl -n 50 --unit=my-serviceseulement pour trouver qu'il n'y avait pas d'entrées.

Je suis parfaitement satisfait de ce comportement pour la plupart des unités - soit j'ai besoin de quelque chose qui s'est produit tout de suite (ou il y a quelques jours au plus), et je me fiche des enregistrements vieux de plusieurs mois.

Cependant, existe-t-il un moyen de dire journaldd'avoir une politique de stockage et de conservation indépendante pour les enregistrements d'une seule unité particulière? Je veux conserver ces journaux particuliers pendant, disons, 5 ans - peu importe la taille que cela prendrait. Les journaux des autres unités ne devraient pas en être affectés et conserver leur comportement actuel.

Je suis en quelque sorte une compréhension perdue journald.conf(5)et je ne peux pas comprendre quand une configuration par unité est possible. Si c'est le cas - apprécierait un bref exemple concret - quel fichier dois-je modifier / créer et que dois-je écrire. Ou, si vous savez avec certitude que ce n'est certainement pas faisable - ce serait aussi une bonne réponse.

REMARQUE: Mon cas particulier concerne l'hôte Arch Linux, mais je suppose que cela ne devrait pas beaucoup d'importance.

drdaeman
la source
Je ne peux pas commenter la réponse ci-dessus pour ajouter ce lien à un problème concernant l'ajout de cette fonctionnalité à journald, alors voici une autre réponse: github.com/systemd/systemd/issues/4751
swoop81

Réponses:

7

Il semble que je n'ai probablement pas de chance avec Journal. À moins que je ne trouve un moyen de créer un journal indépendant de «stockage à long terme» (comme il existe actuellement différentes revues par utilisateur), mais je ne suis pas sûr que ce soit une approche viable et sensée. Je suppose que la mise en place d'un syslogd (et logrotate) serait plus facile.

Le long métrage n'était pas présent fin 2014 , comme l'a confirmé Lennart lui-même.

Et il semble que ce ne soit pas encore là. Au moins, la ligne "journald: autoriser les temps de rétention par priorité et par service lors de la rotation / mise sous vide" est toujours dans le fichier TODO (lien vers la révision du 11/07/2016).

drdaeman
la source
3
Cela semble être un très gros défaut de conception, presque paralysant. Surtout si l'on veut diminuer la rétention ou au moins le niveau de journalisation des unités très bavardes, qui obstruent les journaux.
orion
1
Pour toute personne tombant sur cette question, la ligne référencée dans le TODO est toujours présente à partir de ce commentaire (26.03.18): github.com/systemd/systemd/blob/…
timss
1
Dans une tentative pour obtenir une certaine traction là-dessus, je l'ai soulevé comme un problème avec le projet - github.com/systemd/systemd/issues/9519 .
slm
1

Il est remarquablement simple de générer le fichier journal. Par défaut, toute la journalisation dans journald est également envoyée à syslog et cette valeur par défaut doit être en place. Le rsyslog.conf contrôle la façon dont les entrées passées à syslog sont gérées. De plus, les SyslogFacilityvaleurs par défaut sont daemondonc les entrées de journal pour tout service se retrouvent généralement dans le daemon.logfichier /var/log.

Dans votre fichier de service, ajoutez à la section [service]

SyslogFacility=local2

(le nombre peut être compris entre 0 et 7) https://www.freedesktop.org/software/systemd/man/systemd.exec.html

Modifiez le fichier /etc/rsyslog.conf (recherchez les lignes existantes à modifier) ​​afin que local2 soit enregistré dans un fichier spécifique (première ligne) et idéalement non connecté à syslog en l'ajoutant local2.nonecomme indiqué (il est déjà dans le journal).

local2.*                        /var/log/your-service-name.log
*.*;auth,authpriv.none,local2.none          -/var/log/syslog

[modifier] vous devez également modifier le fourre-tout

*.=info;*.=notice;*.=warn;\
        auth,authpriv.none;\
        cron,daemon.none;\
        mail,news.none,local2.none      -/var/log/messages

Bien sûr, la rétention réelle doit alors être effectuée par logrotate.

HTH

Brian
la source