大家好,我是蓝胖子,之前讲了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. 最通俗易懂的flex讲解

    30分钟彻底弄懂flex布局 欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由elson发表于云+社区专栏 目前在不考虑IE以及低端安卓机(4.3-)的兼容下,已经可以放心使用fle ...

  2. linux 的 vi 命令详解

    vi编辑器是所有Unix及Linux系统下标准的编辑器,它的强大不逊色于任何最新的文本编辑器,这里只是简单地介绍一下它的用法和一小部分指令.由于对Unix及Linux系统的任何版本,vi编辑器是完全相 ...

  3. Multiserver游戏服务器Demo[C++&Lua]

    代码参考 代码文件参考下述详解的类图,工程参考第零章工程说明 关键特性 对Socket库进行封装,抹平Socket的Window&Linux的平台差异. C++嵌入lua脚本,增加开发者编码效 ...

  4. [数据分析与可视化] Python绘制数据地图3-GeoPandas使用要点

    本文主要介绍GeoPandas的使用要点.GeoPandas是一个Python开源项目,旨在提供丰富而简单的地理空间数据处理接口.GeoPandas扩展了Pandas的数据类型,并使用matplotl ...

  5. 深入Python网络编程:从基础到实践

    Python,作为一种被广泛使用的高级编程语言,拥有许多优势,其中之一就是它的网络编程能力.Python的强大网络库如socket, requests, urllib, asyncio,等等,让它在网 ...

  6. FTL没有映射管理,跟上班没有钱有什么区别

    大家好,我是五月. 前言 FTL(Flash Translation Layer),即闪存转换层,是各种存储设备的核心算法,作用是将Host传下来的逻辑地址转换成物理地址,也就是映射. 可以说,地址映 ...

  7. PowerDesigner反向导入表+PowerDesigner的ER图设计+PowerDesigner连接外键的线(版本16.5)

    使用PowerDesigner导入表+PowerDesigner画ER图+PowerDesigner设置外键 ps: ①ER图:就是PD中的 Physical Diagram 一.导入表,并设置备注为 ...

  8. flutter小白是如何在一周内用chatGPT开发一款App的

    创作初衷 这篇文章创作的初衷,只是为了写一个有关日历类的软件供自己使用,考虑到自己从来还没有使用flutter正式创作一个app,因此磨刀霍霍想试一试. 至于为什么要做一款日历软件,因为发现市面上的关 ...

  9. Vue + Element ui 实现动态表单,包括新增行/删除行/动态表单验证/提交功能

    总结/朱季谦 最近通过Vue + Element ui实现了动态表单功能,该功能还包括了动态表单新增行.删除行.动态表单验证.动态表单提交功能,趁热打铁,将开发心得记录下来,方便以后再遇到类似功能时, ...

  10. 【题解】ABC293E Sol

    题目大意 给定整数 \(A,X,M\),求 \(\sum\limits^{X-1}_{i=0} A^i\) 对 \(M\) 取模的值. 数据范围:\(1 \le A,M \le 10^9\),\(1 ...