Logstash和ElasticSearch之间丢失的文档

时间:2015-10-13 20:42:04

标签: elasticsearch logstash

我正在运行和基本的ELK堆栈。所有三个组件都在vm中运行。 Logstash正在侦听TCP 9140,其输入通过NxLog代理从大约30个Windows Server 2008和30个Windows Server 2003事件(evts)接收,并输出到elasticsearch。

这已经完美运行了几个星期。我可以看到ElasticSearch每天创建索引,可以浏览文档,创建图表,一切都很好。

经过一个周末,我意识到在星期五晚上9点的某个时刻,所有新事件都停止了。 没有网络问题,所有服务器都在发送他们的日志 我只能看到很多与Watcher(弹性插件)相关的错误/警告都没有许可,但没什么有趣的。我甚至可以看到与新指数相关的日志被自动创建。

所以我删除了插件,重新启动弹性并且一切都很好。 我认为这不是实际问题,我认为弹性搜索被挂断了。

我有两个问题:

1)我应该如何解决这些问题。 (所有服务都没有,没有文件被索引)?

2)如果Logstash已启用且接受输入但Elastic已关闭,那么从我的Windows服务器发送的事件会发生什么?从Nxlog的角度来看,那些日志被正确地发送到logstash,没有理由重试,那些日志会“永远”丢失?

谢谢! 罗德里戈。

1 个答案:

答案 0 :(得分:1)

如果ES由于某种原因而停机或挂断(太忙的GC-ing等),则logstash将retry a few times然后让它继续,这意味着你将丢失这些事件。

有许多方法可以缓解这种情况,但良好的做法是durably store the events(在数据库或消息排队系统中)并且只有在成功发送到ES后才会弹出它们。此类消息传递系统包括Redis(使用列表或通道作为队列),Apache Kafka(分布式日志),Rabbitmq(分布式消息队列)等

有很多方法可以将这些技术与logstash一起配置,一个例子是this one,它显示了与Kafka一起使用的Logstash。在您的情况下,这将意味着Nxlog ships its logs to kafka而不是直接到Logstash。然后Logstash consumes logs from a Kafka topic

您的里程会有所不同,但这里的主要想法是,如果无法将日志发送到Elasticsearch,您的日志就不会丢失。这将回答你的第二个问题。

至于你的第一个,我建议安装其他ES插件,例如bigdeskHQ和/或官方Marvel plugin,它们都提供了对目前正在进行的工作的深入见解在Elasticsearch内部。您将能够快速检测问题的位置并采取措施。