Elasticsearch 猫cat API
1. cat Allocation:提供分配给每个数据节点的分片数量及磁盘空间的快照
A. 请求:GET /_cat/allocation/<node_id> | GET /_cat/allocation
路径参数 node_id:节点ID或名称,多个以逗号分隔;
B. 查询参数
bytes:用于显示字节值的单位,字节大小单位;
format:指定响应类型,有text/json/smile/yaml/cbor等,有些格式可以通过http请求头Accept来指定,如:application/json;
local:默认false,表示从主节点检索信息,设置为true,则仅从本地节点检索信息
h:要显示的列名称,多个以逗号分隔;
v:如果为true,则响应列标题
C. 结果信息
列名 | 说明 |
shards | 节点分片数 |
disk.indices | ES索引的磁盘使用量 |
disk.used | 磁盘的总使用量(不只ES) |
disk.avail | 可用磁盘容量 |
disk.total | 磁盘总量 |
disk.percent | 磁盘使用百分比 |
host | 节点host |
ip | 节点IP |
node | 节点名 |
D. kibana操作
E. java编写
注意:该方式获取文件系统磁盘信息可能会出现问题,这是项目运行一段时间后发现的,见上面图右边第5行数据-unassigned shards,推荐使用集群统计中拿磁盘信息,参考:https://www.cnblogs.com/ruhuanxingyun/p/12193148.html
/**
* 获取磁盘容量信息
*
* @return map
*/
private Map<String, Long> getDiskSpace() {
Request request = new Request(HttpMethod.GET.toString(), "/_cat/allocation");
request.addParameter("bytes", "b");
request.addParameter("format", "json");
Map<String, Long> map = new HashMap<>(4);
try {
Response response = restHighLevelClient.getLowLevelClient().performRequest(request);
if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
String content = EntityUtils.toString(response.getEntity());
JSONArray jsonArray = JSONUtil.parseArray(content);
// 节点数
int length = jsonArray.size();
long totalSpace = 0, usableSpace = 0, freeSpace = 0;
for (Object obj : jsonArray) {
Map<String, String> allocationMap = (Map) obj;
totalSpace += Long.valueOf(allocationMap.get("disk.total"));
usableSpace += Long.valueOf(allocationMap.get("disk.used"));
freeSpace += Long.valueOf(allocationMap.get("disk.avail"));
}
map.put("totalSpace", totalSpace / length);
map.put("usableSpace", usableSpace / length);
map.put("freeSpace", freeSpace / length);
log.info(String.format("磁盘容量信息:%s", map.toString()));
} else {
log.info("获取磁盘容量信息失败");
}
} catch (IOException e) {
e.printStackTrace();
log.info("获取磁盘容量信息失败");
}
return map;
}
可参考:ES猫官网地址
分类:
Elasticsearch
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗