Logstash Grok 解析失败

Logstash Grok 解析失败

我需要匹配此条目

2015/10/30 23:58:21 pid 22223 [email protected] 192.168.0.1 [p4/2012.2/LINUX26X86_64/536738] 'test-monitor show'

为了匹配这个我写了这个正则表达式

P4_DATE (?>\d\d){1,2}\/(?:0[1-9]|1[0-2])\/(?:(?:0[1-9])|(?:[12][0-9])|(?:3[01])|[1-9])
P4_TIME (?:2[0123]|[01]?[0-9])\:(?:[0-5][0-9])\:(?:(?:[0-5]?[0-9]|60)(?:[:.,][0-9]+)?)
P4_PID \b(?:[1-9][0-9]*)\b
P4_USER \b\w+\b
P4_HOSTNAME \b(?:[0-9A-Za-z][0-9A-Za-z-]{0,62})(?:\.(?:[0-9A-Za-z][0-9A-Za-z-]{0,62}))*(\.?|\b)
P4_IP (?<![0-9])(?:(?:[0-1]?[0-9]{1,2}|2[0-4][0-9]|25[0-5])[.](?:[0-1]?[0-9]{1,2}|2[0-4][0-9]|25[0-5])[.](?:[0-1]?[0-9]{1,2}|2[0-4][0-9]|25[0-5])[.](?:[0-1]?[0-9]{1,2}|2[0-4][0-9]|25[0-5]))(?![0-9])

然后整体

 P4_MATCH %(P4_DATE:p4date} %{P4_TIME:p4time} pid %{P4_PID:p4pid} %{P4_USER:p4user}\@%{P4_HOSTNAME:p4client} %{P4_IP:p4remoteclient} [%{DATA:p4version}] \'%{DATA:p4action}\'" }

然后通过匹配

match => [ "message", "%{P4_MATCH}" ]   

但仍然出现“_beats_input_codec_plain_applied,_grokparsefailure”

我不是正则表达式专家,但如果有任何帮助我都会非常感激。

答案1

我没有看到具体的问题,但看看https://grokdebug.herokuapp.com/——一次建立一个字段的模式,并查看哪个步骤导致匹配失败。

答案2

有趣的方法。Logstash 附带的 Grok 库有一些预建模式帮助您避免像您在那里所做的那样构建大型正则表达式。您可能更愿意重复使用他们的工程而不是自己构建。

答案3

p4date字段中应该使用花括号,但实际却使用了括号,这是语法错误%{P4_DATE:p4date}

您需要转义方括号,因为p4version应该是\[%{DATA:p4version}\]

" }之后有多余的字符p4action需要删除。

P4_MATCH %(P4_DATE:p4date} %{P4_TIME:p4time} pid %{P4_PID:p4pid} %{P4_USER:p4user}\@%{P4_HOSTNAME:p4client} %{P4_IP:p4remoteclient} [%{DATA:p4version}] \'%{DATA:p4action}\'" }

应该是这个 P4_MATCH %{P4_DATE:p4date} %{P4_TIME:p4time} pid %{P4_PID:p4pid} %{P4_USER:p4user}\@%{P4_HOSTNAME:p4client} %{P4_IP:p4remoteclient} \[%{DATA:p4version}\] \'%{DATA:p4action}\'

相关内容