使用API查詢監(jiān)控?cái)?shù)據(jù)
本文為您介紹如何使用API查詢阿里云各產(chǎn)品監(jiān)控?cái)?shù)據(jù)。
大型企業(yè)內(nèi)部通常有自建的運(yùn)維監(jiān)控系統(tǒng),上云過程中會(huì)面臨如何將云資源監(jiān)控?cái)?shù)據(jù)與已有系統(tǒng)集成的問題。下面本文將為您介紹如何通過云監(jiān)控接口查詢各產(chǎn)品監(jiān)控?cái)?shù)據(jù),從而將阿里云的監(jiān)控?cái)?shù)據(jù)與現(xiàn)有系統(tǒng)進(jìn)行集成。
指標(biāo)類監(jiān)控?cái)?shù)據(jù)查詢的接口
云監(jiān)控提供以下3類接口用于指標(biāo)類監(jiān)控?cái)?shù)據(jù)的查詢:
查詢產(chǎn)品列表接口:查詢?cè)票O(jiān)控支持哪些產(chǎn)品的監(jiān)控項(xiàng),詳情請(qǐng)參見DescribeProjectMeta。
查詢監(jiān)控項(xiàng)列表接口:查詢對(duì)應(yīng)產(chǎn)品可以獲取哪些監(jiān)控項(xiàng),詳情請(qǐng)參見DescribeMetricMetaList。
查詢監(jiān)控?cái)?shù)據(jù)接口:根據(jù)產(chǎn)品信息和監(jiān)控項(xiàng)信息,查詢具體的監(jiān)控?cái)?shù)據(jù),詳情請(qǐng)參見DescribeMetricList和DescribeMetricLast。
注意事項(xiàng):
DescribeMetricList和DescribeMetricLast接口支持批量獲取用戶下所有實(shí)例的某個(gè)指標(biāo)的數(shù)據(jù)。如果想獲取多個(gè)指標(biāo),可以多個(gè)線程獲取多個(gè)指標(biāo),也可以單線程循環(huán)獲取多個(gè)指標(biāo)。
DescribeMetricList接口支持的最大QPS是20,DescribeMetricLast接口的最大QPS是30。
DescribeMetricLast接口適用于需要定時(shí)全量拉取所有最新數(shù)據(jù)的情況。時(shí)間窗口自動(dòng)往前滑動(dòng),每個(gè)周期都取一條最新數(shù)據(jù)。
監(jiān)控?cái)?shù)據(jù)會(huì)有一定的延遲,且各產(chǎn)品的監(jiān)控?cái)?shù)據(jù)的延遲情況不太一樣,所以建議您使用DescribeMetricLast查詢最新數(shù)據(jù)時(shí),時(shí)間窗口放寬到5-10分鐘。
秒級(jí)精度的數(shù)據(jù)保存7天,分鐘級(jí)精度的數(shù)據(jù)保存31天。
如果您需要查詢?cè)瀑~號(hào)所有實(shí)例的數(shù)據(jù),則不需要指定Dimensions。
實(shí)戰(zhàn)案例
通過Demo演示,為您介紹如何使用DescribeMetricLast接口查詢最新的監(jiān)控?cái)?shù)據(jù),使用DescribeMetricList接口查詢指定時(shí)間段內(nèi)的監(jiān)控?cái)?shù)據(jù)。
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接口可以查詢指定時(shí)間段內(nèi),指定實(shí)例的監(jiān)控?cái)?shù)據(jù)。
* 該查詢?cè)试S指定多個(gè)實(shí)例進(jìn)行批量查詢。
* 如果需要獲取多個(gè)實(shí)例一段時(shí)間內(nèi)的監(jiān)控?cái)?shù)據(jù),可以在查詢時(shí)指定多個(gè)實(shí)例,每次最多10個(gè)實(shí)例。
* 查詢一段時(shí)間內(nèi)的監(jiān)控?cái)?shù)據(jù)
*/
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精度的監(jiān)控?cái)?shù)據(jù)。period根據(jù)每個(gè)metric有不同的定義,大部分metric都會(huì)有60s的period。
request.setPeriod("60");
//本次查詢的分頁長(zhǎng)度,每次查詢最多返回1000條數(shù)據(jù)。
request.setLength("1000");
//查詢數(shù)據(jù)的開始時(shí)間
request.setStartTime("2019-07-22 11:00:00");
//查詢數(shù)據(jù)的結(jié)束時(shí)間
request.setEndTime("2019-07-22 12:00:00");
//查詢的關(guān)聯(lián)dimension過濾,既可以是一個(gè)JSONArray,也可以是一個(gè)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.*;
/**
* 查詢最新監(jiān)控?cái)?shù)據(jù)。
**/
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");
//查詢的關(guān)聯(lián)dimension過濾,既可以是一個(gè)JSONArray,也可以是一個(gè)JSONObject。
request.setDimensions("[{\"instanceId\":\"i-8vb6p*****\"}]");
//本次查詢的分頁長(zhǎng)度,每次查詢最多返回1000條數(shù)據(jù)。
request.setLength("1000");
//查詢數(shù)據(jù)的開始時(shí)間。
request.setStartTime("2019-07-22 11:00:00");
//查詢數(shù)據(jù)的結(jié)束時(shí)間。
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());
}
}
}