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

How to extract value from log with grok and logstash

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

<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'、'result' 和 'user'?

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

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