ELK堆栈中REDIS的作用是什么?

12

我目前使用filebeat作为日志收集器的架构,它将日志发送到logstash索引实例,然后再发送到托管在AWS中的Elasticsearch。由于存在持久化TCP连接,我无法使用AWS ELB对多个logstash索引器实例进行负载平衡,因为filebeat始终会选择其中一个实例并将其发送到该实例。因此,我决定使用redis。现在看到了在ELK堆栈中缩放和使其高度可用的困难程度,我想问一下redis到底有什么意义。我读了无数次它作为缓存器的作用,但是如果filebeat停止向logstash发送日志,如果logstash无法处理负载,为什么我们需要一个缓冲区呢?Filebeat足够聪明,知道停止发送日志。Logstash足够聪明,如果Elasticsearch不可用则停止向Elasticsearch发送日志。所以整个流程会停止。我真的不理解redis在每个标准的ELK架构中充当缓冲区的作用。

1个回答

22
Redis、Kafka或XYZ可以作为ELK堆栈中的缓冲区,正如您所指出的那样。ES团队昨天发表了一篇博客文章,介绍了在管道中使用Kafka的方法,但也可以使用Redis或XYZ。他们提出了关于何时需要这样的缓冲区以及何时不需要的好观点。
拥有这样的缓冲区是个好主意,因为它可以:
1. 处理事件激增 2. 处理可能无法访问的ES集群
如果您不预期这样的行为,即:
1. 您的事件始终以相同的速率到达和/或 2. 如果您需要升级ES集群,则可以稍后再发送日志
那么您就不需要这样的缓冲区。而且,这将减少您需要管理、监控和维护的软件数量。
当涉及到弹性堆栈生态系统时,没有一种通用的解决方案,它总是取决于您精确的使用情况和要求。您需要问自己什么对您、您的系统和用户来说很重要,然后相应地设计解决方案。

2
当前的文档建议不使用外部排队解决方案:https://www.elastic.co/guide/en/logstash/current/deploying-and-scaling.html#integrating-with-messaging-queues,“建议使用Logstash持久队列而不是外部排队层”。 - mmey
1
那是在Logstash支持内部持久队列之前的事情;-) - Val

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接