So filtern Sie rsyslog-Nachrichten nach Tags

12

Ich habe mehrere Anwendungen und Skripte, mit denen ich die Ausgabe in benutzerdefinierte Dateien umleiten möchte.

Ich starte diese Anwendungen mit

command | logger -t TAG

Ich möchte diese Nachrichten basierend auf ihren Tags filtern und sie in verschiedene Dateien umleiten. Ich möchte die Bash-Umleitung nicht verwenden, da diese Anwendungen hauptsächlich lange ausgeführt werden und eine ordnungsgemäße Protokollrotation benötigen.

Ich habe versucht, einen benutzerdefinierten Filter in /etc/rsyslog.d/60-myfilter.conf hinzuzufügen.

if $syslogtag == 'giomanager' then /var/log/giomanager.log

Was mache ich falsch ? Was ist der richtige Weg, um basierend auf dem Tag zu filtern, oder gibt es eine bessere Option, um ein ähnliches Ergebnis zu erzielen?

Mistyrouge
quelle

Antworten:

21

Ich habe nicht verwendet, wenn so (oder syslogtag), aber ich habe verwendet :<blah>,<condition> ...(insbesondere: msg, enthält, ...), aber versuchen

:syslogtag, isequal, "giomanager:" /var/log/giomanager.log
& stop

Die & stop(Oder & ~in rsyslog v6 und älter (wie auf RHEL6)) bewirkt , dass die angepassten Nachricht nach der Anmeldung ansonsten verworfen wird es weiter durch andere Regeln analysiert werden.


Update: getestet und

Der syslogtag enthält ein :und sollte ""eher in als eingeschlossen sein''

Iain
quelle
Vielen Dank für Ihre Antwort. Ich habe gerade versucht, was Sie vorschlagen, in der Tat wird die Nachricht verworfen, aber nie geschrieben/var/log/giomanager.log
Mistyrouge
@mistyrouge: siehe mein Update
user9517
2
Vielen Dank, ich habe mein Protokoll jetzt umgeleitet, /var/log/giomanager.log aber es wird immer noch in / var / log / syslog geschrieben. Haben Sie eine Idee, warum dies geschieht und wie Sie dies verhindern können?
Mistyrouge
1
Aktion verwerfen (~ Indikator) ist veraltet: wurde durch die (bessere) alternative "Stop" -Anweisung ersetzt
Ivan Rave
7

Also habe ich endlich eine Lösung für mein Problem gefunden.

Vielen Dank an @lain für die Führung.

Die zuvor angegebene Lösung besteht darin, ein ':' in den Tag-Namen aufzunehmen. Auch und dies ist sehr wichtig, muss der Dateiname 50-default.confin alphabetischer Reihenfolge vor sein.

Um fortzufahren, geben Sie Folgendes ein 30-giomanager.conf:

:syslogtag, isequal, "giomanager:" /var/log/giomanager.log
& stop

Beachten Sie, dass die Datei /var/log/giomanager.logvom Benutzer 'syslog' beschreibbar sein sollte.

Mistyrouge
quelle
Danke @mistyrouge. Ich habe das gleiche Problem, das Sie hatten. Nach dem Anmelden in der richtigen Datei werden meine Protokolle nach / var / log / syslog umgeleitet. Haben Sie eine Idee, warum dies geschieht und wie Sie dies verhindern können?
Mayank Patel
Ich konnte dies nicht zum Filtern von bind9-Protokollen zum Laufen bringen. Stattdessen funktioniert ': programname, isequal, "named" /var/log/named/named.log'. Wahrscheinlich, weil das Tag wie "named [32193]" lautet.
Rennex
Sie können startswithanstelle von verwenden, isequalwenn das Tag beispielsweise eine PID enthält. Oder regexfür komplexe Spiele.
Tim Sylvester