Elasticsearch集群监控与报警原理解析
开源Elasticsearch如何实现监控和报警为了保证一个ES集群的稳定运行,我们要从各个维度去对整个集群进行监控。我对这些不同维度的指标做了一个简单的分类。
[*]资源类,主要指ES集群所跑的物理机和操作系统相关所分配的一些资源,包括CPU、内存、网络、磁盘和操作系统的system log等指标。
[*]容器级,这里面就包含Java运行时的JVM等相关指标。
[*]最核心的ES应用级别指标,大概分为两个维度: 节点级:因为ES是一个分布式的应用,所以在这个应用下可能会有一个维度是跟每一个节点相关的。我们知道,在每一个ES结点上会跑多个Lucene进程,进程相关的指标就属于这个级别。
索引级:一个索引会分布在不同的节点上,针对每一行索引的维度,可以观察到各种各样的行动指标,
[*]最后的就是在通过调用方的一些监控。今天我主要讲的是前面的一部分,不包含调用的部分。
ES集群监控原理
下面给大家介绍一下ES集群监控的一些原理。这个里面刚才我给大家介绍了那么多相关的指标的,看起来很复杂,有各种各样的维度,但实际上ES本身在这上面是做得比较健全,它把刚才提高的绝大部分的信息都已经集成到了RESTful API里面,给大家介绍几个跟ES监控相关的接口。
[*]Node Stats API,顾名思义就是看集群内的每一个节点的状态信息,在每个节点上会有不同索引的一些分片,这个节点所涉及到的分片每一个单独的信息可以通过这个API观察到的。
[*]Cluster Stats API,就是整个集群的比较选举性的信息,通过这个API包括插件节点输入,还有一些各个节点的统计信息的相加结果,都可以在这个API中可以看到。
[*]Index_name Stats API,就是刚才提到维度索引级别的。这个API的调用是通过一个index_name斜杠,是指定每一个索引都可以去调用这个接口,去观察这个索引的相关统计信息。部分指标和Node Stats API相匹配。
[*]Cluster Health API,这是大家非常了解的,ES绿、黄、红三个状态就是通过这个接口来拿到。这个接口包含整个集群的分片信息和监控状态,这个监控大家应该会用得非常广泛。
[*]Pending Tasks API,ES里面有很多的异步任务,利用这个接口可以进行全局性观察。整个集群当中正在跑的一些任务,这些任务包括索引创建任务或者是shard均衡任务等。 这个接口有一个很好用的一个特性,参数wait_for_completion=ture,可以就结合浏览器里面JS来实现浏览器端和服务器端的实时通信。众所周知http是无状态服务,通过这个参数可以在浏览器里边做到很多类似于实时通信的效果,因此可以给集群监控提供方便。
第三方监控系统
下面提一下第三方监控系统,大多不是开源的,大家可以下面去自己去了解一下。他们的基本原理都是类似的,通过刚才介绍的那几个接口,或者直接通过RestAPI获取信息。
X-Pack的Monitor组件
下面介绍X-Pack的监控组件Monitor,以前的名字叫做Marvel。下图界面是X-pack在Kibana安装了Monitor插件之后的功能截面。
在这里面能够看到,ES集群现在的监控状态里有很多实用的节点级指标。而下面这张图是索引级别的。
X-Pack Monitor的监控原理
Monitor的监控原理其实大部分的监控系统都是类似的。它通过collector,持续收集前面提到的监控API的历史信息。collector收集的时间周期是每10秒钟一次,10秒这个时间是可以通过xpack.monitoring.collection.interal配置项来进行调整。这个值调整得越小,集群监控的实时性就越高,但是集群监控所占用的系统资源也会越多。
还有一个非常重要的实践经验,尽量将你的ES集群的监控做成独立的监控。X-Pack默认开启Monitor监控,它会把监控信息直接存储到当前集群内的。但这样会有出现一个问题,生产环境对监控信息要求非常高的情况下,如果集群挂掉,集群监控也就挂了,因为他们是放在一起的。所以最佳实践是,做成一个dedicated cluster,也就是一个独立的集群。在ES5.0里面可以通过xpack.monitoring.elasticsearch.url配置dedicated cluster。在ES6.0里面,这个功能更加强大,可通过xpack.monitoring.exporters配置到多个目标里面去。
下图是Monitor Collector收集的主要信息:
X-Pack报警功能的实现原理
X-Pack的报警功Watcher是一个工作流的配置引擎,通过Rest API可以配置它的触发器,包括数据的输入、触发条件和最后执行的动作,来实现特定条件下触发某个特定动作。
X-Pack的监控功能应该是市面上第三方监控系统中功能最强大的了。在国内大家可能更希望使用国内的一些服务进行接受报警的通知,比如邮件、短信、钉钉等。
阿里云Elasticsearch的监控报警
最后分享阿里云Elasticsearch如何做监控报警。基于阿里云云监控和X-Pack的Monitor功能实现集群监控,并配置旺旺接收告警信息。配置DEMO,如下所示:
页:
[1]