通过 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 运行 也能正常工作。
下面的代码在线程中运行,从队列中取出消息,并将它们发送到 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 运行 也能正常工作。