grok有跳过值的模式

时间:2017-11-06 08:01:19

标签: logstash logstash-grok

我的grok模式有问题跳过值。请帮我修一下我的模式。

我的价值:

  

2013-02-28 09:57:56,SERVICEID | 0863591797 | topup | C00000001 || 10.0 | 20170110 | N | aaa | bbb | ccc | aaaaabbb | ccccc | kkkkk | hhhhh

我的格言模式:

^%{TIMESTAMP_ISO8601:timestamp}\,%{WORD:SERVICE}\|%{WORD:MSISDN}\|%{WORD:RULEID}\|%{WORD:CAMPCODE}\|(?:.*|%{WORD:CURRENT})\|(?<EVENTVALUE>(?:%{BASE10NUM}))\|%{WORD:EVNETDTTM}\|%{WORD:NEXTWAVE}\|%{GREEDYDATA:NAMEVALUEPAIR}

EVENTVALUE应为10.0,但在解析&#39; 20170110&#39;之后可以使用此值。 和EVNETDTTM是&#39; N&#39;

2 个答案:

答案 0 :(得分:0)

我不确定您要尝试实现的目标,但是遵循grok表达式应符合您的信息:

%{TIMESTAMP_ISO8601:timestamp}\,%{WORD:SERVICE}\|%{WORD:MSISDN}\|%{WORD:RULEID}\|%{WORD:CAMPCODE}\|\|%{NUMBER:CURRENT}\|%{WORD:EVNETDTTM}\|%{WORD:NEXTWAVE}\|%{GREEDYDATA:NAMEVALUEPAIR}

https://grokconstructor.appspot.com的结果: results

编辑:如果两个反斜杠意味着两者之间可能存在可选值,则可以使用以下模式:

%{TIMESTAMP_ISO8601:timestamp}\,%{WORD:SERVICE}\|%{WORD:MSISDN}\|%{WORD:RULEID}\|%{WORD:CAMPCODE}\|(%{WORD:CURRENT})?\|%{NUMBER:EVNETDTTM}\|%{WORD:NEXTWAVE}\|%{GREEDYDATA:NAMEVALUEPAIR}

(%{WORD:CURRENT})?表示CURRENT是可选的,有关详细信息,请参阅this question

新结果: new results

答案 1 :(得分:0)

我建议使用过滤器插件csv。如果你弄清楚时间戳和逗号(就像在你的grok中)你可以指定&#34; |&#34;作为csv插件的分隔符。