在 logstash udp 输入上拆分 json
split json on logstash udp input
我们的一个应用程序通过 udp 以 JSON 格式将日志发送到远程服务器。
一些日志被链接 JSON 个字符串,如下所示:
{"s":1,"x":"foo"}{"s":1,"p":"bar"}
我正在使用以下过滤器拆分消息。
当输入是文件时,日志拆分并且我得到多个事件。
但是,当我使用 udp 输入时,它不会拆分字符串并仅从第一个 JSON.
创建单个事件
filter {
mutate {
gsub => [ "message","}{","}#{"]
}
split {
terminator => [ "#" ]
}
if [message] =~ /^{.*}$/ {
json {
source => message
}
}
}
有人知道这里出了什么问题吗?
由于我的评论是正确的,我将把它移到这里作为答案:
检查 logstash 通过 stdout{} 输出函数发送到 elasticsearch 的内容。如果您的字符与您的模式不匹配,逻辑将不会触发。
看来我也回复错地方了。
这是解决它的方法:
当通过 udp 发送数据时,似乎在括号之间添加了“\u0000”,因此 gsub 函数没有像我希望的那样替换 char。
此更新配置解决了这个问题 -
filter {
mutate {
gsub => [ "message","}\u0000{","}#{"]
}
split {
terminator => [ "#" ]
}
if [message] =~ /^{.*}$/ {
json { source => message }
}
}
我们的一个应用程序通过 udp 以 JSON 格式将日志发送到远程服务器。 一些日志被链接 JSON 个字符串,如下所示:
{"s":1,"x":"foo"}{"s":1,"p":"bar"}
我正在使用以下过滤器拆分消息。 当输入是文件时,日志拆分并且我得到多个事件。 但是,当我使用 udp 输入时,它不会拆分字符串并仅从第一个 JSON.
创建单个事件filter { mutate { gsub => [ "message","}{","}#{"] } split { terminator => [ "#" ] } if [message] =~ /^{.*}$/ { json { source => message } } }
有人知道这里出了什么问题吗?
由于我的评论是正确的,我将把它移到这里作为答案:
检查 logstash 通过 stdout{} 输出函数发送到 elasticsearch 的内容。如果您的字符与您的模式不匹配,逻辑将不会触发。
看来我也回复错地方了。 这是解决它的方法:
当通过 udp 发送数据时,似乎在括号之间添加了“\u0000”,因此 gsub 函数没有像我希望的那样替换 char。 此更新配置解决了这个问题 -
filter {
mutate {
gsub => [ "message","}\u0000{","}#{"]
}
split {
terminator => [ "#" ]
}
if [message] =~ /^{.*}$/ {
json { source => message }
}
}