Como configurar o rsyslog para enviar logs de um programa específico para um servidor syslog remoto?

17

Eu tenho um programa que gera para syslog com uma determinada tag / nome do programa. Eu gostaria de poder filtrar o tráfego syslog desse programa e enviá-lo para um servidor syslog remoto, deixando todo o restante tráfego syslog local.

Posso enviar todo o tráfego para o servidor remoto com

*.* @remote_server

Como faço para filtrar?

Simmo
fonte
11
Isso respondeu à minha pergunta. stackoverflow.com/questions/4042115/ruby-syslog-custom-facility
Simmo

Respostas:

37

Os arquivos de configuração do Rsyslog estão localizados em: /etc/rsyslog.d/*.conf

O Rsyslog lê os arquivos conf sequencialmente, por isso é importante que você nomeie seu arquivo de configuração para que a configuração específica seja carregada antes que qualquer outra coisa aconteça. Então, nomeie seu arquivo começando com zeros à esquerda, ou seja 00-my-file.conf. É melhor criar um novo arquivo para que as atualizações e assim por diante não substituam sua configuração local.

Exemplo:

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

Ou se você apenas deseja descartar determinadas entradas:

if $programname == 'programname' then ~

No seu caso: (UDP)

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

Ou (TCP)

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

Os & ~meios para interromper o processamento de entradas correspondentes (somente linha anterior!).

Algumas informações mais gerais:

Além disso, sempre verifique se os filtros estão na mesma linha:

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

Filtros úteis:

$hostname
$programname
$msg
$syslogseverity

Operadores:

== (equals)
contains
and
or

Mais informações: http://wiki.rsyslog.com/index.php/Configuration_Samples

esquecido
fonte
11
podemos consertar o link quebrado?
Mark Walsh
1

Também podemos tentar isso. Está funcionando bem para mim.

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

NOTA: aqui a testing_dockerpropriedade da pasta deve ser dada ao usuário do syslog. Siga o comando abaixo para definir permissões.

chown syslog:syslog testing_docker
Nagaraj
fonte