大家好,我是蓝胖子,之前讲了mysql,redis中间件的监控,今天我们再来看看另一个基础组件elasticsearch,如何对它进行监控,当你思考如何对一个组件进行监控时,四大黄金指标会告诉你答案,我们同样会从四大黄金指标给出的维度进行分析。

针对es做的性能分析,用四大黄金指标原则,我们可以做出如下的分析

这些指标能够方便我们快速搭建起一套监控面板来对es进行监控,下面我们来看看具体应该如何做。

流量,延迟

首先,我们来看下在流量这个维度上,我们是对es集群qps指标进行监控,也就是各个索引每秒访问的次数。这个其实可以在kibana上通过monitor模块进行监控,不过因为我们线上都是采用prometheus 进行组件监控,为了让监控报警系统架构比较统一,尽可能采用少的组件,还是决定沿用prometheus+grafana的形式进行监控。

对于延迟来讲,可以按索引维度监控索引的操作时间p99分位数,这两个维度的监控可以采用对elasticsearch client 客户端进行埋点的方式来监控,并且当前es已经支持sql格式的的查询语句,即使你的es版本比较旧,依然能找到很多现成的库将sql格式的查询语句转换为es的DSL格式查询语句。

所以,完全可以采用和【升职加薪秘籍】我在服务监控方面的实践(6)-业务维度的mysql监控 一节中类似的方式,对sql语句进行解析,按sql表(在es中是索引名)维度对qps,查询时长进行监控。建立完相关指标和埋点后,用prometheus进行收集,grafana面板进行显示即可,步骤可以说和mysql那一节里一模一样。

在延迟监控方面,一般也会启用es的慢日志记录,这样可以针对具体的慢查询做优化。以下是设置慢日志的语句。

PUT /_all/_settings
{
"index.search.slowlog.threshold.query.warn": "600ms",
"index.search.slowlog.threshold.query.info": "400ms",
"index.search.slowlog.threshold.query.debug": "300ms",
"index.search.slowlog.threshold.query.trace": "200ms",
"index.search.slowlog.threshold.fetch.warn": "500ms",
"index.search.slowlog.threshold.fetch.info": "400ms",
"index.search.slowlog.threshold.fetch.debug": "300ms",
"index.search.slowlog.threshold.fetch.trace": "200ms",
"index.search.slowlog.level": "trace"
}

错误数

接着,再来看下在错误数这个维度上的指标监控,针对es而言,错误主要是查询错误,比如很常见的429这类型的错误,我们同样可以在客户端库进行埋点,对执行查询语句时的错误数以及具体错误进行监控。

注意下,我们的流量,延迟,错误数都是采用客户端库埋点的方式进行统计的,这样的好处是让监控指标能够更好的和业务建立联系(毕竟是索引维度上的监控)。实际上,任何一个组件,你都可以采取类似的客户端埋点的方式对这3个指标维度进行监控。

饱和度

接着,再来看下如何监控es的饱和度,饱和度指集群各种资源的饱和状态,除了正常监控cpu,内存,磁盘空间,网络带宽外,特别的针对于es而言,还有各种断路器和线程池队列的监控。

在es中,有各种类型的断路器,它们主要是为了避免es内存溢出而设计的一套机制。在执行某种类型的操作时,会查看对应类型的断路器内存预留量,以及评估当前操作需要消耗的内存,如果超过了内存预留量,则终止本次操作,这个时候客户端会得到429错误。所以,断路器的内存预留量,也是饱和度的一种体现。

在来看看es中的线程池的监控,es中,有各种类型的线程池,它们分别对应各种不同的操作,比如search,write,refresh,同时线程池会分配一个队列, 如果某种类型的线程池队列满了,那么它将拒绝新的此类型的操作,客户端会得到429错误。所以线程池的大小已经队列长度也是es饱和度的一种体现。

对于断路器和es队列,cpu,内存等等的监控都可以用elasticsearch exporter,prometheus到时候收集exporter的指标,用grafana进行展示即可,而elasticsearch exporter的dashboard目前已经有很多开源的方案,选择一个就可以轻松导入。

使用prometheus 的监控,一般就是利用各种类型的exporter ,通过exporter收集对应的指标数据。elasticsearch现有的开源方案就有elasticsearch exporter。

性能api

在看了前面在四大黄金指标原则下的监控,我们能够去衡量一个es集群当前的服务质量,但这还是不够的,比如es的cpu突然飙高,这个时候如果要想去定位是哪些查询语句导致的,仅仅通过四大黄金指标原则就比较困难。

es为我们提供了api能够查看当前集群占用cpu高的线程堆栈,方便定位问题。

GET /_nodes/hot_threads

同时es也提供了task api对es中执行的任务进行监控,每个查询请求也被当成一个任务在执行。

GET /_tasks?detailed=true

"dQ9dt0POQMuYk4b1irs5bQ:15752986287" : {
"node" : "dQ9dt0POQMuYk4b1irs5bQ",
"id" : 15752986287,
"type" : "transport",
"action" : "indices:data/read/search",
"description" : """indices[zdisk_item], types[], search_type[QUERY_THEN_FETCH], source[{"from":0,"size":20,"query":{"bool":{"filter":[{"term":{"pid.term":{"value":21560540,"boost":1.0}}}],"must_not":[{"term":{"tpid.term":{"value":"-1","boost":1.0}}}],"adjust_pure_negative":true,"boost":1.0}},"sort":[{"type_sort":{"order":"desc"}},{"name_sort":{"order":"asc"}}]}]""",
"start_time_in_millis" : 1691446262166,
"running_time_in_nanos" : 25457435,
"cancellable" : true,
"headers" : { }
},

返回结果中能够包含执行的查询语句已经任务运行的时间,我们可以在cpu或者内存压力比较大时,通过task api发现是哪些查询耗时较长。

保留问题现场

你可以发现,通过hot_threads api 和task api能够比较容易发现问题所在,但问题发生时并不一定能在现场执行它们,如果问题发生时,能够自动执行它们并把结果保存下来就好了。这样能为之后的问题排查提供证据。

我们可以在grafana上,通过为cpu,内存监控面板设置报警策略,比如达到某个阈值就通过webhook策略调用自己写的一个程序,而这个程序的逻辑便是执行hot_threads api 和task api并将结果保留下来,这样就达到了保留问题现场的目的。

总结

通过这一节,我们利用四大黄金指标原则分析了如何对es集群进行了监控,你可以发现,即使你对组件没有很深入的了解,四大黄金指标原则依然能够很好的指导你如何建立监控维度。相信通过这一节,你会更加深入的理解四大黄金指标原则。

并且,我们对elasticsearch的监控依然没有脱离定位问题这一目的,我们通过索引维度的qps,延迟监控,保留问题现场来更好的定位问题,注意,监控不仅要发现问题,还要定位问题,这也是我对创建什么样的监控指标所遵循原则,只有定位到了问题才能快速的解决问题。

【升职加薪秘籍】我在服务监控方面的实践(8)-elasticsearch 性能监控与分析手段的更多相关文章

  1. 分布式监控系统Zabbix3.4-针对MongoDB性能监控操作笔记

    公司在IDC机房的一台服务器上部署了MongoDB,由于所存储的业务数据比较重要,所以对MongoDB的监控显得尤为重要!Zabbix监控MongoDB性能的原理:通过echo "db.se ...

  2. 【性能测试实战:jmeter+k8s+微服务+skywalking+efk】系列之:性能监控、分析、调优等

    说明: 本文是基于虚拟机演示的,资源有限 skywalking中拓扑图 kubectl get po -A -owide 测试执行:单场景 查询礼品 jmeter -n -t gift.jmx -l ...

  3. elasticsearch 性能监控基础

    一.Elasticsearch 是什么 Elasticsearch是一款用Java编写的开源分布式文档存储和搜索引擎,可以用于near real-time存储和数据检索. 1.Elasticsearc ...

  4. Elasticsearch 性能监控基础【转】

    https://blog.csdn.net/yangwenbo214/article/details/74000458

  5. 报名|「OneAPM x DaoCloud」技术公开课:Docker性能监控!

    如今,越来越多的公司开始 Docker 了,「三分之二的公司在尝试了 Docker 后最终使用了它」,也就是说 Docker 的转化率达到了 67%,同时转化时长也控制在 60 天内. 既然 Dock ...

  6. Linux系统CPU的性能监控及调优

    前言: 性能优化是一个老生常谈的话题,典型的性能问题如页面响应慢.接口超时,服务器负载高.并发数低,数据库频繁死锁等.尤其是在“糙快猛”的互联网开发模式大行其道的今天,随着系统访问量的日益增加和代码的 ...

  7. 工作不到一年,做出了100k系统,老板给我升职加薪

    看了下自己上一次发技术文还是在6月15日,算了算也是两个来月了.别怕,短暂的离开,是为了更好的相遇. 来到新公司以后啊,发现公司的搜索业务是真的太多了,大大小小有几百个搜索业务.来了之后得先梳理.熟悉 ...

  8. 不懂DevOps!他在升职加薪的那天下午,提出了离职

    不久前我们一个已毕业的学员向班主任老师分享了前几天他遇到的一件事: 一个许久未联系他的朋友突然打电话给他,寒暄了几句后突然说,想来北京找工作,问能不能帮忙给介绍一些工作. 在接下来的通话中,我们学员了 ...

  9. jmeter & 性能测试:从0到实战(实操易用、面试造火箭、升职加薪必备)

    [性能基础] 性能测试概念.术语:https://www.cnblogs.com/uncleyong/p/10706519.html 性能测试流程(新):https://www.cnblogs.com ...

  10. 一文搞懂秒杀系统,欢迎参与开源,提交PR,提高竞争力。早日上岸,升职加薪。

    前言 秒杀和高并发是面试的高频考点,也是我们做电商项目必知必会的场景.欢迎大家参与我们的开源项目,提交PR,提高竞争力.早日上岸,升职加薪. 知识点详解 秒杀系统架构图 秒杀流程图 秒杀系统设计 这篇 ...

随机推荐

  1. select_related一对一、多对一查询优化

    select_related一对一.多对一查询优化 Course.objects.all().select_related('teacher') 查询课程时顺带查出老师的信息

  2. Github Copilot Chat 初体验

    最近因为阳了的缘故一直躺在床上.今天终于从床上爬起来了.不是因为好透了,而是因为我收到了申请Copilot Chat preview 权限通过的邮件.实在忍不住,于是起床开电脑在咳嗽声中进行了一番体验 ...

  3. jmeter如何保存变量到结果jtl文件里

    将变量保存到结果jtl文件里,可以方便的在generate报告时,自行取用jtl中的变量进行展示,实现过程如下: 1.打开jmeter/bin目录下的jmeter.properties文件,将变量名加 ...

  4. js 获取系统yyyyMMdd时间

    var myDate = new Date(); var Time1 = myDate.toLocaleDateString()//yyyy/MM/dd 这个方法如果是1月份,会显示yyyy/M/dd ...

  5. celery 组件在django环境应用

    第一步安装 pip install celery==4.4 第二步 配置环境 # ############################# celery 配置连接redis ############ ...

  6. MAIXIII(爱芯派)的一种配网并安装nmtui的实现方法

    关于一种MAIXIII(爱芯派)的一种配网并安装nmtui的实现方法 特别感谢sipped的大佬鼠以及多位群友这几天提供的帮助与支持! 0.目录 一,MAIXIII简介 二,到手图展示 三,具体操作方 ...

  7. vulnhub_jangow

    来源 vulnhub:https://www.vulnhub.com/entry/jangow-101,754/ 描述 难度:简单 这在 VirtualBox 而不是 VMware 上效果更好 我这里 ...

  8. C++面试八股文:如何在堆上和栈上分配一块内存?

    某日二师兄参加XXX科技公司的C++工程师开发岗位6面: 面试官: 如何在堆上申请一块内存? 二师兄:常用的方法有malloc,new等. 面试官:两者有什么区别? 二师兄:malloc是向操作系统申 ...

  9. 「AntV」X6开发实践:踩过的坑与解决方案

    长期更新版文档请移步语雀(「AntV」X6开发实践:踩过的坑与解决方案 (yuque.com)) ️ | 如何自定义拖拽源? 相信你们在开发中更多的需求是需要自定义拖拽源,毕竟自定义的功能扩展性高一些 ...

  10. 曲线艺术编程 coding curves 第十一章 玫瑰花形( ROSES)

    第十一章 玫瑰花形 ROSES 原作:Keith Peters https://www.bit-101.com/blog/2022/11/coding-curves/ 译者:池中物王二狗(sheldo ...