Manchmal möchte man bestimmte Logeinträge aus den Standard Logdateien raus haben. Zum Beispiel müllt Cron gerne die auth.log zu. Da schaue ich aber gerne mal rein und lasse mir die letzten Zeilen anzeigen. Und da soll Cron nicht auftauchen, weil mich das normalerweise nicht interessiert. Aber die Logs sollen natürlich auch von Cron weiterhin geschrieben werden.
Die Einträge sollen weg:
Sep 12 12:01:01 server CRON[16837]: pam_unix(cron:session): session opened for user root by (uid=0) Sep 12 12:01:01 server CRON[16837]: pam_unix(cron:session): session closed for user root Sep 12 12:09:01 server CRON[16840]: pam_unix(cron:session): session opened for user root by (uid=0) Sep 12 12:09:01 server CRON[16840]: pam_unix(cron:session): session closed for user root
Mit Hilfe von rsyslog kann man die Logeinträge in eine andere Datei umleiten. Bei Debian und Ubuntu ist rsyslog standardmäßig installiert. Erstellt nun unter /etc/rsyslog.d/
die Datei 80-cron.conf
und fügt folgenden Inhalt ein:
:msg, contains, "pam_unix(cron:session):" -/var/log/cronauth.log & ~
Die beiden Zeichen in der 2. Zeile bewirken, dass die Einträge umgeleitet werden und nur in der cronath.log auftauchen. Ansonsten würden die zusätzlich weiterhin in der auth.log stehen.
Noch schnell rsyslog neu starten. Danach sollte die Datei cronauth.log erscheinen und die Cron Meldungen enthalten.
/etc/init.d/rsyslog restart
Anhand von Parametern umleiten
Rsyslog unterstützt Properties, also Variablen, die automatisch beim Empfang einer Nachricht geparst werden und zur Verfügung stehen. Eine Übersicht der Parameter gibt es z.B. hier:
https://www.rsyslog.com/doc/master/configuration/properties.html
Sehen wir uns mal beispielhaft ein paar Logeinträge an. Zuerst werden Datum und Uhrzeit angegeben. danach der Hostname und dann der Programmname.
Wir können nun also über den Hostnamen oder den Programmnamen in eine Datei umleiten. Dazu eine Datei in /etc/rsyslog.d/ erstellen, Schema: Priorität-Name.conf, also z.B. 80-serviceredirect.conf.
if $programname == 'service' then { /var/log/service.log ~ }
Die Umleitung über den Hostnamen macht eigentlich nur Sinn, wenn man Logs von anderen Hosts empfängt. Gibt man hier den Hostnamen des rsyslog Servers an, dann landen alle syslog Einträge in dieser Datei.
if $hostname == 'HRG-7-SFTP' then { /var/log/HRG-7-SFTP/firewall.log ~ }
Dann noch den Daemon neu starten
service rsyslog restart bzw. service syslog restart