如何从字符串行解析json对象?

问题描述 投票:0回答:1

我是Logtash的新手。我想使用grok将日志文件中的每一行解析为json对象。我的日志如下:

1570519737247 I access {"date":"2019-10-08T09:28:57.247","rootTitle":"title1","rootModel":"model1","dcTitle":"[1a]"}
1570519737247 I access {"date":"2019-10-08T09:28:57.247","rootTitle":"title2","rootModel":"model2","dcTitle":"[1b]"}

您可以看到每一行都以文本开头,然后有一个有效的json对象。

而且我想为看起来像这样的每一行构造一个对象:

{
    "accesing": "1570519737247",
    "message": {
        "date":"2019-10-08T09:28:57.247",
        "rootTitle":"title1",
        "rootModel":"model1",
        "dcTitle":"[1a]"
        }
}

所以我想在开始时取这个数字并将其分配给“ accesing”键,我不需要“ I access”字,然后将json对象传递给“ message”。

我在grok调试器%{WORD:accesing}%{GREEDYDATA:message}中尝试了这种模式,但是那当然不是我所需要的。请,有人可以帮忙吗?

json elasticsearch logstash logstash-grok
1个回答
0
投票

使用此:

%{WORD:accesing} I access %{GREEDYDATA:message}

input:

1570519737247 I access {"date":"2019-10-08T09:28:57.247","rootTitle":"title1","rootModel":"model1","dcTitle":"[1a]"}

输出:

{
  "accesing": [
    [
      "1570519737247"
    ]
  ],
  "message": [
    [
      "{"date":"2019-10-08T09:28:57.247","rootTitle":"title1","rootModel":"model1","dcTitle":"[1a]"}"
    ]
  ]
}
© www.soinside.com 2019 - 2024. All rights reserved.