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

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

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / Java 学习路线 / 一对一提问 / 学习打卡/ 赠书活动

目前,正在 星球 内带小伙伴们做第一个项目:全栈前后端分离博客项目,采用技术栈 Spring Boot + Mybatis Plus + Vue 3.x + Vite 4手把手,前端 + 后端全栈开发,从 0 到 1 讲解每个功能点开发步骤,1v1 答疑,陪伴式直到项目上线,目前已更新了 204 小节,累计 32w+ 字,讲解图:1416 张,还在持续爆肝中,后续还会上新更多项目,目标是将 Java 领域典型的项目都整上,如秒杀系统、在线商城、IM 即时通讯、权限管理等等,已有 870+ 小伙伴加入,欢迎点击围观

您是否阅读过 要关注的 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