本教程详细介绍如何使用Alibaba Cloud SDK for Java查询ECS的监控信息和自定义数据。

前提条件

在使用本教程前,请确保已完成以下操作:
  • 使用Alibaba Cloud SDK for Java,您需要一个阿里云账号和访问密钥(AccessKey)。 请在阿里云控制台中的AccessKey管理页面上创建和查看您的AccessKey。
  • 确保您已经安装了Alibaba Cloud SDK for Java,准确的SDK版本号,请参见 阿里云开发工具包(SDK)
    <dependencies>
        <!-- https://mvnrepository.com/artifact/com.aliyun/aliyun-java-sdk-core -->
        <dependency>
            <groupId>com.aliyun</groupId>
            <artifactId>aliyun-java-sdk-core</artifactId>
            <version>4.4.3</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/com.aliyun/aliyun-java-sdk-ecs-->
        <dependency>
            <groupId>com.aliyun</groupId>
            <artifactId>aliyun-java-sdk-ecs</artifactId>
            <version>4.17.4</version>
        </dependency>
    </dependencies>

代码示例

本文操作示例主要以代码形式体现,具体代码如下:
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.ecs.model.v20140526.DescribeInstanceMonitorDataRequest;
import com.aliyuncs.ecs.model.v20140526.DescribeInstanceMonitorDataResponse;
import com.aliyuncs.ecs.model.v20140526.DescribeUserDataRequest;
import com.aliyuncs.ecs.model.v20140526.DescribeUserDataResponse;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.profile.DefaultProfile;
import com.google.gson.Gson;
import java.util.List;

/**
 * DescribeInstanceMonitorData    查询一台ECS实例所有相关的监控信息
 * DescribeUserData    查询一台ECS实例的自定义数据
 */
public class Demo{

    // 待查询的实例 ID
    private static String instanceId = "i-bp13p7vlcb1uihfvd87p";
    // 获取数据的起始时间点。按照 ISO8601 表示,并需要使用 UTC 时间,格式为:YYYY-MM-DDThh:mm:ssZ。如果指定的秒(ss)不是 00,则自动换算为下一分钟。
    private static String startTime;
    // 获取数据的结束时间点。按照 ISO8601 标准表示,并需要使用 UTC 时间,格式为:YYYY-MM-DDThh:mm:ssZ。 如果指定的秒(ss)不是 00,则自动换算为下一分钟。
    private static String endTime;

    public static void main(String[] args) throws ClientException {

        IAcsClient client = Initialization();
        // 查询一台 ECS 实例所有相关的监控信息
        List<DescribeInstanceMonitorDataResponse.InstanceMonitorData> monitorDataList = DescribeInstanceMonitorData(client);
        // 处理业务返回的监控信息数据。(请根据您的实际业务需求来进行处理)
        System.out.println(new Gson().toJson(monitorDataList));
        // 查询一台ECS实例的自定义数据
        String userData = DescribeUserData(client);
        // 处理业务返回的实例自定义数据。(请根据您的实际业务需求来进行处理)
        System.out.println(userData);

    }

    /**
     * DescribeUserData    查询一台ECS实例的自定义数据
     */
    private static String DescribeUserData(IAcsClient client) {
        DescribeUserDataRequest request = new DescribeUserDataRequest();
        request.setInstanceId(instanceId);
        try {
            DescribeUserDataResponse response = client.getAcsResponse(request);
            System.out.println("--------------------查询ECS自定义数据--------------------");
            return response.getUserData();
        } catch (ClientException e) {
            System.out.println("ErrCode:" + e.getErrCode());
            System.out.println("ErrMsg:" + e.getErrMsg());
            System.out.println("RequestId:" + e.getRequestId());
            return null;
        }
    }

    /**
     * DescribeInstanceMonitorData    查询一台 ECS 实例所有相关的监控信息
     */
    private static List<DescribeInstanceMonitorDataResponse.InstanceMonitorData> DescribeInstanceMonitorData(IAcsClient client) {
        DescribeInstanceMonitorDataRequest request = new DescribeInstanceMonitorDataRequest();
        // 待查询的实例 ID
        request.setInstanceId(instanceId);
        // 获取数据的起始时间点。按照 ISO8601 标准表示,并需要使用 UTC 时间,格式为:YYYY-MM-DDThh:mm:ssZ。如果指定的秒(ss)不是 00,则自动换算为下一分钟。
        request.setStartTime(InstanceMonitorData.startTime);
        // 获取数据的结束时间点。按照 ISO8601 标准表示,并需要使用 UTC 时间,格式为:YYYY-MM-DDThh:mm:ssZ。 如果指定的秒(ss)不是 00,则自动换算为下一分钟。
        request.setEndTime(endTime);
        try {
            DescribeInstanceMonitorDataResponse response = client.getAcsResponse(request);
            System.out.println("--------------------查询ECS所有相关的监控信息--------------------");
            return response.getMonitorData();
        } catch (ClientException e) {
            System.out.println("ErrCode:" + e.getErrCode());
            System.out.println("ErrMsg:" + e.getErrMsg());
            System.out.println("RequestId:" + e.getRequestId());
            return null;
        }
    }

    /**
     * Initialization  初始化公共请求参数
     */
    private static IAcsClient Initialization() {
        // 初始化请求参数
        DefaultProfile profile = DefaultProfile.getProfile(
                "<your-region-id>", // 您的可用区ID
                "<your-access-key-id>", // 您的AccessKey ID
                "<your-access-key-secret>"); // 您的AccessKey Secret
        return new DefaultAcsClient(profile);
    }
}

执行结果

正确的返回结果类似如下:
--------------------查询ECS所有相关的监控信息--------------------
{
    "requestId": "8B2933EB-2E12-41D8-A5A2-A6DC23424040", 
    "monitorData": [
        {
            "instanceId": "i-bp13p7vlcb1uihfvd87p", 
            "cPU": 8, 
            "intranetRX": 1192, 
            "intranetTX": 720, 
            "intranetBandwidth": 24, 
            "internetRX": 0, 
            "internetTX": 0, 
            "internetBandwidth": 0, 
            "timeStamp": "2019-09-21T23:01:00Z"
        }
    ]
}
--------------------查询ECS自定义数据--------------------
IyEvYmluL3No-UserData