全部產品
Search
文件中心

Cloud Monitor:使用API查詢監控資料

更新時間:Jun 19, 2024

本文為您介紹如何使用API查詢阿里雲各產品監控資料。

大型企業內部通常有自建的營運監控系統,上雲過程中會面臨如何將雲資源監控資料與已有系統整合的問題。下面本文將為您介紹如何通過CloudMonitor介面查詢各產品監控資料,從而將阿里雲的監控資料與現有系統進行整合。

指標類監控資料查詢的介面

CloudMonitor提供以下3類介面用於指標類監控資料的查詢:

  • 查詢產品列表介面:查詢CloudMonitor支援哪些產品的監控項,詳情請參見DescribeProjectMeta

  • 查詢監控項列表介面:查詢對應產品可以擷取哪些監控項,詳情請參見DescribeMetricMetaList

  • 查詢監控資料介面:根據產品資訊和監控項資訊,查詢具體的監控資料,詳情請參見DescribeMetricListDescribeMetricLast

注意事項:

  • DescribeMetricListDescribeMetricLast介面支援批量擷取使用者下所有執行個體的某個指標的資料。如果想擷取多個指標,可以多個線程擷取多個指標,也可以單線程迴圈擷取多個指標。

  • 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());
        }

    }
}