【发布时间】:2015-11-04 14:15:21
【问题描述】:
我们的一个应用程序通过 udp 以 JSON 格式将日志发送到远程服务器。 一些日志是链接的 JSON 字符串,如下所示:
{"s":1,"x":"foo"}{"s":1,"p":"bar"}
我正在使用以下过滤器来拆分消息。 当输入是文件时,日志会拆分,我会收到多个事件。 但是,当我使用 udp 输入时,它不会拆分字符串并仅从第一个 JSON 中创建单个事件。
filter { mutate { gsub => [ "message","}{","}#{"] } split { terminator => [ "#" ] } if [message] =~ /^{.*}$/ { json { source => message } } }
有人知道这里出了什么问题吗?
【问题讨论】:
-
你的“message”字段被logstash处理后是什么样子的?
-
通过 udp 发送数据时,似乎在括号之间添加了“\u0000”,因此 gsub 函数没有做应该做的事情。此更新配置解决了这个问题 - filter { mutate { gsub => [ "message","}\u0000{","}#{"] } split { terminator => [ "#" ] } if [message] =~ /^{.*}$/ { json { 源 => 消息 } } }