我有一个带有ZeroMQ输入插件的logstash服务器设置,用于从我编写的简单应用程序中收集数据。当我在具有相同ZeroMQ安装(Ubuntu,apt-get install libzmq1
)的系统上运行应用程序时,它可以很好地工作。
但是,在我们的实际系统中,我们使用ZeroMQ 4.0.1,并且logstash报告数据有效负载为空。我已经添加了尽可能多的调试,我开始认为它是一个简单的版本不兼容(尽管ZeroMQ说这应该工作)。我用来测试的应用程序是微不足道的:
// Prepare our context and socket
zmq::context_t context (1);
zmq::socket_t socket (context, ZMQ_PUB);
socket.connect ("tcp://logstash:2120");
for (int request_nbr = 0; request_nbr != 10; request_nbr++) {
dataList["number"] = boost::lexical_cast<std::string>(request_nbr);
std::string log = map2json(dataList);
zmq::message_t request (log.size());
memcpy ((void *) request.data (), log.c_str(), log.size());
std::cout << "Sending msg " << request_nbr << "…" << std::endl;
socket.send (request);
sleep(1);
}
当应用程序再次链接到ZMQ2.2(来自libzmq1
)时,这非常有效,但是当我将应用程序与我的ZeroMQ 4.0.1安装(从源代码构建)链接时,logstash会因json解析错误而失败(说明有效载荷为空)。
更新
我在Logstash服务器上从源安装了ZeroMQ 3.2.4,现在它可以工作了。
答案 0 :(得分:1)
Pubsub过滤从2.x反转到3.x,如果您尝试使用主题潜艇,则不起作用。
我发了一个问题,请参阅乔丹对以下主题的回应。
https://groups.google.com/forum/m/#!msg/logstash-users/Tx_J7eCFUNI/pS3qkTRCFDIJ
答案 1 :(得分:1)
我认为这是ZeroMQ 2.2的LogStash利用率中的一个错误,或者至少是2.2和4.0之间的不兼容性。
我在服务器上安装了ZeroMQ 3.2.4(从源代码构建),现在我的4.x客户端能够将日志发布到我的Logstash服务器。