Estou tentando filtrar mensagens indesejadas de um cron job (systemd) da saída do rsyslog. No entanto, o rsyslog sempre reclama do segundo argumento do re_match()
. A regra de filtro que tenho é:
if $programname == "systemd" and re_match($msg, '^Started [Ss]ession \d+ of user ntpmon\.$') then stop
Comecei a colocar o regex entre aspas duplas e o rsyslog reclamou. Então eu coloco o regex entre aspas simples e o rsyslog ainda reclama.
A documentação é um pouco vaga:
re_match(expr, re)
returns 1, if expr matches re, 0 otherwise. Uses POSIX ERE.
Como faço para corrigi-lo (o filtro, não os documentos)?
Você precisa dobrar a barra invertida, caso contrário, o rsyslog tenta interpretar
\d
como uma sequência de escape dentro de uma string, e isso não é analisável. Assim deve ser\\d
.Mas
\d
não é um Posix ERE. Você presumivelmente quis dizer[0-9]
, por exemplo, para um dígito. Então tente