在logstash udp输入上拆分json

时间:2015-11-04 14:15:22

标签: json udp logstash

我们的一个应用程序通过JSON格式的udp将日志发送到远程服务器。 一些日志是链接的JSON字符串,如下所示:

  

{" S":1," X":"富"} {" S":1," P& #34;:"杆"}

我使用以下过滤器来拆分消息。 当输入是文件时,日志分裂,我得到多个事件。 但是,当我使用udp输入时,它不会拆分字符串并仅从第一个JSON创建单个事件。

filter {
    mutate {
       gsub => [ "message","}{","}#{"]
    }
    split {
       terminator => [ "#" ]
    }
    if [message] =~ /^{.*}$/  {
       json {
           source => message
       }
    }
}

有谁知道这里有什么问题?

2 个答案:

答案 0 :(得分:0)

由于我的评论是在正确的道路上,我将把它作为答案移到这里:

通过stdout {}输出函数检查logstash发送给elasticsearch的内容。如果您的字符与您的模式不匹配,则逻辑不会触发。

答案 1 :(得分:0)

看起来,我也回答了错误的位置。 这就解决了它:

当通过udp发送数据时,似乎在括号之间添加了“\ u0000”,因此gsub函数没有像我想要的那样替换char。 此更新配置解决了此问题 -

filter {
              mutate {
                 gsub => [ "message","}\u0000{","}#{"] 
              } 
              split { 
                 terminator => [ "#" ] 
              } 
              if [message] =~ /^{.*}$/ { 
                 json { source => message }
              }
  }