【问题标题】:How to parse json object from string line?如何从字符串行解析 json 对象?
【发布时间】:2020-02-06 20:29:24
【问题描述】:

我是 Logstash 的新手。我想使用 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} 中尝试了这种模式,但当然这不是我需要的。请问,有人可以帮忙吗?

【问题讨论】:

  • 并且在grok过滤器之后,如Ishara的回答所示,可以使用json过滤器来解析消息。

标签: json elasticsearch logstash logstash-grok


【解决方案1】:

使用这个:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多