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

如何使用grok和logstash从日志中提取值,logstash,logstash-grok,logstash-configuration,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 1[2017-03-15T08:45:23.168Z]apache.01.mysi

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

<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 
1[2017-03-15T08:45:23.168Z]apache.01.mysite.com事件=登录;src_ip=xxx.xxx.xxx.xxx\,xxx.xxx.xxx\,xxx.xxx.xxx.xxx;场地=FE-B1场地;cstnr=1454528;用户=498119;结果=成功
例如,%{IP:source} 我只获得第一个IP,但有时我有3个IP地址。
如何提取所有IP、'cstnr'、'result'和'user'?

看起来您有一个嵌套的、分隔的键值格式。第一个分隔符是
,其中每一个都是
键=值
。此外,这些值在
上进行分隔。您有足够的内存来获取第一个IP地址,但我建议您做一些不同的事情:

  • 使用
    grok
    获取站点名称后的整个字符串
  • 使用带有
    字段的
    kv
    过滤器,它将创建与键名相同的字段
  • 使用
    kv
    过滤器阶段捕获的
    src_ip
    地址上的
    csv
    过滤器。
    • 使用
      columns=>[cstnr','result','user']
      来正确命名这些字段