Qual é a sintaxe correta para o re_match () do rsyslog?

0

Estou tentando filtrar mensagens indesejadas de uma tarefa cron (systemd) da saída do rsyslog. No entanto, o rsyslog sempre reclama do segundo argumento de re_match() . A regra de filtro que eu 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 corrigir (o filtro, não os documentos)?

    
por U. Windl 12.11.2018 / 16:00

1 resposta

1

Você precisa dobrar a barra invertida, caso contrário, o rsyslog tentará interpretar \d como uma seqüência de escape dentro de uma seqüência de caracteres, e isso não é passível de análise. Portanto, deve ser \d .

Mas \d não é um Posix ERE. Você supostamente quis dizer [0-9] , por exemplo, para um dígito. Então tente

'^Started [Ss]ession [0-9]+ of user ntpmon\.$'
    
por 12.11.2018 / 19:53