在多个 Logstash 实例上协调操作

Coordinating Actions on Multiple Logstash Instances

我最近一直在研究建立一个 elasticsearch 集群,并且很好奇如何协调多个 logstash 实例之间的操作。我需要定期索引数据库中的数据,这可以使用 jdbc 输入插件来完成。我的问题是我不确定如何跨多个 logstash 实例协调此操作。例如,如果我 运行 仅在一个实例上执行操作,并且该实例发生故障,则数据将不会被摄取到 elasticsearch 中。另一方面,如果我 运行 在多个实例上执行操作,我将免受任何一个实例失败的影响,但我将在 elasticsearch 中拥有重复数据。

我相信将负载均衡器与 logstash-forwarder 或 filebeat 一起使用可以避免这个问题,因为数据会均匀地发送到所有实例。不幸的是,我只能从我的 logstash 实例查询数据库,我不能在数据库服务器本身上设置 logstash-forwarder 或 filebeat。

我编写的 ftp{} 输入过滤器遇到了与您描述的相同的问题。现在,它只安装在一台 logstash 机器上,并且需要一个 ansible 运行 将它移动到另一个 logstash 以防系统出现故障。不理想。

我开始不喜欢使用 logstash 来收集数据,并且倾向于使用外部程序来收集数据,而使用 logstash-forwarder 来进行传输。

在我的例子中,我将重写 ftp gatherer 作为独立脚本,将文件放入 logstash-forwarder 监视的目录中。当然,那里也没有固有的冗余,但至少我可以随意重启我的 logstash 实例。