_cat/nodes 是什么
_cat/nodes 汇总每个节点的角色、堆内存使用率、内存占用、CPU 与负载,是集群巡检中定位资源瓶颈最快的接口。用 h= 挑选关键列可把输出压缩到一屏,用 s= 排序能立刻看出哪台机器最吃紧。节点角色决定它承担哪类工作:主节点、数据节点、协调节点各有不同的压力特征。
基本信息
| 接口 | GET /_cat/nodes?v |
|---|---|
| 常用列 | ip、name、heap.percent、ram.percent、cpu、load_1m、disk.used_percent |
| 角色列 | m 主节点候选、d 数据节点、i 摄取节点、l 机器学习、v 仅投票 |
| 辅助参数 | h= 选列、s= 排序、format=json |
| 适用版本 | Elasticsearch 7.x / 8.x |
| 配套接口 | _cat/allocation、_nodes/stats |
典型使用场景
- 巡检时快速找出堆内存使用率最高的节点
- 确认磁盘水位是否接近分配阈值,避免分片停止分配
- 排查写入变慢:看摄取节点的 CPU 与负载是否满
- 主节点选举异常时确认候选节点数量与角色分布
- 扩容前评估各节点负载是否均衡
- 结合 _cat/allocation 核对分片数与磁盘占用
示例
示例
GET /_cat/nodes?v&h=ip,name,node.role,master,heap.percent,ram.percent,cpu,disk.used_percent
GET /_cat/nodes?v&s=heap.percent:desc # 按堆使用率排降序
GET /_cat/nodes?v&s=disk.used_percent:desc # 找磁盘最满的节点
GET /_cat/nodes?v&h=ip,name,load_1m,load_5m,cpu&format=json # 机器可读输出关键列读法
| 列名 | 含义 | 异常信号 |
|---|---|---|
| heap.percent | JVM 堆使用率 | 长期高于 75% 需关注 GC |
| ram.percent | 系统内存使用率 | 接近 100% 说明缓存吃满 |
| cpu | CPU 使用率 | 持续高位说明算力不足 |
| load_1m | 1 分钟系统负载 | 与核数对比才有效 |
| disk.used_percent | 磁盘使用率 | 接近水位线会停止分配分片 |
| node.role | 节点角色组合 | 角色分布不均会形成瓶颈 |
堆使用率长期高于 75% 且伴随频繁 GC 时,优先考虑加堆或扩节点,而不是继续往同一批节点上压任务。
load_1m 是操作系统负载而不是 CPU 百分比,需要与该机器的核数对比才能判断是否过载。
节点角色列的字符含义随版本演进,脚本解析建议用 format=json 读字段名,而不是按固定位置截取字符。