日志解析Grok模式匹配失败,求适配指定日志的正确模式建议
正确的Grok模式适配方案
我来帮你搞定这个Grok匹配问题!先梳理下现有模式的问题,再给你针对性的解决方案:
现有模式的核心问题
你的原始日志里有很多细节被现有模式忽略了,导致匹配失败:
- 日志开头IP后有
- -,时间戳被[ ]包裹,现有模式直接跳过了这些固定字符 - 多个字段(比如name、msg、path)是被双引号包裹的,现有模式没匹配引号,导致字段边界识别错误
msg、label这类包含空格的长文本,不能用%{WORD}(仅匹配无空格单词),需要用支持空格的匹配规则- 路径
/user/admistrator/68768.pdf包含斜杠、点等特殊字符,%{WORD}无法完整匹配
适配你需求的正确Grok模式
根据你期望的输出格式,我调整了Grok模式,兼顾所有日志细节:
%{IP:client} - - \[%{HTTPDATE:timestamp}\] "%{WORD:name}" %{NUMBER:x1:int} %{NUMBER:x2:int} "%{DATA:msg}" %{NUMBER:X3:int} "%{WORD:format}" "%{URIPATH:path}\.%{WORD:type}" "%{DATA:label}"
模式细节解释
%{IP:client}:匹配客户端IP,和你原来的规则一致- - \[:匹配IP后的固定字符- - [(注意[是正则特殊字符,必须转义成\[)%{HTTPDATE:timestamp}\]:匹配时间戳并闭合],HTTPDATE正好适配日志里的时间格式" %{WORD:name}":匹配双引号包裹的设备名称SHARP56%{NUMBER:x1:int}/%{NUMBER:x2:int}:匹配数字50和245,:int指定字段类型为整数(可选,不加也能匹配)" %{DATA:msg}":匹配双引号里带空格的信息文本INFO: System componement ready for use%{NUMBER:X3:int}:匹配数字23" %{WORD:format}":匹配双引号里的格式A4" %{URIPATH:path}\.%{WORD:type}":拆分路径和文件类型,提取出path=/user/admistrator/68768和type=pdf,完全符合你的期望" %{DATA:label}":匹配双引号里带空格的标签文本INFO: No ERROR TO SHOW
匹配后的输出效果
使用这个模式后,会得到你期望的结构化数据:
{ "client": "116.50.181.5", "timestamp": "18/May/2019:09:05:32 +0000", "name": "SHARP56", "x1": 50, "x2": 245, "msg": "INFO: System componement ready for use", "X3": 23, "format": "A4", "path": "/user/admistrator/68768", "type": "pdf", "label": "INFO: No ERROR TO SHOW" }
内容的提问来源于stack exchange,提问作者moez skanjii
相关产品推荐
相关产品推荐

