Wie konfiguriere ich rsyslog, um Protokolle von einem bestimmten Programm an einen Remote-Syslog-Server zu senden?

16

Ich habe ein Programm, das Syslog mit einem bestimmten Tag / Programmnamen ausgibt. Ich möchte in der Lage sein, den Syslog-Verkehr aus diesem Programm herauszufiltern und an einen entfernten Syslog-Server zu senden, wobei der gesamte andere Syslog-Verkehr lokal bleibt.

Ich kann den gesamten Datenverkehr mit an den Remote-Server senden

*.* @remote_server

Wie filtere ich es?

Simmo
quelle

Antworten:

36

Rsyslog-Konfigurationsdateien befinden sich in: /etc/rsyslog.d/*.conf

Rsyslog liest die conf-Dateien nacheinander, daher ist es wichtig, dass Sie Ihre Konfigurationsdatei so benennen, dass die spezifische Konfiguration geladen wird, bevor etwas anderes passiert. Nennen Sie Ihre Datei also beginnend mit führenden Nullen 00-my-file.conf. Es ist besser, eine neue Datei zu erstellen, damit Updates usw. Ihre lokale Konfiguration nicht überschreiben.

Beispiel:

if $programname == 'programname' and $msg contains 'a text string' and $syslogseverity <= '6' then /var/log/custom/bind.log

Oder wenn Sie nur bestimmte Einträge verwerfen möchten:

if $programname == 'programname' then ~

In deinem Fall: (UDP)

if $programname == 'programname' then @remote.syslog.server
& ~

Oder (TCP)

if $programname == 'programname' then @@remote.syslog.server
& ~

Die & ~Möglichkeit, die Verarbeitung passender Einträge (nur in der vorherigen Zeile!) Zu beenden.

Einige allgemeinere Informationen:

Stellen Sie außerdem immer sicher, dass sich die Filter in derselben Zeile befinden:

# Example: Log mail server control messages to mail-queue.log
if $hostname == 'titus'\
and $programname == 'smtp.queue.'\
and $syslogseverity <= '6' then /var/log/titus/mail-queue.log
& ~

Nützliche Filter:

$hostname
$programname
$msg
$syslogseverity

Betreiber:

== (equals)
contains
and
or

Weitere Informationen: http://wiki.rsyslog.com/index.php/Configuration_Samples

vergesslich
quelle
können wir den kaputten Link reparieren?
Mark Walsh
1

Das können wir auch versuchen. Es funktioniert gut für mich.

$template Incoming-logs,"/var/log/testing_docker/%PROGRAMNAME%.log"
if $programname startswith 'docker' then -?Incoming-logs

HINWEIS: Hier testing_dockersollte dem Syslog-Benutzer der Besitz eines Ordners übertragen werden. Befolgen Sie den folgenden Befehl, um Berechtigungen festzulegen.

chown syslog:syslog testing_docker
Nagaraj
quelle