使用SPATH提取Splunk JSON日志version字段异常的写法咨询
问题原因
spath命令仅支持解析标准格式的JSON、XML结构化数据,你当前日志里的context字段值为context{version="1.1.2", id="123", userId=""},不属于合法JSON:前面多了冗余的context类名前缀,且version、id这类键名没有被双引号包裹,无法被spath识别。- 原查询没有提前从原始日志中提取出context对应的大括号内容,直接传入未处理的原始字段也会导致解析失败。
解决方案
方案1:直接用正则提取(仅需version字段时推荐,性能更好)
不需要使用spath,直接通过正则匹配提取version值即可,查询语句如下:
index="$index" "$filterString" | rex field=_raw "context=context\{version=\"(?<versionId>[^\"]+)\"" | stats count by versionId
方案2:转标准JSON后用spath解析(需提取context内多个字段时推荐)
如果后续还需要提取id、userId等同属context下的属性,可以先把提取到的内容转换为合法JSON,再用spath解析:
index="$index" "$filterString" // 提取context大括号内的所有内容 | rex field=_raw "context=context\{(?<context_raw>[^\}]+)\}" // 给所有键名补双引号,拼接为标准JSON格式 | eval context_json = "{" + replace(context_raw, "(\w+)=", "\"\1\":") + "}" // 用spath提取目标字段 | spath input=context_json output=versionId path=version | stats count by versionId
内容的提问来源于stack exchange,提问作者Anuja Barve
相关产品推荐
相关产品推荐

