Este é um follow-up para esta questão . Estou tentando entender o potencial de recursão com o rsyslog. Eu tenho uma configuração rsyslog
simples que envia syslogs para um pipe nomeado, bem como para 127.0.0.1
(ou seja, estou tentando intencionalmente causar recursão). Eu esperava que se eu emitisse um syslog, rsyslog
seria infinitamente recursivo por causa da regra que encaminha o syslog para localhost, mas a experiência a seguir mostrou que isso só é verdade quando rsyslog
está escutando pelo UDP e não pelo TCP. Alguém pode explicar por que isso é assim?
(Nota: eu fiz mkfifo /tmp/foopipe -m666
primeiro, para criar o pipe nomeado usado nos experimentos abaixo)
As seguintes configurações rsyslog
...
# dummy.conf
$ModLoad imudp.so
$UDPServerRun 514
local7.* @127.0.0.1
& |/tmp/foopipe
... produz recursão infinita se você fizer " cat < /tmp/foopipe
" em um terminal e " logger -p local7.info "Test"
" em outro (isto é, no terminal onde você faz cat
, você verá uma inundação sem fim do " Teste "syslog impresso". Isso parece esperado. Mas por que, então, faz a seguinte configuração ...
# dummy.conf
$ModLoad imtcp.so
$InputTCPServerRun 514
local7.* @127.0.0.1
& |/tmp/foopipe
... não produz recursão infinita? O syslog "Test" é impresso apenas uma vez na janela em que você faz o cat
. Tudo o que fiz foi mudar a escuta do UDP para o TCP.
Nota: Acredito que RepeatedMsgReduction
esteja desativado por padrão e deve ser ativado explicitamente, porque se eu adicionar $RepeatedMsgReduction on
ao primeiro arquivo de configuração (aquele com $UDPServerRun
), o syslog "Test" será impresso duas vezes no terminal onde você faz cat
. Se eu adicionar $RepeatedMsgReduction off
ao segundo arquivo de configuração (aquele com $ InputTCPServerRun), então o syslog "Test" ainda será impresso apenas uma vez no terminal onde você executará cat
. Portanto, RepeatedMsgReduction
parece ter alguma relevância para a escuta UDP, mas aparentemente não afeta a ausência inesperada de recursão na escuta TCP.
Grato por qualquer percepção que a comunidade possa oferecer.