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

时间:2019-10-09 13:23:59

标签: json elasticsearch logstash logstash-grok

我是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]"
        }
}

因此,我想在开始时取这个数字,并将其分配给“访问”键,我不需要“我访问”字,然后将json对象传递给“消息”。

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

1 个答案:

答案 0 :(得分:0)

使用此:

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

输入:

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]"}"
    ]
  ]
}