Você pode fazer isso usando substitutos de propriedade trabalhando na propriedade msg
, supondo que é onde a string localhost
é encontrada.
Coloque no seu rsyslog.conf
ou similar uma linha definindo um modelo chamado, digamos, newmsg
:
$template newmsg,"%timestamp% %programname% %msg:R,ERE,1:(.*) localhost --end% HOST01 %msg:R,ERE,1: localhost (.*)--end%\n"
Para tornar isso mais legível aqui, ele é dividido em várias linhas, mas você deve usar a versão acima:
$template newmsg,
"%timestamp% %programname%
%msg:R,ERE,1:(.*) localhost --end%
HOST01
%msg:R,ERE,1: localhost (.*)--end%
\n"
Contém 2 usos de um substituto assim: %msg:R,ERE,1: ...(...)... --end%
onde %msg%
é a propriedade usada como entrada para um regexp R
, estendida regexp ERE
, mantém apenas o grupo de captura 1, seguido pelo padrão regexp que tem um grupo de captura ()
, com o substituto finalizado por --end
.
Como esse modelo sempre adiciona a palavra HOST01
à mensagem, você só deve usá-la se a mensagem realmente contiver localhost
, então
edite a ação em que você registra a mensagem para testar isso, por exemplo:
:msg, contains, " localhost " -/var/log/test.log; newmsg
Observe o uso do modelo no final: ; newmsg
.
Você também pode usar modelos ao enviar para um controle remoto, por exemplo:
action(type="omfwd"
Target="server.example.net"
Port="10514"
Protocol="tcp"
Template="newmsg"
)