如何使用 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 地址,但我建议做一些不同的事情:
- 使用
grok
获取站点名称后的整个字符串。
- 将
kv
过滤器与 field_split => ';'
结合使用,这将创建与您的键同名的字段。
- 在
kv
过滤阶段捕获的 src_ip
地址上使用 csv
过滤器。
- 使用
columns => [ cstnr', 'result', 'user' ]
获取正确命名的字段。
我必须从这样的行组成的日志中提取值:
<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 地址,但我建议做一些不同的事情:
- 使用
grok
获取站点名称后的整个字符串。 - 将
kv
过滤器与field_split => ';'
结合使用,这将创建与您的键同名的字段。 - 在
kv
过滤阶段捕获的src_ip
地址上使用csv
过滤器。- 使用
columns => [ cstnr', 'result', 'user' ]
获取正确命名的字段。
- 使用