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?

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''


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.


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.