文章目录
前言
获取Minio指标的方式就是请求http://ip:port/minio/v2/metrics/cluster这个地址,然后解析返回的内容
一、示例参考
1.获取总存储空间大小、空闲空间大小、已使用空间大小
代码如下:
@Data
public class DiskMsg {
private double total;
private double free;
private double use;
}
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.math.BigDecimal;
import java.net.HttpURLConnection;
import java.net.URL;
import java.text.DecimalFormat;
import java.util.HashMap;
import java.util.Map;
public class ServerCheckUtil {
private static DecimalFormat df=new DecimalFormat("#.0000");
//获取minio服务器磁盘状态
public static Map<String, DiskMsg> getMinioState(String urls) throws Exception {
URL url = new URL(urls);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.connect();
Map<String, DiskMsg> msg = new HashMap<>();
if (conn.getResponseCode() == 200) {
InputStream is = conn.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is, "UTF-8"));
String line =null;
while ((line = br.readLine()) != null) {
if (line != null && line.startsWith("minio_node_disk_free_bytes")) {
String[] lines = line.split(" ");
if (lines.length == 2) {
//取节点
String ip= lines[0].substring(lines[0].lastIndexOf("=")+2,lines[0].length()-2 );
//化成单位g
BigDecimal bd = new BigDecimal(lines[1]).divide(new BigDecimal(1024*1024*1024));
if(msg.containsKey(ip)){
msg.get(ip).setFree(Double.parseDouble(df.format(bd.doubleValue())));
}else{
DiskMsg diskMsg=new DiskMsg();
diskMsg.setFree(Double.parseDouble(df.format(bd.doubleValue())));
msg.put(ip,diskMsg);
}
}
}else if(line != null && line.startsWith("minio_node_disk_total_bytes")){
String[] lines = line.split(" ");
if (lines.length == 2) {
//取节点
String ip= lines[0].substring(lines[0].lastIndexOf("=")+2,lines[0].length()-2 );
//化成单位g
BigDecimal bd = new BigDecimal(lines[1]).divide(new BigDecimal(1024*1024*1024));
if(msg.containsKey(ip)){
msg.get(ip).setTotal(Double.parseDouble(df.format(bd.doubleValue())));
}else{
DiskMsg diskMsg=new DiskMsg();
diskMsg.setTotal(Double.parseDouble(df.format(bd.doubleValue())));
msg.put(ip,diskMsg);
}
}
}else if(line != null && line.startsWith("minio_node_disk_used_bytes")){
String[] lines = line.split(" ");
if (lines.length == 2) {
//取节点
String ip= lines[0].substring(lines[0].lastIndexOf("=")+2,lines[0].length()-2 );
//化成单位g
BigDecimal bd = new BigDecimal(lines[1]).divide(new BigDecimal(1024*1024*1024));
if(msg.containsKey(ip)){
msg.get(ip).setUse(Double.parseDouble(df.format(bd.doubleValue())));
}else{
DiskMsg diskMsg=new DiskMsg();
diskMsg.setUse(Double.parseDouble(df.format(bd.doubleValue())));
msg.put(ip,diskMsg);
}
}
}else{
continue;
}
}
}
return msg;
}
}
总结
如果是不同服务器的Minio集群的话就需要一个个节点遍历解析,若有其他更好的方法也欢迎大家讨论