是否可以在 sumologic 中解析嵌套的 json?

use*_*553 3 logging sumologic

所以我有一个这种格式的日志:

{
    "date":1598808279.785381,
    "log":"{\"level\":\"info\",\"ts\":15988.7852,\"caller\":\"server/middlewares.go:26\",\"msg\":\"Request Log\",\"status\":200,\"method\":\"GET\",\"url\":\"/health\",\"duration\":0.000008323}",
    "container_id":"someid",
    "container_name":"/service-name",
    "source":"stdout"
}
Run Code Online (Sandbox Code Playgroud)

我想提取该log领域内的状态。阅读文档后,我看起来应该能够做到:

_collector="MyService" | json auto | fields log.status
Run Code Online (Sandbox Code Playgroud)

但是,这会引发语法错误.

我认为的另一个解决方案是,根据其他语言的工作方式,管道通常返回对象,因此如果我可以增量返回字段,这应该可以工作:

_collector="MyService" | json auto | fields (log) | fields (status)
Run Code Online (Sandbox Code Playgroud)

但这也行不通。

我尝试指定给定字段:

_collector="MyService" | json auto "fields.log.status"
Run Code Online (Sandbox Code Playgroud)

但这是行不通的。

我还尝试使用如下字段直接提取该值:

_collector="MyService" | json field=Message "log.status"
Run Code Online (Sandbox Code Playgroud)

最后,我尝试做所有这些变化:

_collector="MyService" | json auto field=log "status"

_collector="MyService" | json auto field=log | fields status

_collector="MyService" | json auto field=log "status"

_collector="MyService" | json auto field=log "log.status"
Run Code Online (Sandbox Code Playgroud)

但无济于事。

有什么想法我哪里出错了吗?

Ava*_*ria 7

日志将 json 转义为字符串,因此您需要 json 解析两次。

| json "log"
| json auto field=log
| fields status
Run Code Online (Sandbox Code Playgroud)