在logstash udp输入上拆分json

在logstash udp输入上拆分json,json,udp,logstash,Json,Udp,Logstash,我们的一个应用程序以JSON格式通过udp向远程服务器发送日志。 一些日志是链接的JSON字符串,如下面的一个: {“s”:1,x:“foo”}{“s”:1,p:“bar”} 我正在使用以下筛选器来拆分消息。 当输入为file时,日志被拆分,我得到多个事件。 但是,当我使用udp输入时,它不会拆分字符串并从第一个JSON创建单个事件 有人知道这里出了什么问题吗?因为我的评论是正确的,我将把它移到这里作为答案: 检查logstash通过stdout{}输出函数发送给elasticsearch的内容

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

{“s”:1,x:“foo”}{“s”:1,p:“bar”}

我正在使用以下筛选器来拆分消息。 当输入为file时,日志被拆分,我得到多个事件。 但是,当我使用udp输入时,它不会拆分字符串并从第一个JSON创建单个事件


有人知道这里出了什么问题吗?

因为我的评论是正确的,我将把它移到这里作为答案:


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

由于我的注释位于正确的路径上,因此我将其移到此处作为答案:


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

看起来,我也回答了错误的位置。 这就是解决问题的方法:


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

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

看起来,我回答的位置也不对。 这就是解决问题的方法:


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

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

logstash处理后的“消息”字段是什么样子的?当通过udp发送数据时,似乎在括号之间添加了“\u0000”,因此gsub函数没有执行它应该执行的操作。这个更新配置解决了这个问题-过滤器{mutate{gsub=>[“message”,“}\u0000{”,“}{{35;{”]}split{terminator=>[“}”}如果[message]=~/^{.*}$/{json{source=>message}}你的“message”是什么意思字段在经过logstash处理后看起来像什么?当通过udp发送数据时,似乎在括号之间添加了“\u0000”,因此gsub函数没有执行它应该执行的操作。此更新配置解决了此问题-筛选器{mutate{gsub=>[“message”,“}\u0000{”,“}{export}{terminator=>[“#”]}如果[message]=~/^{.*}$/{json{source=>message}