我需要匹配这个条目
2015/10/30 23:58:21 pid 22223 [email protected] 192.168.0.1 [p4/2012.2/LINUX26X86_64/536738] 'test-monitor show'
为了匹配这个,我写了这个正则expression式
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”
我不是一个正规expression专家,但任何帮助真的很感激。
我没有看到具体的问题,但看看https://grokdebug.herokuapp.com/ – 一次一个字段地build立你的模式,看看导致匹配失败的步骤。
有趣的方法。 Logstash附带的Grok库有一些预先构build的模式,可以帮助您避免像在此处那样构build大型正则expression式。 重新使用他们的工程可能会比build立自己的工作有更好的运气。
您在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}\'