本文為您介紹如何使用API查詢阿里云各產品監控數據。
大型企業內部通常有自建的運維監控系統,上云過程中會面臨如何將云資源監控數據與已有系統集成的問題。下面本文將為您介紹如何通過云監控接口查詢各產品監控數據,從而將阿里云的監控數據與現有系統進行集成。
指標類監控數據查詢的接口
云監控提供以下3類接口用于指標類監控數據的查詢:
查詢產品列表接口:查詢云監控支持哪些產品的監控項,詳情請參見DescribeProjectMeta。
查詢監控項列表接口:查詢對應產品可以獲取哪些監控項,詳情請參見DescribeMetricMetaList。
查詢監控數據接口:根據產品信息和監控項信息,查詢具體的監控數據,詳情請參見DescribeMetricList和DescribeMetricLast。
注意事項:
DescribeMetricList和DescribeMetricLast接口支持批量獲取用戶下所有實例的某個指標的數據。如果想獲取多個指標,可以多個線程獲取多個指標,也可以單線程循環獲取多個指標。
DescribeMetricList接口支持的最大QPS是20,DescribeMetricLast接口的最大QPS是30。
DescribeMetricLast接口適用于需要定時全量拉取所有最新數據的情況。時間窗口自動往前滑動,每個周期都取一條最新數據。
監控數據會有一定的延遲,且各產品的監控數據的延遲情況不太一樣,所以建議您使用DescribeMetricLast查詢最新數據時,時間窗口放寬到5-10分鐘。
秒級精度的數據保存7天,分鐘級精度的數據保存31天。
如果您需要查詢云賬號所有實例的數據,則不需要指定Dimensions。
實戰案例
通過Demo演示,為您介紹如何使用DescribeMetricLast接口查詢最新的監控數據,使用DescribeMetricList接口查詢指定時間段內的監控數據。
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.exceptions.ServerException;
import com.aliyuncs.profile.DefaultProfile;
import com.google.gson.Gson;
import java.util.*;
import com.aliyuncs.cms.model.v20190101.*;
/**
* 使用DescribeMetricList接口可以查詢指定時間段內,指定實例的監控數據。
* 該查詢允許指定多個實例進行批量查詢。
* 如果需要獲取多個實例一段時間內的監控數據,可以在查詢時指定多個實例,每次最多10個實例。
* 查詢一段時間內的監控數據
*/
public class DescribeMetricList {
public static void main(String[] args) {
DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"), System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
IAcsClient client = new DefaultAcsClient(profile);
DescribeMetricListRequest request = new DescribeMetricListRequest();
//namespace和metric通過DescribeMetricMetaList和DescribeProjectMeta獲取
request.setNamespace("acs_ecs_dashboard");
request.setMetricName("cpu_total");
//period表示要獲取60s精度的監控數據。period根據每個metric有不同的定義,大部分metric都會有60s的period。
request.setPeriod("60");
//本次查詢的分頁長度,每次查詢最多返回1000條數據。
request.setLength("1000");
//查詢數據的開始時間
request.setStartTime("2019-07-22 11:00:00");
//查詢數據的結束時間
request.setEndTime("2019-07-22 12:00:00");
//查詢的關聯dimension過濾,既可以是一個JSONArray,也可以是一個JSONObject
request.setDimensions("[{\"instanceId\":\"i-8vb******\"}]");
try {
DescribeMetricListResponse response = client.getAcsResponse(request);
System.out.println(new Gson().toJson(response));
} catch (ServerException e) {
e.printStackTrace();
} catch (ClientException e) {
System.out.println("ErrCode:" + e.getErrCode());
System.out.println("ErrMsg:" + e.getErrMsg());
System.out.println("RequestId:" + e.getRequestId());
}
}
}
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.exceptions.ServerException;
import com.aliyuncs.profile.DefaultProfile;
import com.google.gson.Gson;
import java.util.*;
import com.aliyuncs.cms.model.v20190101.*;
/**
* 查詢最新監控數據。
**/
public class DescribeMetricLast {
public static void main(String[] args) {
DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"), System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
IAcsClient client = new DefaultAcsClient(profile);
DescribeMetricLastRequest request = new DescribeMetricLastRequest();
//namespace和metric通過DescribeMetricMetaList和DescribeProjectMeta獲取。
request.setNamespace("acs_ecs_dashboard");
request.setMetricName("cpu_total");
//查詢的關聯dimension過濾,既可以是一個JSONArray,也可以是一個JSONObject。
request.setDimensions("[{\"instanceId\":\"i-8vb6p*****\"}]");
//本次查詢的分頁長度,每次查詢最多返回1000條數據。
request.setLength("1000");
//查詢數據的開始時間。
request.setStartTime("2019-07-22 11:00:00");
//查詢數據的結束時間。
request.setEndTime("2019-07-22 12:00:00");
request.setPeriod("60");
try {
DescribeMetricLastResponse response = client.getAcsResponse(request);
System.out.println(new Gson().toJson(response));
} catch (ServerException e) {
e.printStackTrace();
} catch (ClientException e) {
System.out.println("ErrCode:" + e.getErrCode());
System.out.println("ErrMsg:" + e.getErrMsg());
System.out.println("RequestId:" + e.getRequestId());
}
}
}