Nossa rede possui 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 for do pool1 faça isso
se do pool2 fizer isso
Dessa forma, eu poderia fazer com que os logs dos Macs parecessem logs do Mac, os logs do Linux parecessem logs do Linux, os logs da Cisco parecessem logs da Cisco, etc.
Responder1
Se você tiver uma versão decentemente recente dorsyslog(pacotes da versão mais recente podem ser encontrados em seu site), então você poderá usar um array para comparação, conforme explicadoaqui. Algo como:
if $fromhost-ip == [ "192.168.1.1", "192.168.1.2"... ] then {
action(...do this...)
}
Embora desde odocumentação de estruturas de controleparece que deveria ser mais parecido com:
if $variable in [array]
Se você tiver um intervalo grande, poderá preencher uma variável local com uma estrutura foreach como essa. Você pode encontrar mais informações sobre scripts se pesquisar nos documentos por "RainerScript"
Responder2
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 - consulte os documentos aos quais Radu vincula para obter mais informações.
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 reconstruções, há um pacote rsyslog7 do sistema operacional 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.