ES的监控
ES听过了很多方式的监控查看,其中要属cat api的方式最为简单实用,直接访问对应地址即可。另外所有的catAPI都有如下几个通用参数:
Verbose GET /_cat/XXX/?v 开启详细输出
Help GET /cat/XXX/?help 输出可用的列
Headers GET /_cat/XXX/?h=column1,column2 指定输出的列 Sort GET /_cat/XXX/?v&s=column1,column2:desc,column3 指定输出的列进行排序,默认按照升序排序 Format GET /_cat/XXX?format=json 指定响应返回的数据格式:text(默认),json,yaml,smile,cbor
curl http://10.232.14.216:9200/_cat
=^.^=
# 提供了每个数据节点分配了多少分片和使用了多少磁盘空间的快照
/_cat/allocation
# 显示分片状态
/_cat/shards
/_cat/shards/{index}
# 显示ID、IP地址、主机名和节点名
/_cat/master
# 显示节点信息
/_cat/nodes
/_cat/tasks
# 查看索引状态,如主分片数和副本数、文档数、删除文档数,大小等等
/_cat/indices
/_cat/indices/{index}
# 显示索引分片段有关的低级别信息
/_cat/segments
/_cat/segments/{index}
# 快速查看整个集群的文档数或单个索引
/_cat/count
/_cat/count/{index}
# 显示正在进行的和以前完成的索引分片恢复状态。恢复事件随时可能发生,在集群中一个索引分片转移到其它节点上。可能发生在快照恢复、改变副本级别、节点故障或者启动节点。
/_cat/recovery
/_cat/recovery/{index}
# 查看集群状态。有一个ts选项禁用时间戳
/_cat/health
# 与 /_cluster/pending_tasks提供相同的信息,以表格化显示
/_cat/pending_tasks
# 显示目前配置的别名索引,包括过滤和路由相关的信息
/_cat/aliases
/_cat/aliases/{alias}
# 显示线程池状态。包括 merge,optimize,flush,refresh 等其他线程池状态,可通过 ?h 参数指明获取
/_cat/thread_pool
/_cat/thread_pool/{thread_pools}
# 显示节点插件信息
/_cat/plugins
# 显示集群中每个数据节点fielddata当前所使用的heap内存大小
/_cat/fielddata
/_cat/fielddata/{fields}
# 显示自定义节点属性,节点名、主机名、IP地址、属性名、属性值。属性名和属性值就是你定义的
/_cat/nodeattrs
# repositories 可以显示集群中的快照的资料库
/_cat/repositories
# 输出属于指定仓库的快照信息
/_cat/snapshots/{repository}
# 输出当前正在存在的模板信息
/_cat/templates
处理cat api外还有几个接口实用的场景也很多
# 顾名思义就是看集群内的每一个节点的状态信息,在每个节点上会有不同索引的一些分片,这个节点所涉及到的分片每一个单独的信息可以通过这个API观察到的
/_nodes/stats
# Cluster Stats API,就是整个集群的比较选举性的信息,通过这个API包括插件节点输入,还有一些各个节点的统计信息的相加结果,都可以在这个API中可以看到
/_cluster/stats
# Index_name Stats API,就是刚才提到维度索引级别的。这个API的调用是通过一个index_name斜杠,是指定每一个索引都可以去调用这个接口,去观察这个索引的相关统计信息。部分指标和Node Stats API相匹配
/index_name/_stats
# Cluster Health API,这是大家非常了解的,ES绿、黄、红三个状态就是通过这个接口来拿到。这个接口包含整个集群的分片信息和监控状态,这个监控大家应该会用得非常广泛
/_cluster/health
# Pending Tasks API,ES里面有很多的异步任务,利用这个接口可以进行全局性观察。整个集群当中正在跑的一些任务,这些任务包括索引创建任务或者是shard均衡任务等
/_cluster/pending_tasks
查看集群的健康,集群的健康值一般有如下三个状态
green 所有主要分片和复制分片都可用
yellow 所有主要分片可用,但不是所有复制分片都可用。高可用不牢靠。但不会丢失数据
red 不是所有的主要分片都可用。数据有极大风险。数据不能用
GET _cluster/health
{
"cluster_name": "elasticsearch",
"status": "yellow",
"timed_out": false,
"number_of_nodes": 1,##集群节点数
"number_of_data_nodes": 1,##数据节点数量
"active_primary_shards": 156,##主分片数量
"active_shards": 156,##可用的分片数量
"relocating_shards": 0,##正在重新分配的分片数量,在新加或者减少节点的时候会发生
"initializing_shards": 0,##正在初始化的分片数量,新建索引或者刚启动会存在,时间很短
"unassigned_shards": 156, ##没有分配的分片,一般就是那些名存实不存的副本分片。
"delayed_unassigned_shards": 0,
"number_of_pending_tasks": 0,
"number_of_in_flight_fetch": 0,
"task_max_waiting_in_queue_millis": 0,
"active_shards_percent_as_number": 50
}
##索引级别集群状态,可以细致查看到底是哪个索引引起集群的故障的
GET _cluster/health?level=indices
##分片级别集群状态,可以细致查看到底是哪个分片引起的集群故障
GET _cluster/health?level=shards
##阻塞查看集群状态,适用于自动化脚本。当状态变为指定状态或者更好就返回继续执行。
GET _cluster/health?wait_for_status=yellow