一、简述
ES监控的最主要作用是用于监控ES的服务是否正常运行,以及在出现问题时为提供解决问题提供依据。目前ES监控主要针对三个级别分别是:集群级别、节点级别和索引级别。
集群级别的监控主要是针对整个ES集群来说,包括集群的健康状况、集群的状态等。
节点级别的监控主要是针对每个ES实例的监控,其中包括每个实例的查询索引指标和物理资源使用指标。
索引级别的监控主要是针对每个索引来说,主要包括每个索引的性能指标,由于是针对每个索引的监控,因此一般含有多个索引的ES集群其索引级别的监控数据是非常多的。
针对这三类指标,首先集群级别的指标其性能指标较少,但是其每个指标都非常重要,可以查看集群级别指标获取ES集群的运行状态。其次,节点级别的指标更多的用于问题的排查,当发现集群出现问题时更可能多的时候会直接定位到具体的ES实例,通过查看单台实例的资源使用情况或者其他指标进行问题排查。最后,索引级别的监控的应用场景主要是为应用提供监控,例如某个应用使用到的索引其查询速度变慢就可以通过索引级别的监控判断是否是由于索引创建时一些不合理设置引起的。
二、集群的监控
集群的监控包括二个方面:集群的健康状况和集群的运行状况
1、集群的健康状态,通过api获取:GET _cluster/health?pretty
2、集群的状况信息
集群状态信息主要包含整个集群的一些统计信息,例如文档数、分片数、资源使用情况等。集群状态信息可以由以下api获取:GET _cluster/stats?pretty
三、节点监控
节点监控主要针对各个节点,有很多指标对于保证ES集群的稳定运行非常重要。下面对节点监控指标进行介绍。节点指标可以通过以下api获取:GET /_nodes/stats?pretty
备注:需要计算的指标分为两类,分别为请求速率指标和请求处理延迟指标。
1、index_per_min:每分钟索引请求数量。计算公式如下:
<code>索引请求率=(index_total两次采集差值)/(系统时间差值(ms))×60000 (公式1)</code>
2、indexAverge_per_min:索引请求处理延迟。计算公式如下:
<code>索引延迟=(index_time_in_millis两次采集差值)/(index_total两次采集差值) (公式2)</code>
四、索引监控
索引监控指标注意针对单个索引,不过也可以通过"_all"对集群种所有索引进行监控,节点指标可以通过以下api获取:GET /_stats?pretty
备注
在节点监控和索引监控时可以获取到一些操作数据,例如index、search、get等。对于这些指标参数有一些需要注意的地方:
search.query
query_total:查询总数,指的每个分片上的查询次数,一般如果有五个分片的话进行一次查询query_total = 5。注意在统计指标的时候应该统计的是total分片的,不应该只统计主分片的值,因为查询请求不一定全部分发到主分片。
get
total:get请求数,一般get都需要指定文档id。同样get也应该统计total分片的值,如果只统计主分片会造成数据变少,因为有时候的get请求不是从主分片取的数据。
indexing
index_total和index_time_in_millis指标是根据索引的文档数来记录,同样需要统计total分片的数据,total分片包括副本的索引请求,一般1个副本的话index_total会乘以2。
search.fetch
一个查询分为两个阶段,一是query另一个是fetch,fetch的情况与get相似,fetch.total指fetch请求数,fetch有可能从主分片拉取数据,也有可能从副本拉取数据。如果只统计主分片的数据会丢失数据。