Rsyslog: como separar logs de entrada com endereços IP

1

Estou tentando configurar um Rsyslog com a seguinte configuração: Eu escuto a porta 514 para receber dados de hosts diferentes: 172.16.111.222, 172.16.111.111 e 172.16.222.111. E eu quero armazenar esses logs em pastas diferentes para cada host. Então eu fiz este conf:

$ModLoad imudp


$Ruleset RemoteConnections
$RulesetCreateMainQueue on
$ActionQueueType LinkedList
$ActionQueueFileName dbremotecons
$ActionResumeRetryCount -1
*.* ~


$InputUDPServerBindRuleset RemoteConnections
$UDPServerRun 514

if $fromhost-ip=='172.16.111.222' then /var/log/prod1/%FROMHOST-IP%/%syslogfacility-text%.log
& ~
if $fromhost-ip=='172.16.111.111' then /var/log/prod1/%FROMHOST-IP%/%syslogfacility-text%.log
& ~

if $fromhost-ip=='172.16.222.111' then /var/log/product2/%FROMHOST-IP%/%syslogfacility-text%.log
& ~

Infelizmente, não está funcionando, o rsyslog não está registrando nada. Não tenho certeza do que "& ~" significa, descobri isso na internet.

Alguma idéia para fazer isso funcionar?

    
por ctaf 19.11.2015 / 18:24

2 respostas

1

Você não pode usar placeholders diretamente nas regras. Use modelos em vez disso. O seguinte deve funcionar:

$template DynaFile,"/var/log/%FROMHOST-IP%/%syslogfacility-text%.log"
*.* -?DynaFile

Ou, para estar mais perto do seu código:

$template prod1,"/var/log/prod1/%FROMHOST-IP%/%syslogfacility-text%.log"
$template prod2,"/var/log/prod2/%FROMHOST-IP%/%syslogfacility-text%.log"
if $fromhost-ip=='172.16.111.111' then ?prod1
if $fromhost-ip=='172.16.111.222' then ?prod1
if $fromhost-ip=='172.16.222.111' then ?prod2
    
por 24.09.2016 / 06:13
0

"~" significa descartar ou parar, que é um rsyslog " ação ".

Então:

if $fromhost-ip=='172.16.111.222' then /var/log/prod1/%FROMHOST-IP%/%syslogfacility-text%.log
& ~

significa que se a instrução "if ... then ..." funcionar, isto é, a condição for atendida e a mensagem for registrada em um arquivo, então pare - não prossiga mais.

    
por 31.10.2017 / 22:04

Tags