从日志条目中的 json 中提取 json 值

Extracting json value from json within a log entry

使用 sumologic,我如何对消息部分 json(所以不完全)的日志条目执行查询?

示例条目:

[2020-04-30 02:10:32] production.WARNING: We were rate limited {"class":"App\WebhookService\WebhookExecutor","headers":{"Date":["Thu, 30 Apr 2020 02:10:32 GMT"],"Content-Type":["application/json"],"Content-Length":["88"],"Connection":["keep-alive"],"Set-Cookie":...

我有很多这样的错误,它们具有不同的 class 路径,有些是 webhook 执行,有些是不同的对象。我的最终目标是能够计算每个 class 名称的日志条目,如下所示:

WebhookExecutor     | 156
SyncDataService     | 48
DeleteService       | 13

我从以下内容开始:

"We were rate limited" | json auto | json "class"

我对 ^ 的期望是它会在我的日志搜索结果中创建一个名为 class 的列,然后我可以根据该列进行分组、计数等。

不确定“部分 Json”是什么意思? 即:

  1. 日志消息包含其他文本和适当的 Json
  2. 或者消息包含与 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。