Grok filter模式无法从方括号日志提取指定值问题咨询
问题根源
你写的Grok规则存在特殊字符未转义的问题:
- Grok基于正则实现,
[是正则的元字符,代表字符集定义的起始,直接写在规则里会触发正则编译逻辑异常,要么报错要么匹配失败 - 你的日志里存在字面量的反斜杠
\和双引号",这两个也是正则特殊字符,不转义的话无法匹配到实际日志内容 - 之前用
%{GREEDYDATA:A}的规则能生效,是因为GREEDYDATA会贪婪匹配所有字符到后面的分隔符位置,相当于绕开了前面特殊字符的转义要求
正确配置方案
1. 单个字段匹配(比如单独提取u_id对应的值)
规则需要对所有特殊字符转义,写法如下:
\[\\\"u_id\\\", %{NUMBER:u_id}\]
2. 同时提取三个目标值
如果要一次性提取post、404、111111三个值,完整规则如下:
\[\\\"request_type\\\", %{WORD:request_type}\], \[\\\"status_code\\\", %{NUMBER:status_code}\], \[\\\"u_id\\\", %{NUMBER:u_id}\]
匹配后输出结果结构为:
{ "request_type": "post", "status_code": "404", "u_id": "111111" }
额外注意点
如果是在Logstash的配置文件里写Grok规则,反斜杠需要多转义一层,每个字面量反斜杠要写4个反斜杠\\\\来匹配,避免被Logstash的配置解析逻辑提前吃掉转义符。
内容的提问来源于stack exchange,提问作者gp_
相关产品推荐
相关产品推荐

