Syslog so einrichten, dass es sowohl in Syslog als auch in eine benutzerdefinierte Protokolldatei protokolliert

Syslog so einrichten, dass es sowohl in Syslog als auch in eine benutzerdefinierte Protokolldatei protokolliert

Im Syslog (Raspbian rsyslog swVersion="8.1901.0"),

Ich versuche, eine Systemnachricht, die eine bestimmte Zeichenfolge enthält, sowohl mit /var/log/syslog(Standard) als auch mit einer benutzerdefinierten separaten Protokolldatei abzugleichen/zu filtern, z. B.: /var/log/nut.log.

Dies konnte ich erreichen, indem ich die folgenden Filterzeilen eingefügt habe /etc/rsyslog.conf:

# NUT logging: Include USB msgs since montoring UPS via only USB
:msg,contains,"USB" /var/log/nut.log
& stop
:msg,contains,"nut-" /var/log/nut.log
& stop

Dies & stopist erforderlich, um die Filter anzuhalten, sobald eine Übereinstimmung gefunden wurde. Ich glaube, die bevorzugte Methode besteht darin, dies in einer dedizierten Datei zu platzieren, z. B.:/etc/rsyslog.d/0-nut.conf

Aber wenn ich das tue, beenden die Filter die Protokollierung bei /var/log/syslogund protokollieren ausschließlich bei /var/log/nut.log...?

Gibt es eine andere Möglichkeit, dies zu tun?

Danke!

Antwort1

Die Direktive $IncludeConfigoder in erscheint vor den meisten Standardregeln, einschließlich derjenigen, die Nachrichten an schreibt . Wenn Sie Ihre Regeln nach den anderen Regeln in dieser Datei hinzufügen, wurden die Nachrichten bereits an geschrieben, bevor sie ebenfalls abgeglichen und an geschrieben werden .include()rsyslog.conf/var/log/syslogsyslognut.log

Wenn Sie Ihre Regeln stattdessen in eine separate Datei schreiben, wird die Nachricht in geschrieben nut.logund stopdie nachfolgenden Regeln werden übersprungen. Die Antwort lautet, nicht zu verwenden stop.

Wenn das Problem darin besteht, dass eine Nachricht sowohl „USB“ als auch „nut-“ enthalten könnte und daher zweimal in geschrieben wird nut.log, müssen Sie eine anspruchsvollere Syntax verwenden.

Die alte Syntax wurde ersetzt durchRainerScriptvor langer Zeit. Das bedeutet, dass Sie Filter wie diese schreiben können:

if ($msg contains "USB" or $msg contains "nut-") then {
   action(type="omfile" file="/var/log/nut.log")
}

Dies muss die weitere Verarbeitung der Nachricht nicht verhindern.

verwandte Informationen