Jak skonfigurować rsyslog, aby wysyłał dzienniki z określonego programu do zdalnego serwera syslog?

17

Mam program, który wypisuje do syslog o podanej nazwie tagu / programu. Chciałbym móc filtrować ruch syslog z tego programu i wysyłać go do zdalnego serwera syslog, pozostawiając cały pozostały ruch syslog lokalny.

Mogę wysłać cały ruch do zdalnego serwera za pomocą

*.* @remote_server

Jak to filtrować?

Simmo
źródło
1
To odpowiedziało na moje pytanie. stackoverflow.com/questions/4042115/ruby-syslog-custom-facility
Simmo

Odpowiedzi:

37

Pliki konfiguracyjne Rsyslog znajdują się w: /etc/rsyslog.d/*.conf

Rsyslog odczytuje pliki conf sekwencyjnie, dlatego ważne jest, aby nazwać swój plik konfiguracyjny, aby konkretna konfiguracja została załadowana, zanim cokolwiek innego się wydarzy. Nazwij więc swój plik zaczynając od wiodących zer, tj 00-my-file.conf. Lepiej jest utworzyć nowy plik, aby aktualizacje i tak dalej nie zastępowały lokalnej konfiguracji.

Przykład:

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

Lub jeśli chcesz po prostu usunąć niektóre wpisy:

if $programname == 'programname' then ~

W twoim przypadku: (UDP)

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

Lub (TCP)

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

Te & ~środki, aby zatrzymać dopasowanie przetwarzania (poprzednią linię tylko!) Wpisy dalej.

Kilka bardziej ogólnych informacji:

Ponadto zawsze upewnij się, że filtry są w tym samym wierszu:

# 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
& ~

Przydatne filtry:

$hostname
$programname
$msg
$syslogseverity

Operatorzy:

== (equals)
contains
and
or

Więcej informacji: http://wiki.rsyslog.com/index.php/Configuration_Samples

oblivian
źródło
1
czy możemy naprawić uszkodzony link?
Mark Walsh,
1

Możemy również tego spróbować. Dla mnie działa dobrze.

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

UWAGA: tutaj testing_dockerwłasność folderu należy przekazać użytkownikowi syslog. Wykonaj poniższe polecenie, aby ustawić uprawnienia.

chown syslog:syslog testing_docker
Nagaraj
źródło