rsyslog - Logs diferentes para endereços IP diferentes?

1

Nossa rede tem dispositivos espalhados por toda parte. Eu gostaria de fazer algo como:

pool1 {192.168.1.1-192.168.1.20, 192.168.1.50} pool2 {192.168.1.21-192.168.1.40, 192.168.1.66}

se do pool1 fizer isso

se do pool2 fizer isso

Dessa forma, eu poderia fazer os logs dos Macs parecerem os logs do Mac, os logs do Linux se parecem com os logs do Linux, os logs da Cisco se parecem com os logs da Cisco etc. Eu não consegui encontrar nada específico suficiente no Google.

    
por John Oliver 29.09.2015 / 19:25

2 respostas

1

Se você tiver uma versão atual e decente do rsyslog ( pacotes da versão mais recente podem ser encontrados em seu site Em seguida, você deve ser capaz de usar uma matriz para comparação, como explicado aqui. Algo como:

if $fromhost-ip == [ "192.168.1.1", "192.168.1.2"... ] then {
  action(...do this...)
}

Embora na documentação das estruturas de controle , parece que deve ser mais como:

if $variable in [array]

Se você tem um grande intervalo, você deve ser capaz de preencher uma variável local com uma estrutura foreach como essa. Você pode encontrar mais informações sobre scripts se pesquisar nos documentos "RainerScript"

    
por 05.10.2015 / 16:41
1

Isso funciona para mim:

# accept logging for remote hosts on a per-ip-address basis
$template DirectoryPerHost,"/var/log/REMOTEHOSTS/%fromhost-ip%/%syslogfacility-text%.log"
if ( ( $fromhost-ip != "127.0.0.1" ) and (  $fromhost-ip != "::1" ) ) then  {
    ?DirectoryPerHost
} else {
    whatever you want to do with local log files here
}

Existem outras variáveis que você pode usar em vez de fromhost-ip - veja os documentos que o Radu faz link para mais.

Radu está certo de que você precisa de um rsyslog recente para fazer isso.

Se você estiver preso no RHEL6 ou em uma de suas recompilações, haverá um pacote rsyslog7 no SO que você pode usar no lugar do rsyslog padrão (antigo). A versão padrão não suporta esta sintaxe, mas a v7 sim.

    
por 05.10.2015 / 18:48

Tags