从日志条目中的 json 中提取 json 值
Posted
技术标签:
【中文标题】从日志条目中的 json 中提取 json 值【英文标题】:Extracting json value from json within a log entry 【发布时间】:2020-04-30 02:59:58 【问题描述】:使用 sumologic,我如何对消息部分为 json(因此不完全)的日志条目执行查询?
示例条目:
[2020-04-30 02:10:32] 生产。警告:我们受到速率限制 "class":"App\WebhookService\WebhookExecutor","headers":"Date":["Thu, 30 2020 年 4 月 02:10:32 GMT"],"Content-Type":["application/json"],"Content-Length":["88"],"Connection":["keep-alive"],"设置 Cookie":...
我有很多不同类路径的此类错误,有些是 webhook 执行,有些是不同的对象。我的最终目标是能够计算每个类名的日志条目,如下所示:
WebhookExecutor | 156
SyncDataService | 48
DeleteService | 13
我从以下内容开始:
"We were rate limited" | json auto | json "class"
我对 ^ 的期望是它会在我的日志搜索结果中创建一个名为 class
的列,然后我可以按此分组、计数等。
【问题讨论】:
【参考方案1】:不确定“部分 Json”是什么意思? 即:
-
日志消息包含其他文本和正确的 Json
或者消息包含类似于 Json 的内容,但不是真正的 Json - 例如Json 消息的前缀
假设选项 1(其他文本 + 正确的 Json)
您需要将您的 Json 提取到它自己的适当字段中。否则| json auto
无法接机。
所以:
"We were rate limited"
| parse "We were rate limited *" as limitedJson
| json auto
| count by class
应该做的工作。
甚至不需要第一行,因为parse
也会进行过滤。
假设选项 2(没有正确的 Json,只是类似的东西)
在这种情况下比较困难,但仍然可行。
我还没有测试过,但是这样的东西应该可以工作:
"We were rate limited"
| parse "\"class\":\"*\"" as class
| count by class
在这里转义嵌套引号看起来不太好。
免责声明:我目前受雇于 Sumo Logic。
【讨论】:
感谢您的跟进! “部分 json” 我指的是上面包含的示例日志条目,它以消息开头,然后 json 开始。我不太明白 为什么 需要解析,因为json auto
的文档似乎表明它能够智能地提取 json? help.sumologic.com/05Search/Search-Query-Language/…。即便如此,选项 2 非常适合我的用例,谢谢!
有趣。老实说,我不知道。可能是“如果内容出现在 json blob 之后的消息末尾,则提取可能会失败。”?您粘贴的内容是真实的日志消息还是编辑过的?即省略号是实际日志行的一部分还是仅用于发布到 ***?
...
已编辑。但你是对的。日志条目的上下文被切断,因为 json blob 太大,所以弄乱了 json。好电话:)以上是关于从日志条目中的 json 中提取 json 值的主要内容,如果未能解决你的问题,请参考以下文章
如何将多个键值条目的 JSON 对象反序列化为 Rust 中的自定义结构
Nx e2e cypress runner:来自 cypress.env.json 条目的值不会覆盖 cypress.json env 对象中的相同条目