ELK 堆栈和扩展

Posted

技术标签:

【中文标题】ELK 堆栈和扩展【英文标题】:ELK Stack and scaling 【发布时间】:2015-04-20 16:19:21 【问题描述】:

请耐心听我说。过去一周左右,我一直在熟悉 ELK Stack。

我有一个运行 ELK 堆栈的有效单盒解决方案,并且我掌握了如何转发多种类型的日志以及如何将它们放入不同的 ES 索引的基础知识。

这一切都很好,我想扩大运营。

我的问题更多是如何扩展解决方案以满足更多数据需求/要求。

当前的解决方案是处理较小的数据子集,并且工作正常,但我想聚合 很多 更多数据。例如,我目前正在从 4 个邮箱服务器推送消息跟踪日志,我也想做同样的事情,但要针对 40 个邮箱服务器,以及更繁忙的服务器。

我还想从客户端访问服务器推送 IIS 日志文件,有 18 台 CAS 服务器,高峰期每台服务器大约 30 分钟的 IIS 日志大小为 120MB,有近 100 万条记录。

如此庞大的数据量很可能会使运行 ELK 的单个盒子崩溃。

我还没有真正研究过它,但我读到 ES 允许某种形式的集群来添加更多实例,这同样适用于 Logstash 吗? Kibana 是否应该在多个服务器上运行?还是 Logstash 和 ES 的不同服务器?

【问题讨论】:

【参考方案1】:

如果您对记录进行大量处理 - groks、条件等,您将达到 logstash 的限制。观察机器的 cpu 利用率以获取提示。

对于 elasticsearch 本身,它与 RAM 和磁盘 IO 有关。在集群中拥有更多节点应该提供两者。

使用两个 elasticsearch 节点,您将获得冗余(两台机器上的副本)。添加第三个,你就可以开始实现 IO 的好处了(写两份到三台机器来传播 IO)。

最终的数据节点将在机器上拥有 64GB 的 RAM,其中 31GB 分配给 elasticsearch。

您可能希望添加非数据节点,这些节点处理要索引的数据的路由以及运行查询时的“减少”阶段。将其中两个放在负载均衡器后面。

【讨论】:

【参考方案2】:

正如 Alain 所说,添加更多 ES 节点将提高性能(并为您提供冗余)。

在 logstash 前端,我们有两个 logstash 服务器馈送到 ES - 目前我们只是指示不同的服务器登录到不同的 logstash 服务器,但我们可能会在前面添加一个 HA-Proxy 层来做这会自动进行,并再次提供冗余。

使用 Kibana,我不会太担心 - 据我所知,大部分处理都是在客户端浏览器中完成的,而这更多地取决于 ES 集群的性能。

【讨论】:

以上是关于ELK 堆栈和扩展的主要内容,如果未能解决你的问题,请参考以下文章

ELK 堆栈中的 Logstash 和 filebeat

在 ELK 堆栈中调试 Filebeat

使用 ELK 堆栈进行应用程序日志记录

关于使用Spring Boot Microservices设置ELK堆栈

在 Kubernetes 中运行 ELK 堆栈的 Filebeat 不会在日志中捕获 pod 名称

使用 ELK 堆栈的最佳 Docker 日志记录架构