No Rsyslog, como você substitui correspondências de regex por texto personalizado?

No Rsyslog, como você substitui correspondências de regex por texto personalizado?

Estou tentando capturar texto por meio de expressão regular e substituir o texto por uma string personalizada.

Meu código atual captura endereços IP com êxito, mas não sei como substituir o endereço IP por texto personalizado junto com o restante da mensagem:

$Template privateIP,"%TIMESTAMP% %HOSTNAME% %syslogtag% %msg:R,ERE,0,DFLT:([0-9]{1,3}\.){3}[0-9]{1,3}--end%\n"

Meu primeiro pensamento é, de alguma forma, mover o regex para fora do modelo (ou seja, com algum RainerScript) e criar um novo campo/variável modded_msgdefinido como uma msgpropriedade modificada. E então use %modded_msg%no $Template.

Tentei várias vezes (obrigado, ChatGPT), mas não consigo fazer funcionar.

Responder1

O exemplo a seguir pode verificar a propriedade msg para um endereço IP e, em seguida, substituir todas as ocorrências dele na mensagem por alguma string, dependendo do endereço.

set $.myip = re_extract($msg, "(([0-9]{1,3}\\.){3}[0-9]{1,3})", 0, 1, 0);
if ($.myip == 0) then  set $.mymsg = $msg;
else{
 if ($.myip=="192.1.2.3") then
  set $.mymsg = replace($msg, $.myip, "SPECIALIP");
 else
  set $.mymsg = replace($msg, $.myip, "boringip");
}
template(name="mytemplate" type="string" string="%TIMESTAMP% %$.mymsg%\n")
action(type="omfile" file="output" template="mytemplate")

re_extract()procura o regexp na propriedade. Observe o extra ()para que possamos extrair o grupo de captura 1, toda a partida. Além disso, o \é duplicado. O último parâmetro é 0, retornado em caso de falha. A string retornada é salva em uma variável local $.myip.

replace()substitui todas as ocorrências da string na propriedade e retorna o resultado em outra variável local. O modelo usa esta variável local.

informação relacionada