为什么我的生产 ELK 堆栈 + 机器规格需要代理?

Why do I need a broker for my production ELK stack + machine specs?

我最近建立了一个测试 ELK stack Ubuntu 盒子来测试功能并且对它非常满意。我的生产用例涉及每天摄取至少 100GB 的日志。我希望尽可能地具有可扩展性,因为随着我们拥有更多日志源,这个 100GB/天会迅速增加。

看了一些关于ELK制作的文章,包括fantasicLogz.io ELK Deployment。虽然我对我需要做什么有一个大致的了解,但我不确定一些核心概念,我需要多少台机器来处理如此大量的数据,以及我是否需要在我的架构中包含像 Redis 这样的代理。

像 Redis 这样的代理有什么意义?在我的测试实例中,我有多个日志源通过 TCP、系统日志和 logstash 转发器将日志直接发送到我的 ELK 服务器上的 Logstash(该服务器还安装了配置了 SSL 的 Elasticsearch、Nginx 和 Kibana)。

为了保持高可用性、最先进的生产集群,每天至少 100GB 的数据(将来可能扩展到 150GB 或更多)我需要什么机器+规格?我打算使用自己的服务器。根据我的研究,起点应该像这样(假设我包括 Redis):

编辑:计划将日志保留 60 天。

至于 Redis,它充当缓冲区以防 logstash and/or elasticsearch 出现故障或变慢。如果您使用完整的 logstash 或 logstash-forwarder 作为托运人,它将检测 logstash 何时不可用并停止发送日志(记住它停止的地方,至少暂时)。

因此,在纯 logstash/logstash-forwarder 环境中,我认为没有理由使用像 Redis 这样的代理。

对于不关心 logstash 的状态并且不在他们身边缓冲的来源来说,当它变得重要时。 syslog、snmptrap 和其他都属于这一类。由于您的来源包括系统日志,我会在您的设置中调出代理。

Redis 是一个 RAM 密集型应用程序,您拥有的内存量将决定您可以承受多长时间的 logstash 中断。在 32GB 服务器(与 logstash 共享)上,你会给 yo redis 多少内存?您的平均文档大小有多大?需要多少文档才能填满内存?生成那么多文档需要多长时间?根据我的经验,当内存填满时,redis 会严重失败,但那可能就是我。

Logstash 是一个 CPU 密集型进程,因为所有过滤器都会被执行。

关于 elasticsearch 集群的大小,@magnus 已经向您指出了一些可能有帮助的信息。从 64GB 机器开始很棒,然后根据需要水平扩展。

您应该有两个客户端(非数据)节点,用作插入的访问点(有效地将请求分派到正确的数据节点)和搜索(处理返回数据的 'reduce' 阶段来自数据节点)。故障转移配置中的其中两个将是一个好的开始。

两台 kibana 机器将为您提供冗余。将它们放在故障转移配置中也很好。我相信 nginx 更多地与 kibana3 一起使用。我不知道人们是否将它与 kibana4 一起使用或者已经转移到 'shield'.

希望对您有所帮助。