快速查看
curl -XGET 'localhost:9200/_cat/health?v&pretty'
另外从number_of_pending_tasks参数也能够看出当前集群的任务堆积情况,如果number_of_pending_tasks数量较大,则表明Master在处理task时有点力不从心,承载的压力较大了。
输出里最重要的就是 status 这行。很多开源的 ES 监控脚本,其实就是拿这行数据做报警判断。status 有三个可能的值:
green 绿灯,所有分片都正确运行,集群非常健康。
yellow 黄灯,所有主分片都正确运行,但是有副本分片缺失。这种情况意味着 ES 当前还是正常运行的,但是有一定风险。注意,在 Kibana4 的 server 端启动逻辑中,即使是黄灯状态,Kibana 4 也会拒绝启动,死循环等待集群状态变成绿灯后才能继续运行。
red 红灯,有主分片缺失。这部分数据完全不可用。而考虑到 ES 在写入端是简单的取余算法,轮到这个分片上的数据也会持续写入报错。
对 Nagios 熟悉的读者,可以直接将这个红黄绿灯对应上 Nagios 体系中的 Critical,Warning,OK 。
另外一个命令: “curl -XGET ‘localhost:9200/_cluster/health’”
有一个level参数,该参数是一个可选参数,提供了三种枚举值,分别是cluster、indices和shards。默认就是cluster,如果我们需要查看索引或者分片维度的健康信息,则可以使用如下API。
GET /_cluster/health?level=indices
GET /_cluster/health?level=shards
集群节点监控
curl -XGET 'localhost:9200/_cat/nodes?v&pretty'
ip heap.percent ram.percent cpu load_1m load_5m load_15m node.role master name
172.18.225.251 59 98 14 2.28 2.21 1.75 cdhilmrstw * es-node01
这是一个针对Elasticsearch集群节点的_cat/nodes API请求的响应。以下是各字段的含义以及如何识别风险:
curl -XGET ‘localhost:9200’
所有索引的信息,包括索引的名称、文档数量、存储大小等。
curl -XGET ‘localhost:9200/_cat/indices?v’
:确定哪些索引有问题,多少索引有问题。
_cat API 可以通过返回结果告诉我们这一点:
GET _cat/indices?v&health=red
GET _cat/indices?v&health=yellow
GET _cat/indices?v&health=green
Elasticsearch集群中所有分片的信息,包括分片所在的节点、分片状态等。
curl -XGET 'localhost:9200/_cat/shards?v'
Elasticsearch集群中所有节点的性能统计信息,包括内存使用情况、CPU负载、线程池情况等。
curl -XGET ‘localhost:9200/_nodes/stats?pretty’
在_nodes/stats命令的输出中,以下是一些最值得关注的关键信息:
内存使用情况:包括内存总量、已使用内存、剩余内存等信息,以及内存池的使用情况。
CPU负载:包括CPU使用率、每个CPU核心的负载情况,以及CPU线程池的情况。
线程池情况:包括搜索线程池、索引线程池、刷新线程池等的活跃线程数、队列大小等信息。
文件系统情况:包括磁盘总容量、已使用容量、剩余容量等信息。
网络情况:包括网络接口的发送和接收数据量、连接数等信息。
JVM情况:包括JVM堆内存使用情况、垃圾回收情况、类加载情况等信息。
索引情况:包括索引的数量、文档数量、存储大小等信息。
缓存情况:包括字段数据缓存、请求缓存、索引缓存等的命中率、大小等信息。
负载情况:包括每个节点的负载情况,如搜索请求、索引请求等的数量和响应时间。
这些信息可以帮助您全面了解Elasticsearch集群的性能情况,包括节点的资源利用情况、负载情况、缓存命中率等,有助于监控和优化集群的性能表现。
_nodes/process?pretty
查看节点中fielddata占用堆内存空间的大小。
GET _cat/fielddata?v
当构建单元和集成测试时,或者实现和 Elasticsearch 相关的自动化脚本时,cluster-health API 还有另一个小技巧非常有用。你可以指定一个 wait_for_status 参数,它只有在状态达标之后才会返回。比如:
GET _cluster/health?wait_for_status=green
这个调用会 阻塞 (不给你的程序返回控制权)住直到 cluster-health 变成 green ,也就是说所有主分片和副本分片都分配下去了。这对自动化脚本和测试非常重要。
查看并发请求,TPS,QPS 等情况
并发连接数
curl -XGET ‘localhost:9200/_cat/thread_pool?v’
集群中各种线程池的情况,包括活跃线程数、队列大小等信息。您可以关注active字段,它表示当前的活跃线程数,可以用来估算并发连接数。
查看每秒事务数(TPS):
curl -XGET ‘localhost:9200/_cat/indices?v’
这个命令将返回Elasticsearch集群中所有索引的信息,包括文档数量、存储大小等。通过监测文档索引的增长速度,可以估算每秒事务数(TPS)。
查看每秒查询数(QPS):
curl -XGET ‘localhost:9200/_cat/indices?v’
通过监测每个索引的查询请求增长速度,可以估算每秒查询数(QPS)。
您还可以考虑使用Elasticsearch的Monitoring插件或者Elasticsearch的X-Pack监控功能来更直观地查看每秒事务数(TPS)、每秒查询数(QPS)等数据。
常用命令
本文我们从集群运维角度出发,向大家介绍了我们在日常的集群运维工作中常用到的集群维度相关命令。下面以表格的形式总结如下:
命令 | API命令说明 |
---|---|
GET /_cluster/health | 查看集群健康状态等信息 |
GET /_cat/pending_tasks | 查看集群任务堆积情况 |
GET /_cluster/state// | 查看集群详细的元数据信息 |
GET /_cluster/stats | 查看集群各维度的统计信息,包括节点CPU、JVM等使用率情况 |
GET _cluster/allocation/explain | 查看集群分片分配详情 |
POST /_cluster/reroute | 更改分片分配策略 |
GET /_cluster/settings | 查看集群层面settings设置信息 |
GET /_tasks | 查看集群中正在执行的task信息 |
GET /_cat/pending_tasks | 查看任务堆积详情 |
GET /_cluster/pending_tasks | 查看任务堆积详情 (从该API中可以更加直观的看到该task是否在执行executing,以及在队列中等待的时间time_in_queue_millis等详细信息。) |
查询全部索引下的文档总数:
GET /_cat/count
查询某个索引下的文档总数(为索引名):
GET /_cat/count/<target>
查看全部索引状态(存储与文档数)
curl -XGET 'localhost:9200/_cat/indices?v&pretty'
health status index uuid pri rep docs.count docs.deleted store.size pri.store.size
yellow open evaluating xlVUWY5CTR6f3wUemFLj0w 1 1 12129994 132415 6.4gb 6.4gb
查看集群分片分配详情
GET _cluster/allocation/explain
GET _cluster/allocation/explainAPI,查看分配失败的具体原因