elasticsearch ElasticSearch/Logstash/Kibana如何处理日志流量峰值,elasticsearch,logstash,kibana,elasticsearch,Logstash,Kibana" /> elasticsearch ElasticSearch/Logstash/Kibana如何处理日志流量峰值,elasticsearch,logstash,kibana,elasticsearch,Logstash,Kibana" />

elasticsearch ElasticSearch/Logstash/Kibana如何处理日志流量峰值

elasticsearch ElasticSearch/Logstash/Kibana如何处理日志流量峰值,elasticsearch,logstash,kibana,elasticsearch,Logstash,Kibana,在标准的麋鹿设置中,处理写入ElasticSearch集群的日志消息激增的最佳方法是什么 我们使用AWS中的标准ELK(ElasticSearch/Logstash/Kibana)设置来满足我们网站的日志记录需求 我们在负载平衡器后面有一组自动缩放的日志存储实例,该日志存储到另一个负载平衡器后面的一组自动缩放的ElasticSearch实例。然后我们有一个实例服务于Kibana 对于日常业务,我们运行2个Logstash实例和2个ElasticSearch实例 我们的网站在活动期间经历了短时间的

在标准的麋鹿设置中,处理写入ElasticSearch集群的日志消息激增的最佳方法是什么

我们使用AWS中的标准ELK(ElasticSearch/Logstash/Kibana)设置来满足我们网站的日志记录需求

我们在负载平衡器后面有一组自动缩放的日志存储实例,该日志存储到另一个负载平衡器后面的一组自动缩放的ElasticSearch实例。然后我们有一个实例服务于Kibana

对于日常业务,我们运行2个Logstash实例和2个ElasticSearch实例

我们的网站在活动期间经历了短时间的高流量-在这些活动期间,我们的流量增加了约2000%。我们很早就知道这些正在发生的事件

目前,我们只是在事件期间临时增加ElasticSearch实例的数量。然而,我们也遇到了一些问题,随后我们的规模缩小得太快,这意味着我们丢失了碎片并破坏了索引

我一直在考虑将
auto_expand\u replications
设置设置为
“1-all”
,以确保每个节点都有一个所有数据的副本,这样我们就不必担心放大或缩小的速度有多快。将所有数据传输到新节点的开销有多大?我们目前只保存了大约2周的日志数据,总共大约50gb


我还看到有人提到,在保持数据节点数量不变的情况下,使用一组独立的非数据节点来处理搜索流量的增加。在写得太多的情况下,如我前面提到的事件,这会有帮助吗?

我的建议

您的最佳选择是使用Redis作为Logstash和Elasticsearch之间的经纪人:

这是在一些旧的网站上描述的,但仍然非常相关

是的,您将看到在生成日志和它们最终在Elasticsearch中登录之间的最小延迟,但应该是最小的,因为Redis和Logstash之间的延迟相对较小。根据我的经验,Logstash倾向于快速处理Redis上的积压工作

这种设置还为您提供了一个更健壮的设置,即使日志存储停止,您仍然可以通过Redis接受事件

仅缩放Elasticsearch

至于您关于额外的非数据节点是否有助于写重周期的问题:我不相信,不。当您看到执行大量搜索(读取)时,非数据节点非常有用,因为它们将搜索委托给所有数据节点,然后在将结果发送回客户端之前聚合结果。它们消除了从数据节点聚合结果的负担

写入操作将始终涉及数据节点

我不认为添加和删除节点是解决这个问题的好方法

你可以试着在你的高峰时期调整一下。假设您通常有以下几项:

threadpool:
  index:
    type: fixed
    size: 30
    queue_size: 1000
  search
    type: fixed
    size: 30
    queue_size: 1000
threadpool:
  index:
    type: fixed
    size: 50
    queue_size: 2000
  search
    type: fixed
    size: 10
    queue_size: 500
因此,您可以使用数量相等的搜索和索引线程。在高峰时间之前,您可以将设置()更改为以下内容:

threadpool:
  index:
    type: fixed
    size: 30
    queue_size: 1000
  search
    type: fixed
    size: 30
    queue_size: 1000
threadpool:
  index:
    type: fixed
    size: 50
    queue_size: 2000
  search
    type: fixed
    size: 10
    queue_size: 500

现在,您有更多的线程执行索引,从而可以在backburner上进行搜索时获得更快的索引吞吐量。为了更好地衡量,我还增加了队列大小,以允许建立更多的积压工作。不过,这可能无法按预期工作,建议进行实验和调整。

使用ES临时自动缩放的具体原因是什么?集群中所需的节点数主要取决于要存储的数据量和查询数据的方式,而不是入站消息速率。我(可能是天真的)感觉是,通过增加ES集群中的节点数,可以增加处理的入站消息数。这可能是真的,但你发现这并不实用。我认为有更好的方法来处理尖峰,比如有一个中间缓冲区(例如消息代理),Logstash可以从中提取消息。这显然要求您对日志消息的可用性没有苛刻的要求。我确实考虑过一些用于LogSTASH的缓冲区来从中取出消息,但是能够实时查看这些事件中的日志对于我们来说非常有价值。因此,我希望通过扩展ElasticSearch来避免这种情况……您没有描述任何可用的资源(特别是RAM),也没有描述您已经完成的任何调试或调整,等等。据我们所知,您可以从1eps增加到20eps。