新的 Elasticsearch 报告:加热器、线程池和断路器

一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论

  • 新项目:《从零手撸:仿小红书(微服务架构)》 正在持续爆肝中,基于 Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...点击查看项目介绍 ;
  • 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/ ;

截止目前, 星球 内专栏累计输出 54w+ 字,讲解图 2476+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 1900+ 小伙伴加入学习 ,欢迎点击围观

您是否阅读过 要关注的 10 大 Elasticsearch 指标

我们的 免费电子书 – Elasticsearch Monitoring Essentials 怎么样?

如果你有,我们印象深刻。如果没有,这是很棒的睡前读物。 ;)

除了编写睡前阅读材料外,上个月我们还编写了一些代码,并向 SPM 添加了一些新的有用的 Elasticsearch 指标 。具体来说,我们添加了:

  • 指数回暖指标
  • 线程池指标
  • 断路器指标

那么为什么这些很重要呢?继续阅读!

指数回暖

取暖器的作用正如其名称所暗示的那样。他们热身。但是什么?指数。为什么?因为预热索引意味着针对它的搜索会更快。因此,可以在公开针对索引的搜索之前预热索引。如果你从 Solr 来到 Elasticsearch,这相当于 Solr 中的搜索器预热查询。

线程池

Elasticsearch 节点使用多个专用线程池来处理不同类型的请求。例如,索引请求由独立于处理搜索请求的线程池的线程池处理。这有助于更好的内存管理、请求优先级排序、隔离等。有十几个线程池,每个线程池都暴露了近十几个指标。

每个池还有一个队列,这使得保留一些请求成为可能,而不是在节点非常繁忙时简单地丢弃它们。但是,如果您的 Elasticsearch 集群处理大量并发或缓慢的请求,并且这些线程池队列已满,它有时可能不得不开始拒绝请求。当这种情况开始发生时,您会想尽快了解它。因此,您应该密切关注线程池指标,并且可能希望在显示拒绝数量或队列大小的指标上设置警报和 SPM 的 异常检测警报 ,这样您就可以调整队列大小设置或其他参数以避免请求被拒绝。

或者,或者另外,您可能希望将日志提供给 Logsene。 Elasticsearch 可以记录请求拒绝(参见下面的示例),因此如果您 将 Elasticsearch 日志发送 Logsene ,您将同时获得 Elasticsearch 指标及其日志以进行故障排除。此外,在 Logsene 中,您可以创建警报查询来提醒您日志中的异常情况,并且此类警报查询会在 Elasticsearch 开始记录错误时提醒您,如下所示:


 o.es.c.u.c.EsRejectedExecutionException: rejected execution (queue capacity 1000) on org.elasticsearch.search.action.SearchServiceTransportAction$23@5a805c60
at org.elasticsearch.common.util.concurrent.EsAbortPolicy.rejectedExecution(EsAbortPolicy.java:62)
at java.util.concurrent.ThreadPoolExecutor.reject(ThreadPoolExecutor.java:821)
at java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:1372)
at org.elasticsearch.search.action.SearchServiceTransportAction.execute(SearchServiceTransportAction.java:509)
at org.elasticsearch.search.action.SearchServiceTransportAction.sendExecuteScan(SearchServiceTransportAction.java:441)
at org.elasticsearch.action.search.type.TransportSearchScanAction$AsyncAction.sendExecuteFirstPhase(TransportSearchScanAction.java:68)
at org.elasticsearch.action.search.type.TransportSearchTypeAction$BaseAsyncAction.performFirstPhase(TransportSearchTypeAction.java:171)
at org.elasticsearch.action.search.type.TransportSearchTypeAction$BaseAsyncAction.start(TransportSearchTypeAction.java:153)
at org.elasticsearch.action.search.type.TransportSearchScanAction.doExecute(TransportSearchScanAction.java:52)
at org.elasticsearch.action.search.type.TransportSearchScanAction.doExecute(TransportSearchScanAction.java:42)
at org.elasticsearch.action.support.TransportAction.execute(TransportAction.java:63)
at org.elasticsearch.action.search.TransportSearchAction.doExecute(TransportSearchAction.java:107)
at org.elasticsearch.action.search.TransportSearchAction.doExecute(TransportSearchAction.java:43)
at org.elasticsearch.action.support.TransportAction.execute(TransportAction.java:63)
at org.elasticsearch.action.search.TransportSearchAction$TransportHandler.messageReceived(TransportSearchAction.java:124)
at org.elasticsearch.action.search.TransportSearchAction$TransportHandler.messageReceived(TransportSearchAction.java:113)

断路器

断路器是 Elasticsearch 试图控制内存使用并防止可怕的 OutOfMemoryError。目前有两个断路器——一个用于现场数据,另一个用于请求。简而言之,您可以为它们中的每一个设置限制并防止过多的内存使用,以避免您的集群因 OOME 而崩溃。

您的 Elasticsearch 集群想要这样的东西吗?

欢迎 在这里注册 并享受 Elasticsearch 的所有 SPM 优势。 没有承诺,也不需要信用卡。 而且,如果您是一家 年轻的初创公司 小型或非营利组织 教育机构 ,请向我们索取折扣(请参阅 特价 )!

反馈与问题

我们很乐意回答问题或收到反馈——请 给我们留言 或联系我们 @sematext