ElasticSearch 通过获取Status获取备份文件占用空间的大小
ElasticSearch API
向 127.0.0.1:9200/_snapshot/备份仓库名/快照名/_status
发送请求即可获取快照状态,可在stats.total_size_in_bytes中获取到备份的文件大小。注意的是这里获取的单位是byte,如果想直接获取已经转换好的单位,可以加上human参数,如下:
127.0.0.1:9200/_snapshot/备份仓库名/快照名/_status?human
此时返回的stats里会出现total_size字段,该字段会根据具体大小自动转换成MB、TB等单位。
关于这部分带human参数的返回字段描述,可以参照
https://github.com/elastic/elasticsearch/issues/18543#event-1647308307
JAVA API
如果要使用JAVA获取文件大小,首先要声明Client,我使用的是TransportClient,在配置文件中配置如下:
spring:
data:
#ElasticSearch地址
elasticsearch:
cluster-name: elasticsearch
cluster-nodes: 127.0.0.1:9300
然后@AutoWired注入TransportClient transportClient
在需要使用的地方加入如下代码:
String[] snapshotsName = new String[]{"快照1","快照2}; //快照名,必须是字符数组
SnapshotsStatusRequest request = new SnapshotsStatusRequest().repository("c备份仓库名").snapshots(snapshotsName);
SnapshotsStatusResponse response = transportClient.admin().cluster().snapshotsStatus(request).actionGet(); //通过client和request获取response
List<SnapshotStatus> list = response.getSnapshots(); //获取response中的数据
至此获得到了snapshot status的信息。
其他的Client获取Response可以参考官方文档:
SnapShotStatus JAVA API
https://www.elastic.co/guide/en/elasticsearch/client/java-rest/6.x/java-rest-high-snapshot-snapshots-status.html
Transport Clinet API
https://www.elastic.co/guide/en/elasticsearch/client/java-api/current/transport-client.html
RestHighLevelClient API
https://www.elastic.co/guide/en/elasticsearch/client/java-rest/6.x/java-rest-high-getting-started-initialization.html
可惜JAVA API中的实体类SnapshotStatus并没有针对human参数获取转换好格式的文件大小,只能通过snapshotStatusList.get(0).getStats().getTotalSize()
获取到Long型的byte单位的备份文件大小。如果要手动转换,手动转换如下:
public String revertSize(Long size){
Float sizeFloat = size.floatValue();
String[] NAME = new String[]{"byte","KB","MB","GB","TB"};
int num = 0;
while(sizeFloat/1024>=1){
sizeFloat=sizeFloat/1024;
num++;
}
return new DecimalFormat(".00").format(sizeFloat) + NAME[num];
}