Sar*_*uru 5 webserver syslog-ng node.js apache-kafka
我正在从他们的快速入门教程中学习 Apache Kafka:http : //kafka.apache.org/documentation.html#quickstart。到目前为止,我已经完成了如下设置。一个生产者节点,其中一个 web 服务器运行在 8888 端口。另一个节点上的 Kafka 服务器(代理)、消费者和 Zookeeper 实例。我已经测试了具有 3 个分区的默认启用控制台/文件的生产者和消费者。设置是完美的,我能够看到我按照他们创建的顺序发送的消息(在每个分区中)。
现在,我想将从 Web 服务器生成的日志发送到 Kafka Broker。这些消息稍后将由消费者处理。目前我正在使用 syslog-ng 将服务器日志捕获到文本文件中。关于如何实现生产者以使用 kafka 进行日志聚合,我提出了 3 个粗略的想法
生产者实现
第一类:
监听 syslog-ng 的 tcp 端口。获取每条消息并发送到 kafka 服务器。这里我们有两个中间进程:Producer 和 syslog-ng
第二类:使用 syslog-ng 作为 Producer。应该找到一种方法将消息发送到 Kafka 服务器而不是写入文件。syslog-ng,生产者是中间进程。
第三类:将网络服务器本身配置为生产者。
我的想法是否正确。在最后一种情况下,我们没有任何中间过程。但我怀疑它的实现会影响服务器性能。任何人都可以让我知道使用 Apache Kafka 的最佳方式(如果以上 3 种不好)并指导我完成服务器的适当配置吗?...
PS:我在我的网络服务器上使用 node.js
谢谢,
萨拉
由于您指定希望将生成的日志发送到 kafka 代理,因此看起来确实执行一个监听和重新发送消息的进程主要会创建另一个故障点,而没有任何附加价值(除非您需要特定的 syslog-ng 功能)。
Syslog-ng 可以使用以下方式将消息发送到外部应用程序: http ://www.balabit.com/sites/default/files/documents/syslog-ng-ose-3.4-guides/en/syslog-ng-ose-v3.4 -guide-admin/html/configuring-destinations-program.html。我不知道是否还有其他方法可以做到这一点。
对于第三个选项,我不确定 kafka 是否可以轻松集成到 Node.js 中,因为它需要 C++ 生成器,而当我上次寻找生成器时,我找不到。然而,一个简单的替代方案可能是让 kafka 读取服务器创建的日志文件并发送这些日志(使用 kafka 提供的控制台生成器)。这通常是一个好方法,因为它完全消除了 kafka 和 Web 服务器之间的依赖关系(嵌入生产者需要错误处理、配置等)。它需要使用 tail --follow 并且它对我们来说非常有效。如果您希望了解更多详细信息,我也可以将其包括在内。您仍然需要监督 kafka 执行以确保消息不会丢失(并提供恢复选项以离线发送失败的消息)。但是,这种方法的好处是工具之间不存在依赖性。
希望能帮助到你...
埃兰