通过 tcp 发送 json 到 logstash,保持连接打开,从不显示

Sending json to logstash over tcp, keeping connection open, never show up

下面的代码在线程中运行,从队列中取出消息,并将它们发送到 logstash。我有一个单元测试证明 json(消息的内容)进入套接字并到达另一端。

但是,当我将它指向实际的 logstash 时,什么也没有出现。我可以 'nc' 相同的内容并显示出来。当然,nc 会在发送完 one 消息后关闭连接。如果我们失去连接,重新连接会有点复杂。

logstash 配置非常简单:

input {
 tcp {
     port => 9191
     codec => json
     }
}
output {
    stdout {
       codec => rubydebug
    }
}


         while (true) {
                byte[] message = messages.take();
                executor.getWithRetry(() -> {
                    try {
                        if (socket == null) {
                            socket = new Socket(sinkAddress, port);
                        }
                        socket.getOutputStream().write(message);
                        return null;
                    } catch (IOException e) {
                        socket.close();
                        socket = null;
                        throw e;
                    }
                }).join();
            }

确保您在邮件末尾发送换行符。我发现即使从 windows 框发送“\n”到 linux 上的 logstash 运行 也能正常工作。