Logtash grok / multiline confusion

1

Meus padrões reais são mais complexos, mas tentei reduzir o problema ao problema principal. Algo que não entendo Tente isso em link

Estou tentando combinar as seguintes linhas:

Start-Date: 2017-08-07  06:48:12
End-Date: 2017-08-07  06:48:12

Start-Date: 2017-08-07  12:55:16
End-Date: 2017-08-07  12:56:01

Usando os padrões adicionais:

DATE_EU2 %{YEAR}-%{MONTHNUM}-%{MONTHDAY}[\s]+?%{HOUR}:?%{MINUTE}(?::?%{SECOND})?%{ISO8601_TIMEZONE}?
DATE_COMB %{DATE_EU2}?%{DATE_EU}?%{DATE_US}?

E o seguinte padrão principal:

Start-Date: %{DATE_COMB:starttime}\nEnd-Date: %{DATE_COMB:endtime}

Com o filtro de múltiplas linhas:

^\n (negated)

Execute isso e você deve (esperançosamente!) obter:

Start-Date: 2017-08-07 06:48:12 End-Date: 2017-08-07 06:48:12 Start-Date: 2017-08-07 12:55:16 End-Date: 2017-08-07 12:56:01
MATCHED
starttime   2017-08-07··06:48:12
endtime 2017-08-07··06:48:12
after match:    Start-Date: 2017-08-07 12:55:16 End-Date: 2017-08-07 12:56:01

Então, ele corresponde ao primeiro registro, mas não corresponde ao segundo. Se eu adicionar um '\ z' ao final do padrão principal, ele corresponderá o segundo registro, mas não o primeiro. Então, está claramente tratando a coisa toda como uma linha. Mas por que? Meu filtro de múltiplas linhas informa que, se uma linha não for iniciada com uma nova linha, ela faz parte do registro anterior, certo? Bem, isso deve deixar uma linha em branco no meio que claramente começa com uma nova linha e deve, portanto, incluir um evento separado, não?

Qualquer indicação aceita com gratidão.

    
por spoovy 08.08.2017 / 11:30

1 resposta

3

Entrada

Start-Date: 2017-08-07  06:48:12
End-Date: 2017-08-07  06:48:12

Start-Date: 2017-08-07  12:55:16
End-Date: 2017-08-07  12:56:01

Filtro multilinha = ^\n (negado)

O filtro multilinhas analisará cada linha, por sua vez, para ver o que deve ser mesclado.

First line starts with '^Start-Date' (merged)
Second line starts with '^End-Date' (merged)
Third line is blank (merged, unless logstash skips blank lines)
Fourth line starts with '^Start-Date' (merged)
Fifth line starts with '^End-Date' (merged)

Tentar combinar um \n , especialmente no início de uma linha, não faz sentido.

É melhor combinar ^End-Date: e mesclar isso com anterior. (Ou se houver mais linhas para um evento e sempre começar com Start-Date: , combine isso e negue.

Editar, baseado em comentários e testes com o construtor Grok.

Se fizer mais sentido usar a linha em branco como separador de registro, ^\z ou ^\Z parece funcionar. \Z ignora qualquer terminador final, mas visto que \z também funcionou nos meus testes, parece confirmar que a linha, quando passada para o filtro, é uma cadeia completamente vazia (sem nova linha ou quaisquer outros caracteres de terminação). / p>     

por 08.08.2017 / 11:57

Tags