如何使用grok和logstash从日志中提取值

时间:2017-03-20 13:20:23

标签: logstash logstash-grok logstash-configuration

我必须从由这样的行组成的日志中提取值:

<38>1 [2017-03-15T08:45:23.168Z] apache.01.mysite.com event=login;src_ip=xxx.xxx.xxx.xxx\, xxx.xxx.xxx.xxx\, xxx.xxx.xxx.xxx;site=FE-B1-Site;cstnr=1454528;user=498119;result=SUCCESS 

例如,使用%{IP:source} 我只获得了第一个IP,但有时我有3个IP地址。 我如何提取所有IP,'cstnr','结果'和'用户'?

1 个答案:

答案 0 :(得分:1)

看起来你有一个嵌套的,分隔的键值格式。第一个分隔符为;,每个分隔符为key=value。此外,这些值在,&#39;上分隔。你有足够的grok来获得第一个IP地址,但我建议做一些不同的事情:

  1. 使用grok获取站点名称后面的整个字符串。
  2. kv过滤器与field_split => ';'一起使用,这会创建与您的密钥相同的字段。
  3. csv过滤阶段中捕获的src_ip地址上使用kv过滤器。
    • 使用columns => [ cstnr', 'result', 'user' ]获取正确名称的字段。