所以我有这种格式的日志:
{
"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"
}
我想提取log
字段中的状态。阅读文档后,看来我应该能够做到:
_collector="MyService" | json auto | fields log.status
但是,这会引发.
我认为的另一种解决方案是,根据其他语言的工作方式,管道通常返回对象,因此,如果我可以递增地返回字段,则该方法应该起作用:
_collector="MyService" | json auto | fields (log) | fields (status)
但这也不起作用。
我尝试为此指定给定字段:
_collector="MyService" | json auto "fields.log.status"
但这不起作用。
我还尝试过使用如下字段直接提取该值:
_collector="MyService" | json field=Message "log.status"
最后,我尝试了所有这些变化:
_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"
但无济于事。
有什么想法我要去哪里吗?
答案 0 :(得分:1)
日志以字符串形式转义json,因此您需要json解析两次。
| json "log"
| json auto field=log
| fields status