为什么我的生产ELK堆栈+机器规格需要经纪人?

jef*_*rey 7 redis elasticsearch logstash kibana

我最近提出了一个测试ELK堆栈的Ubuntu盒来测试功能,并对它非常满意.我的生产用例将涉及每天摄取至少100GB的日志.我想尽可能地扩展,因为我们有更多的日志源,这100GB /天可以快速上升.

我读了一些关于ELK制作的文章,包括幻想的Logz.io ELK部署.虽然我对我需要做的事情有一个大概的了解,但我不确定一些核心概念,我需要多少台机器才能获得如此大量的数据,以及我是否需要像我的架构中包含Redis这样的经纪人.

像Redis这样的经纪人有什么意义?在我的测试实例中,我有多个日志源通过TCP,syslog和logstash转发器将日志直接发送到我的Logstash直接在我的ELK服务器上(其中安装了Elasticsearch,Nginx和Kibana,配置了SSL).

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

  • 每个服务器具有Redis + Logstash(索引器)实例的2/3服务器.对于规格,我在考虑32GB RAM,快速I/O磁盘500GB可能是SSD,8核(i7)
  • Elasticsearch的3台服务器(这是我最不确定的) - 我知道我需要至少3个主节点和2个数据节点,因此2个服务器将拥有1个主/ 1个数据 - 这些将是强大的64GB RAM ,20TB,8芯.其他剩余的主节点可以在低规格机器上,因为它不处理数据.
  • Nginx/Kibana的2台服务器 - 这些应该是低规格的机器,因为它们只是Web服务器和UI.这里需要负载均衡器吗?

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

Ala*_*ins 11

至于Redis,它可以作为缓冲区,以防logstash和/或elasticsearch停顿或缓慢.如果您使用完整的logstash或logstash-forwarder作为托运人,它将检测logstash何时不可用并停止发送日志(记住它停止的位置,至少暂时一段时间).

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

当它变得重要时,对于那些不关心logstash状态并且不在其旁边缓冲的源.syslog,snmptrap和其他类型都属于这一类.由于你的资源包括syslog,我会在你的设置中调出代理.

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

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

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

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

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

希望有所帮助.