En Rsyslog, ¿cómo se reemplazan las coincidencias de expresiones regulares con texto personalizado?

En Rsyslog, ¿cómo se reemplazan las coincidencias de expresiones regulares con texto personalizado?

Estoy intentando capturar texto mediante una expresión regular y reemplazar el texto con una cadena personalizada.

Mi código actual captura con éxito las direcciones IP, pero no sé cómo reemplazar la dirección IP con texto personalizado junto con el resto del mensaje:

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

Mi primer pensamiento es sacar de alguna manera la expresión regular de la plantilla (es decir, con algo de RainerScript) y crear un nuevo campo/variable modded_msgque se establezca en una msgpropiedad modificada. Y luego utilícelo %modded_msg%en $Template.

Lo he intentado varias veces (gracias, ChatGPT), pero no consigo que funcione.

Respuesta1

El siguiente ejemplo puede verificar la propiedad msg de una dirección IP y luego reemplazar todas sus apariciones en el mensaje por alguna cadena, dependiendo de la dirección.

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()busca la expresión regular en la propiedad. Tenga en cuenta el extra ()para que podamos extraer el grupo de captura 1, todo el partido. Además, \se duplica. El último parámetro es 0, devuelto en caso de error. La cadena devuelta se guarda en una variable local $.myip.

replace()reemplaza todas las apariciones de la cadena en la propiedad y devuelve el resultado en otra variable local. La plantilla utiliza esta variable local.

información relacionada