ES Monitoring 整理笔记
Monitoring是elastic stack的监控模块,监控信息存在es索引中,并且可以通过kibana进行可视化的展示。(收集监控数据的方式从6.5版本起由Collectors-Exporters模式逐步迁移到使用Metricbeat进行收集)
一、原理及源码结构
Monitor模块按组件分为四类,通过MonitoredSystem枚举区分,每条监控记录都是一条es文档,文档基类为MonitoringDoc,规定了监控记录的统一元数据信息部分(es的监控模块又分为集群,节点,索引,分片等模块,分别继承了MonitoringDoc类,每个单元都有自己独立的数据结构),主要监控模块:
- 集群(cluster)
- 节点(node)
- 索引(indices)
- 分片(shards)
源码单元:
- cleaner包:CleanerService 实现了监控数据的生命周期管理,默认监控数据按天分索引保留七天,每天凌晨1点会进行全部索引的排查,统一删除过期索引。
- collector包:Collector 类为es监控各个模块的收集器基类,每个模块都以一个独立Collector继承Collector类。主要实现方式是调用es系统提供的监控API获取response构造成对应的MonitoringDoc子类文档。
- exporter:exporter 为数据的导出包,分为两类:导出到本地集群或者导出到专门的监控集群(http方式)。实现方式为es的bulk请求。
- rest.action:MonitoringService 和 Monitoring类为主要服务实现调度类。主要进行参数设置,收集器导出器配置,并采用单线程调度方式使每个收集器在收集周期(默认10s)内运行一次。
源码结构图:
monitor索引:
es的监控数据是以统一的索引模板构造的按天分区索引存储的(默认索引只保留最近七天的数据),如下如所示:
.monitoring-es模板mapping包含一些元数据信息如集群id、时间戳和hosts信息等,当前文档类型由type字段标记。每类的数据都有自己独立的一些mapping,如索引信息汇总类数据indices_stats具有主分片和总的数据量、存储占用以及加载查询数据量统计信息。如下图所示:
1、Elasticsearch Monitoring Tools
- Elastic Monitoring(以前称为Marvel)和 ElasticHQ 等工具:是方便实时查看性能指标和处理集群任务的合适选项,Marvel基于Kibana的UI中提供了Elasticsearch指标的详细可视化
- ElasticCurator 是另一种直观的产品,可用于管理Elasticsearch索引和快照。
2、Elasticsearch Monitoring Plugins
3、Important Elasticsearch Metrics
- Elasticsearch APIs :在任何时候都能有效地捕获性能指标,而集群运行状况和搜索/节点/索引性能等数据点都是其运行状态的关键指标。通过密切关注这些指标,您将自动更好地了解Elasticsearch。
4、Performance Testing
- Rally :Elasticsearch的基准测试工具(Rally)来衡量系统更改的影响,最终防止性能低下。
1、Elastic Monitoring(以前称为Marvel) -- U
处理不断增长的集群可能是一项挑战,并占用大量资源。Marvel是一个与主动监控直接相关的工具,它允许您通过集群、索引和节点度量轻松地实时查看性能。Marvel可以让用户关注一段时间内的内存使用情况(而不仅仅是在一个时间点),因为它可以可视化集群行为,从而更容易发现影响环境的趋势。通过Marvel以交互方式探索数据和简化API的能力使工作流程更加高效,而且它是一个免费工具,这一事实使它变得更好!Marvel基于Kibana的UI中提供了Elasticsearch指标的详细可视化
2、ElasticHQ -- 待研究
ElasticHQ通常用作Elasticsearch集群的托管按需监控工具。ElasticHQ可以选择作为插件安装,也可以在本地下载/运行,它可以监控各个集群节点,并深入了解运行时指标和配置。全集群管理、搜索和查询以及无需安装软件是ElasticHQ的主要优势,它的灵活性为您的监控工作增添了更多动力。可以同时监视和管理多个群集
3、Cerebro(kopf的升级版本) --P
Cerebro是一个集群管理工具,比Kibana轻量很多,很适用与生产和测试等环境的es集群管理。它是kopf的升级版本,更改了个名字,包含kopf的功能(监控工具,并包含head插件的部分功能,可图形化的进行新建索引等操作。现在kopf已经不再更新,只对cerebro进行维护。
特性及界面Portal,参见:开源可视化工具cerebro功能强化
4、Curator
Curator是一个用来管理Elasticsearch索引的工具,使用它可以管理需要删除或保留的索引数据,被Elastic收编的历史
- curator最早被称为clearESindices.py。 它的唯一功能是删除索引。
- 而后重命名:logstash_index_cleaner.py,它在logstash存储库下作用:过期日志清理。
- 此后不久,原作者加入Elastic,它成为了Elasticsearch Curator
Curator功能包含:
- 为别名(Alias)添加或移除索引
- 创建索引
- 删除索引
- 关闭索引
- 删除快照
- 打开已经关闭的索引
- 更改分片路由配置
- 强制合并索引
- 重建索引(包括从远程的集群)
- 更改索引每个分片的副本数量
- 为索引创建快照
- 从快照还原
- rollover indices(当某个别名指向的实际索引过大的时候,自动将别名指向下一个实际索引)
rollover indices:
Rollover 滚动过渡。可以通过配置索引的时间段、文档数量、索引大小满足条件则自动过渡到新索引。当rollover 触发时,将通过目标索引的命名规则生成新的索引。
作用:比如有些索引数据只需要保存前几个月的数据,之前的可以删除或者压缩做为冷索引,不再更新索引,很少查询。信息仍然需要可搜索。ES定义索引有4个生命周期:
- Hot(一般常用的生命周期,活跃更新与搜索)
- Warm(只读模式,可以搜索)
- Cold(也是可以搜索但是比Warm搜索速度要慢,即将删除)
- Delete(不在需要,删除索引)
其它:
- 下载: https://github.com/elastic/curator
- 文档:https://www.elastic.co/guide/en/elasticsearch/client/curator/current/actions.html
6、sematext SPM
四、Elasticsearch Monitoring: SPM vs. Marvel
重要特性:

对比表格:
| Feature | SPM by Sematext | Marvel by Elasticsearch |
| Supported Applications | Elasticsearch, Hadoop, Spark, Kafka, Storm, Cassandra, HBase, Redis, Memcached, NGINX(+), Apache, MySQL, Solr, AWS CloudWatch, JVM, … | Elasticsearch |
| Agent deployment mode | in- and out-of-process (out-of-process allows for seamless updates without requiring Elasticsearch restarts) |
in-process (as Elasticsearch plug-in; updates require Elasticsearch restarts) |
| Predefined dashboard graphs organized in groups | YES | YES |
| Saving Individual Dashboards | Each user can store multiple dashboards, mixing charts from all applications, including both metrics and logs. | Current view can be saved, reset to defaults possible. These changes are global. |
| API for Custom Metrics and Business KPIs | YES | NO |
| Extra Elasticsearch Metrics |
|
YES
|
| OS and JVM Metrics | YES (+)
|
YES |
| Correlation of Metrics with Logs, Events, Alerts, and Anomalies | YES
|
NO
|
| Deployment model | SaaS or On Premises | On Premises |
| Security/User Roles & Permissions |
YES | NO |
| Easy & Secure Sharing of Reports with internal and external organizations | YES
|
NO |
| Machine Learning-based Anomaly Detection | YES | NO |
| Threshold based Alerts | YES | NO |
| Heartbeat Alerts | YES | NO |
| Forwarding Alerts to 3rd parties | YES
|
NO |
| Metrics Aggregation | YES
|
YES
|
五、Elastic Monitoring
kibana监控模块通过调用es索引存储的监控数据,制作了许多开箱即用报表供用户使用。主要分为集群层面、节点层面和索引层面,如下图:
指标说明:
1、Search Rate(/s) : 检索速率
查询速率:对于单个索引,它是每秒的查询次数(分片级别,不是请求级别),也就意味着一次查询请求命中的分片数越多,值越大。对于多个索引,它是每个索引的搜索速率的总和。
例:一个2分片1副本的索引,进行一个查询操作, 索引中的查询数量指标index_stats.total.search.query_total 增加2(与副本数量无关。只与分片数量有关),Kibana监控界面10分钟间隔时间段内有20个统计点,每个统计点时间间隔为600s/20=30s,计算速度为:Total Shards:2/30=0.067/s
2、Indexing Rate(/s):写入速率
- 加载速率:对于单个索引,它是每秒索引文档的数量;对于多个索引,它是每个索引的索引速率之和。
- 例:一个3分片1副本的索引,加载三条数据入库, index_stats.primaries.indexing.index_total 会增加3条,index_stats.total.indexing.index_total 会增加6条,Kibana监控界面10分钟间隔时间段内有20个统计点,每个统计点时间间隔为600s/20=30s,计算速度为:Primary Shards:3/30=0.1/s Total Shards:6/30=0.2/s
3、Search Latency(ms):检索延时
- 查询延时:查询的平均延时,为执行查询消耗的时间除以查询数量,考虑主副分片。
- 例:index_stats.total.search.query_time_in_millis增长2, index_stats.total.search.query_total 增长1,则计算结果为2/1=2,且由于query_time_in_millis和query_total可能在某段时间不变,所以图像不连续
4、Indexing Latency(ms):写入延时
加载延时:为执行加载消耗的时间除以文档数量,只考虑主分片。
- 例:index_stats.primaries.indexing.index_time_in_millis增长6,index_stats.primaries.indexing.index_total增长5,则计算结果为6/5=1.2。且由于index_time_in_millis和index_total可能在某段时间不变,所以图像不连续
Flag:
- ElasticHQ:关注多个群集的同时监控与管理
- rollover indices:自动索引拆分与冷热迁移
- sematext:关注全技术栈监控
- 关注对比 Curator VS Head
参考资料
- https://www.ngui.cc/el/1834592.html?action=onClick
- https://www.datadoghq.com/blog/collect-elasticsearch-metrics/
- https://www.cnblogs.com/WCFGROUP/p/8144629.html
- https://www.opsview.com/resources/elasticsearch/blog/elasticsearch-monitoring-tools
- https://thenewstack.io/properly-monitor-elasticsearch/
- https://sematext.com/blog/elasticsearch-monitoring-marvel-alternative/
- https://medium.com/@dionnis/elasticsearch-monitoring-and-maintenance-tools-research-18c5fb45a747
ES Monitoring 整理笔记的更多相关文章
- canvas学习之API整理笔记(二)
前面我整理过一篇文章canvas学习之API整理笔记(一),从这篇文章我们已经可以基本了解到常用绘图的API.简单的变换和动画.而本篇文章的主要内容包括高级动画.像素操作.性能优化等知识点,讲解每个知 ...
- xmpp整理笔记:发送图片信息和声音信息
图片和音频文件发送的基本思路就是: 先将图片转化成二进制文件,然后将二进制文件进行base64编码,编码后成字符串.在即将发送的message内添加一个子节点,节点的stringValue(节点的值) ...
- xmpp整理笔记:聊天信息的发送与显示
任何一个信息的发送都需要关注两个部分,信息的发出,和信息在界面中的显示 往期回顾: xmpp整理笔记:环境的快速配置(附安装包) http://www.cnblogs.com/dsxniubilit ...
- xmpp整理笔记:用户网络连接及好友的管理
xmpp中的用户连接模块包括用户的上线与下线信息展现,用户登录,用户的注册: 好友模块包括好友的添加,好友的删除,好友列表的展示. 在xmpp中 负责数据传输的类是xmppStream,开发的过程中, ...
- xmpp整理笔记:xmppFramework框架的导入和介绍
一个将要开发xmpp的项目,建议在项目刚创建就导入框架,这样可以避免一些自己操作失误造成不必要的损失. xmpp中最常用的框架就是 xmppFrameWork 往期回顾: xmpp整理笔记:环境的快速 ...
- jQuery整理笔记文件夹
jQuery整理笔记文件夹 jQuery整理笔记一----jQuery開始 jQuery整理笔记二----jQuery选择器整理 jQuery整理笔记三----jQuery过滤函数 jQuery整理笔 ...
- sk_buff整理笔记(两、操作函数)
承接上一:sk_buff 整理笔记(一.数据结构)这一篇要讲的是内核为sk_buff结构提供的一些操作函数. 第一.首先要讲的是sk_buff中的四大指针: 四大指针各自是:head.data.tai ...
- element-ui 组件源码分析整理笔记目录
element-ui button组件 radio组件源码分析整理笔记(一) element-ui switch组件源码分析整理笔记(二) element-ui inputNumber.Card .B ...
- element-ui Carousel 走马灯源码分析整理笔记(十一)
Carousel 走马灯源码分析整理笔记,这篇写的不详细,后面有空补充 main.vue <template> <!--走马灯的最外层包裹div--> <div clas ...
- jQuery整理笔记七----几个经典表单应用
1.文本框获得(失去)焦点 当文本框获得输入焦点时,将该文本框高亮显示,算不得一个应用,仅仅是一个小技巧,能够提高用户体验. <!DOCTYPE html PUBLIC "-//W3C ...
随机推荐
- Lambda表达式编写递归函数
class Program { //Fix求出的是函数f的不动点,它就是我们所需要的递归函数: static Func<T, TResult> Fix<T, TResult>( ...
- 启用Windows防火墙后,FTP传输非常慢
我们有一个计划任务,该任务使用Windows命令行FTP程序在两个Windows服务器之间传输大文件(〜130 MB).速度很慢(大约需要30分钟),有时会在传输完成之前终止.服务器是2003年(发送 ...
- .NET分布式Orleans - 9 - 贪吃蛇项目演示
首先看完成效果 一个玩家的效果 多个玩家的效果 源码地址 https://gitee.com/chesterdotchen/snake-with-orleans 项目介绍 Snake.Common项目 ...
- Vue入门笔记一
<Vue.js项目实战>Guillaume Chau Vue核心功能概述 1.一个响应式的数据系统,能通过轻量级的虚拟DOM引擎和最少的优化工作来自动更新用户界面 2.灵活的视图声明,包括 ...
- #排列组合,容斥#洛谷 5684 [CSPJX2019]非回文串
题目 分析 那显然就是\(n!\)减去回文串的方案数 首先如果有超过一个出现奇数次字母那肯定不存在回文串 如果有且仅有一个首先要在次数中选择一个然后其它当偶数处理 偶数那就是首先字母位置选好但顺序可以 ...
- Python面试必备一之迭代器、生成器、浅拷贝、深拷贝
本文首发于公众号:Hunter后端 原文链接:Python面试必备一之迭代器.生成器.浅拷贝.深拷贝 这一篇笔记主要介绍 Python 面试过程中常被问到的一些问题,比如: Python 中的迭代器和 ...
- Jetty的bytebufferpool模块
bytebufferpool模块用于配置Jetty的ByteBuffer对象的对象池. 通过对象池的方式来管理ByteBuffer对象的使用和生命周期,期望降低Jetty进程内存的使用,同时降低JVM ...
- AJAX 前端开发利器:实现网页动态更新的核心技术
AJAX AJAX是开发者的梦想,因为你可以: 在不重新加载页面的情况下更新网页 在页面加载后请求来自服务器的数据 在页面加载后接收来自服务器的数据 在后台向服务器发送数据 HTML页面 <!D ...
- 基于EtherNet/IP实现欧姆龙NX系列PLC通信
1.引言 工业以太网协议 (Ethernet/IP) 是由ODVA所开发并得到了罗克韦尔自动化的强大支持.它使用已用于ControlNet和DeviceNet的控制和信息协议 (CIP) 为应用层协议 ...
- HMS Core Insights第九期直播预告——手语服务,助力沟通无障碍
[导读] 你知道吗?全球有超5%的人群正在遭受听力损失的折磨.这些听障群体由于沟通不便,在日常生活中面对着很多的困难与挑战,建立沟通无障碍环境的需求十分迫切.随着科技的发展,越来越多的人们享受到技术进 ...



