rsyslog - problema de regex

2

Estou tentando configurar o serviço logentries . Se uma entrada de log tiver um token, eu gostaria de enviá-la para api.logentries.com:10000. O token é um guia no formato aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee.

Agora eu estou fazendo:

# If there's a logentries token then send it directly to logentries 
:msg, regex, ".*[a-z0-9]{8}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{12}.*"
& @@api.logentries.com:10000 

Eu verifiquei os logs de depuração do rsyslog e meu regex não está correspondendo, mas não consigo descobrir por que ou como corrigi-lo:

5245.961161378:7fb79b514700: Filter: check for property 'msg' (value ' fb1c507f-2ede-4d7f-a140-2bd8d56e133 - application - [play-akka.actor.default-dispatcher-1] - Found user: 4fb11ea5e4b00a1aeebe2800') regex '.*[a-z0-9]{8}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{12}.*': FALSE
    
por benmccann 20.12.2012 / 00:06

3 respostas

2

O rsyslog é a pilha fumegante de lixo que não aceita chaves em um regex, fato completamente não mencionado na documentação. Assim, o seguinte regex:

[a-z0-9]{8}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{12}

Precisa ser reescrito como:

[a-z0-9][a-z0-9][a-z0-9][a-z0-9][a-z0-9][a-z0-9][a-z0-9][a-z0-9]-[a-z0-9][a-z0-9][a-z0-9][a-z0-9]-[a-z0-9][a-z0-9][a-z0-9][a-z0-9]-[a-z0-9][a-z0-9][a-z0-9][a-z0-9]-[a-z0-9][a-z0-9][a-z0-9][a-z0-9][a-z0-9][a-z0-9][a-z0-9][a-z0-9][a-z0-9][a-z0-9][a-z0-9][a-z0-9]
    
por 20.12.2012 / 07:15
0
$msg , regex, yourRegEx @api.logentries.com:10000 // Filter out and send
& ~ // Discard whatever matched the rule

$template myTemplate,"TOKEN %msg%" 
*.* @api.logentries.com:10000?myTemplate

Eu não testei isso ... mas será algo assim

    
por 20.12.2012 / 02:44
0

O Rsyslog suporta o POSIX BRE e a ERE Syntax. Ambos são um pouco incomuns hoje em dia. No entanto, uma diferença entre os dois é que chars { e } precisam ser escapados no BRE - que também é sua sintaxe padrão do rsyslog quando esses Templates são usados.

Veja: link e link

Além disso, em comparação com o PCRE:

  • BRE / ERE é sempre ganancioso; não há bandeira não-gananciosa .*?
  • Não há grupos sem agrupamento (no Rsyslog): (?: ... )
  • Zero-or-More ( x? ) deve ser escrito como: x{0,1} em ERE

Esta cadeia de caracteres
fb1c507f-2ede-4d7f-a140-2bd8d56e133
é correspondido no Modo ERE por: ([[:alnum:]]{8}(-[[:alnum:]]{4}){3}-[[:alnum:]]{11})

    
por 15.01.2017 / 17:13