本文為您介紹如何使用API查詢阿里雲各產品監控資料。
大型企業內部通常有自建的營運監控系統,上雲過程中會面臨如何將雲資源監控資料與已有系統整合的問題。下面本文將為您介紹如何通過CloudMonitor介面查詢各產品監控資料,從而將阿里雲的監控資料與現有系統進行整合。
指標類監控資料查詢的介面
CloudMonitor提供以下3類介面用於指標類監控資料的查詢:
查詢產品列表介面:查詢CloudMonitor支援哪些產品的監控項,詳情請參見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());
}
}
}