在 Logstash 和 ElasticSearch 之间丢失的文件

Documents lost between Logstash and ElasticSearch

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

这已经 运行 几周了。我可以看到 ElasticSearch 每天都在创建索引,并且可以浏览文档、创建图表,一切都很好。

一个周末后,我意识到在周五晚上 9 点的某个时候,所有新活动都停止了。 没有网络问题, 所有服务器都在传送它们的日志 我所能看到的是很多 error/warnings 与 Watcher(弹性插件)相关,但没有什么有趣的。我什至可以看到与新一天的新索引相关的日志被自动创建。

所以我删除了插件,重新启动了 elastic,一切都很好。 我不认为那是实际问题,我认为 elasticsearch 挂了。

我有两个问题:

1) 我应该如何解决这些问题。 (所有服务都已启动,没有文档被编入索引)?

2) 如果 Logstash 已启动并接受输入但 Elastic 已关闭,那么来自我的 windows 服务器的那些传送事件会怎样?从 Nxlog 的角度来看,这些日志已正确发送到 logstash,没有理由重试并且这些日志将丢失,"forever" ?

谢谢! 罗德里戈.

如果 ES 由于任何原因(太忙于 GC 等)关闭或挂起,那么 logstash 将 retry a few times 然后放手,这意味着您将丢失这些事件。

有很多方法可以缓解这种情况,但一个好的做法是 durably store the events (either inside a DB or a message queueing system) and pop them out only when they have been successfully sent to ES. Such messaging systems include Redis (using lists or channels as queues), Apache Kafka (distributed log), Rabbitmq(分布式消息队列)等

有很多方法可以将这些技术与 logstash 一起配置,一个例子是 this one which shows Logstash being used with Kafka. In your case, this would mean that Nxlog ships its logs to kafka instead of directly to Logstash. Then Logstash consumes logs from a Kafka topic

你的里程会有所不同,但这里的主要思想是你的日志不会丢失,以防它们无法发送到 Elasticsearch。这将回答你的第二个问题。

至于你的第一个,我建议安装其他 ES 插件,比如 bigdesk and HQ and/or the official Marvel plugin,它们都可以深入了解 Elasticsearch 内部正在发生的事情。您将能够快速检测到 issue/s is/are 的位置并采取行动。