如何在New Relic中使用GROK表达式解析JSON格式日志?
解决New Relic嵌套JSON日志解析的方案
一、GROK+JSON解析组合方案
你的日志后半段是类JSON结构,但存在单引号(level: 'info')不符合标准JSON格式的问题,需要先修正格式再解析,步骤如下:
- 用GROK拆分时间与原始JSON字符串
保留你原有的GROK模式完成基础拆分,把时间和日志主体分开:
%{TIMESTAMP_ISO8601:time} %{GREEDYDATA:rawJson}
这一步会将时间存入time字段,剩余的类JSON内容存入rawJson字段。
- 修正JSON格式并解析
在New Relic日志解析配置中,添加后续处理规则:
- 首先添加字符替换规则:将
rawJson字段里的单引号'替换为双引号",把内容转为标准JSON格式。 - 然后启用JSON解析规则:将处理后的
rawJson字段解析为结构化的JSON对象。
二、替代处理方法
方法1:直接基于JSON解析
如果能先统一日志引号格式,可跳过GROK直接用New Relic的JSON解析功能:
- 先通过替换规则把所有单引号替换成双引号,让日志变成标准JSON结构:
{"time": "2020-07-16T19:20:30.45+01:00", "message": {"statement": "Server Log: Responds!"}, "level": "info"} - New Relic会自动将其解析为结构化字段,无需额外GROK规则。
方法2:用GROK直接提取嵌套字段
如果不需要完整解析JSON对象,可直接用GROK提取目标字段,示例模式:
%{TIMESTAMP_ISO8601:time} \{message: \{statement: "%{DATA:message.statement}"\}, level: '%{DATA:level}'\}
这种方式能直接提取出message.statement和level字段,但缺点是日志结构变化时,GROK模式需要同步调整,灵活性不如JSON解析。
注意事项
- New Relic日志解析遵循「先GROK,后转换规则」的顺序,配置时要注意步骤先后。
- 标准JSON要求字符串必须用双引号,这是JSON解析成功的核心前提。
内容的提问来源于stack exchange,提问作者VasanthThoraliKumaran
相关产品推荐
相关产品推荐

