2017-07-06 129 views
0

我有一个ELK群集让我的日志保持在下面,并且我想在log中提取一些使用logstash grok的字段。带有前缀和后缀的匹配字符串使用Logstash grok pattern

[info ][170703 10:34:38.998686/832]acct ok,deal_time=122ms;ACCESS_PORT=216179383538692472&ACCESS_TYPE=2&ACCOUNT=07592111916&Acct-Status-Type=3; 

这里是我的grok模式。

%{SYSLOG5424SD}\[%{DATA:[@metadata][timestamp]}\/%{NUMBER}\]%{WORD:type}\ %{WORD:status}\,%{GREEDYDATA}%{NUMBER:dealtime}ms\;%{GREEDYDATA}(?<acct>(?<=ACCOUNT=).*) 

我想提取一些字段的值并将其赋予事件变量。 例如。 acct = 07592111916

我使用(?(?< = ACCOUNT =)。* & $)来提取值,但不起作用,我的问题在哪里?

我调试在这个网站的代码。 http://grokdebug.herokuapp.com

+0

下面是否为你工作的答案? –

+0

@WiktorStribiżew是的,它的工作原理。 – Kizer

+0

如果您有其他问题,请发布。 –

回答

1

我认为你需要提取这种方式:

(?<acct>(?<=ACCOUNT=)[^&]+)

+0

谢谢,它的工作原理。我怎么走得更远,例如,检查“ACCOUNT =”字符串是否存在,如果不跳过该模式。 – Kizer