思路
通过请求MinIO
的[/minio/v2/metrics/bucket
]接口获取metrics进行分析,提取usage和quota。
步骤
1.生成一个token用于请求MinIO
使用hutool
的jwt
工具类来生成
//jwt签名 要用hs512算法
final JWTSigner signer = JWTSignerUtil.hs512(OssConfiguration.secretKey.getBytes());
//jwt载体
Map<String, Object> payload = new HashMap<String, Object>() {
private static final long serialVersionUID = 1L;
{
put("sub", OssConfiguration.accessKey);
put("exp", System.currentTimeMillis() + 1000 * 60);
put("iss", "prometheus");
}
};
//生成请求minio的token
String token = JWTUtil.createToken(payload, signer);
2.通过Get请求获取metrics
使用了hutool
的HttpRequest
工具类来请求
String url = OssConfiguration.endpoint + "/minio/v2/metrics/bucket";
//请求minio
String result = HttpRequest.get(url)
.header(Header.USER_AGENT, "ANY")
.header("Authorization", "Bearer " + token)
.header("Accept", "*/*")
.header("Host", "oss.你的MinIO服务器.com")
.header("Connection", "keep-alive")
.execute().body();
3.解析metric
String usagePatternString = "minio_bucket_usage_total_bytes\\{bucket=\"你的bucket名称\",server=\"[^\"]+\"\\}\\s+(\\d+\\.\\d+e[+-]\\d+)";
String quotaPatternString = "minio_bucket_quota_total_bytes\\{bucket=\"你的bucket名称\",server=\"[^\"]+\"\\}\\s+(\\d+\\.\\d+e[+-]\\d+)";
Pattern usagePattern = Pattern.compile(usagePatternString);
Pattern quotaPattern = Pattern.compile(quotaPatternString);
Matcher usageMatcher = usagePattern.matcher(result);
Matcher quotaMatcher = quotaPattern.matcher(result);
double usageTotalBytes = 0.0;
double quotaTotalBytes = 0.0;
if (usageMatcher.find()) {
usageTotalBytes = Double.parseDouble(usageMatcher.group(1));
}
if (quotaMatcher.find()) {
quotaTotalBytes = Double.parseDouble(quotaMatcher.group(1));
}
// System.out.println("Bucket usage total bytes: " + usageTotalBytes);
// System.out.println("Bucket quota total bytes: " + quotaTotalBytes);
这样就得到了可用容量和已用容量
实际请求参考
Unirest.setTimeouts(0, 0);
HttpResponse<String> response = Unirest.get("https://oss.xxx.com/minio/v2/metrics/bucket")
.header("User-Agent", "xxx/1.0.0 (https://xxx.com)")
.header("Authorization", "Bearer eyxxx")
.header("Accept", "*/*")
.header("Host", "oss.xxx.com")
.header("Connection", "keep-alive")
.asString();