大家好,我是蓝胖子,之前讲了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. 1406, "Data too long for column 'od_seq' at row 1"

    问题描述:1406, "Data too long for column 'od_seq' at row 1" 问题分析:录入数据长度超出字段的最大限制 解决方法:增加max_le ...

  2. calendar.monthrange

    import calendar calendar.monthrange(2019,5) 输出结果:(2, 31) 解析: 这里使用了函数 calendar.monthrange(year,month) ...

  3. 【Java】GridBagLayout布局笔记

    参考博客: 样例解释:https://blog.csdn.net/wstz_5461/article/details/78067176 参数解释:https://blog.csdn.net/shiSh ...

  4. HCIP- ICT实战进阶ex1-MPLS

    HCIP- ICT实战进阶ex1-MPLS 0 前言 由于BGP设备之间是通过TCP协议实现的跨设备互联, 所以在两台BGP设备之间的其他设备是没有配置BGP协议的, 因此中间的其他设备很可能无法学习 ...

  5. 密码暴力破解工具——九头蛇(hydra)使用详解及实战

    转载出处:https://zhuanlan.zhihu.com/p/540998739 二.使用方法 语法:Hydra 参数 IP 服务 参数: -l login 小写,指定用户名进行破解 -L fi ...

  6. 500代码行代码手写docker-设置网络命名空间

    (4)500代码行代码手写docker-设置网络命名空间 本系列教程主要是为了弄清楚容器化的原理,纸上得来终觉浅,绝知此事要躬行,理论始终不及动手实践来的深刻,所以这个系列会用go语言实现一个类似do ...

  7. Linux 线程传递参数

    1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <pthread.h> 4 #include <u ...

  8. PicoRV32-on-PYNQ-Z2: An FPGA-based SoC System——RISC-V On PYNQ项目复现

    本文参考: 1️⃣ 原始工程 2️⃣ 原始工程复现教程 3️⃣ RISCV工具链安装教程 本文工程: https://bhpan.buaa.edu.cn:443/link/4B08916BF2CDB4 ...

  9. 前端vue实现页面加水印文字 单个页面所有页面加水印 水印颜色

    前端vue实现页面加水印文字, 可以实现系统所有页面加水印,也可以单个页面加水印, 可更改水印颜色, 下载完整代码请访问uni-app插件市场地址: https://ext.dcloud.net.cn ...

  10. Java 基础复习——StringBuffer 和 StringBuilder

    StringBuffer 和 StringBuilder StringBuffer 类 简介 java.lang.StringBuffer 代表可变的字符序列,可以对字符串内容进行增删 很多方法和 S ...