rsyslog Filtrando com base no endereço IP com caracteres curinga

2

Eu tenho algum tráfego syslog sendo processado pelo rsyslog e gostaria de configurar filtros para armazenar os logs com base nos endereços IP dos dispositivos de origem. Eu tenho um grande número de dispositivos e preferiria evitar a criação de uma regra para cada dispositivo. O esquema de IP é consistente o suficiente para pensar que eu poderia lidar com tudo com uma única regra, mas estou tendo problemas para fazê-lo funcionar.

Aqui estão alguns exemplos (com falha) do que estou tentando realizar:

:FROMHOST, regex, "10\.[0-9]+\.1\.2" -/var/log/test.log
& ~

ou

if ( re_match($fromhost-ip, '10\.[0-9]+\.1\.2') ) then { -/var/log/test.log }
& ~ 

Basicamente, o esquema de IP para esses dispositivos sempre será 10. *. 1.2, onde * é um número de 2 dígitos correspondente à localização do dispositivo.

Alguém pode me dar uma idéia de onde estou indo errado com isso?

Obrigado!

    
por Brad Turner 28.05.2015 / 18:04

1 resposta

2

Na verdade, consegui descobrir a solução depois de encontrar uma opção de depuração para executar o rsyslog. Aparentemente, você pode chamar o rsyslogd diretamente do console da seguinte forma:

rsyslogd -d

Isso mostrará uma transmissão ao vivo de todas as análises de regras. Depois de uma tentativa de tentativa e erro usando esse truque, consegui determinar que minhas regras de filtro estavam falhando porque várias partes eram necessárias, não apenas escapadas, mas duplo com escape. Isso realmente me surpreendeu.

Aqui está a minha regra final:

:fromhost-ip, regex, "10\.[0-9]\+\.1\.2" -/var/log/test.log
& ~

E aqui está a saída para alguns exemplos de sucesso. Observe que o + tem que aparecer aqui como escape, o que é estranho, porque não são encontradas correspondências se você conectá-lo ao testador de regex do rsyslog oficial desta maneira:

Filter: check for property 'fromhost-ip' (value '10.1.1.2') regex '10\.[0-9]\+\.1\.2': TRUE

Filter: check for property 'fromhost-ip' (value '10.24.1.2') regex '10\.[0-9]\+\.1\.2': TRUE

No caso de alguém ler isso algum dia, é curioso, aqui estão alguns dos meus exemplos de tentativa e erro, a maioria dos quais simplesmente falhou completamente:

Filter: check for property 'fromhost-ip' (value '10.1.1.2') regex '10.[0-9]+.1.2': FALSE

Filter: check for property 'fromhost-ip' (value '10.1.1.2') regex '^10.[0-9]+.1.2$': FALSE

Filter: check for property 'fromhost-ip' (value '10.1.1.2') regex '10\.[0-9]+\.1\.2': FALSE

Filter: check for property 'fromhost-ip' (value '10.1.1.2') regex '10\.1\.1\.2': TRUE

Filter: check for property 'fromhost-ip' (value '10.1.1.2') regex '10\.[0-9]\.1\.2': TRUE

Filter: check for property 'fromhost-ip' (value '10.1.1.2') regex '10\.[0-9]+\.1\.2': FALSE
    
por 30.05.2015 / 07:52

Tags