实时数据导出API由2021-11-01版升级到2019-01-01版。本文为您介绍实时数据导出API的升级原因、升级说明和升级差异。
升级原因
实时数据导出API由2021-11-01版升级到2019-01-01版的原因如下:
- 直接使用2019-01-01版SDK包即可,无需另外引入2021-11-01版SDK包,简化操作。 
- API设计更加规范,数据容量不受限且稳定性高。 
- 支持更多接入点(Endpoint),目前已支持上海、杭州、深圳、新加坡和上海金融云。2021-11-01版仅支持上海。 
- 支持资源目录等新特性。 
升级说明
实时数据导出API由2021-11-01版升级到2019-01-01版的主要变更如下:
- SDK包 
- 接入地址(Endpoint) 
- API名称由BatchGet修改为BatchExport。 
- 请求参数中的 - Matcher结构变更,返回数据变更。
升级差异
SDK包
2019-01-01版
<dependency>
    <groupId>com.aliyun</groupId>
    <artifactId>cms20190101</artifactId>
    <version><SDK包的最新版本></version>
</dependency>2021-11-01版
<dependency>
  	<groupId>com.aliyun</groupId>
  	<artifactId>cms_export20211101</artifactId>
  	<version><SDK包的最新版本></version>
</dependency>请您获取云监控SDK包的最新版本,具体操作如下:
- 单击Cursor。 
- 在OpenAPI页面的SDK示例页签,将鼠标移至SDK依赖信息。 - 在SDK依赖信息对话框,您可以查看SDK包名称和SDK最新版本。  
Cursor代码示例
2019-01-01版
private static Config config = null;
private static Config getConfig(Config config){
  config = new Config();
  config.setAccessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"));
  config.setAccessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
  config.setEndpoint("metrics.cn-hangzhou.aliyuncs.com");
  return config;
}
private static String getCursor() throws Exception {
    Client client = new Client(getConfig(config));
    CursorRequest cursorRequest = new CursorRequest();
    cursorRequest.setNamespace("acs_ecs_dashboard");
    cursorRequest.setMetric("CPUUtilization");
    cursorRequest.setPeriod(60);
    cursorRequest.setStartTime(System.currentTimeMillis() - 60 * 60 * 1000);
    cursorRequest.setEndTime(Long.MAX_VALUE);
  	List<Matcher> matchers = new ArrayList<>();
  	Matcher matcher = new Matcher();
  	matcher.setLabel("userId");
    matcher.setValue("173651113438****");
  	matcher.setOperator("EQUALS");
  	matchers.add(matcher);
    cursorRequest.setMatchers(matchers);
    CursorResponse cursorResponse = client.cursor(cursorRequest);
    if (cursorResponse == null || cursorResponse.getBody() == null || cursorResponse.getBody().getCursor() == null) {
      return null;
    }
    return cursorResponse.getBody().getCursor();
}2021-11-01版
private static Config config = null;
private static Config getConfig(Config config){
  config = new Config();
  config.setAccessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"));
  config.setAccessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
  config.setRegionId("cn-shanghai");
  config.setEndpoint("cms-export.cn-shanghai.aliyuncs.com");
  return config;
}
private static String getCursor() throws Exception {
    Client client = new Client(getConfig(config));
    CursorRequest cursorRequest = new CursorRequest();
    cursorRequest.setNamespace("acs_ecs_dashboard");
    cursorRequest.setMetric("CPUUtilization");
    cursorRequest.setPeriod(60);
    cursorRequest.setStartTime(System.currentTimeMillis() - 60 * 60 * 1000);
    cursorRequest.setEndTime(Long.MAX_VALUE);
    CursorRequest.CursorRequestMatchers matcher = new CursorRequest.CursorRequestMatchers();
    matcher.setLabel("userId").setOperator("EQUALS").setValue("173651113438****");
    List<CursorRequest.CursorRequestMatchers> chain = new ArrayList<>();
    chain.add(matcher);
    cursorRequest.setMatchers(chain);
    CursorResponse cursorResponse = client.cursor(cursorRequest);
    if (cursorResponse == null || cursorResponse.getBody() == null || cursorResponse.getBody().getData() == null || cursorResponse.getBody().getData().cursor == null) {
      return null;
    }
    return cursorResponse.getBody().getData().cursor;
}差异说明
筛选条件的类由CursorRequest.CursorRequestMatchers修改为Matcher,内部参数无变化。
BatchExport和BatchExport代码示例
2019-01-01版BatchExport
private static String BatchExport(String cursor) throws Exception {
    Client client = new Client(getConfig(config));
    BatchExportRequest request = new BatchExportRequest();
    request.setNamespace("acs_ecs_dashboard");
    request.setMetric("CPUUtilization");
    request.setCursor(cursor);
    request.setLength(1000);
    BatchExportResponse response = client.batchExport(request);
    if (response == null || response.getBody() == null) {
      return null;
    }else {
      String json = JSON.toJSONString(response.getBody());
      return json;
    }
}2021-11-01版BatchGet
private static String BatchGet(String cursor) throws Exception {
    Client client = new Client(getConfig(config));
    BatchGetRequest batchGetRequest = new BatchGetRequest();
    batchGetRequest.setNamespace("acs_ecs_dashboard");
    batchGetRequest.setMetric("CPUUtilization");
    batchGetRequest.setCursor(cursor);
    batchGetRequest.setLength(1000);
    BatchGetResponse batchGetResponse = client.batchGet(batchGetRequest);
    if (batchGetResponse == null || batchGetResponse.getBody() == null
        || batchGetResponse.getBody().getData() == null) {
      return null;
    }else {
      String json = JSON.toJSONString(batchGetResponse.getBody().getData().records);
      return json;
    }
}差异说明
- API名称由BatchGet修改为BatchExport。 
- BatchExport的Response的数据格式及字段变更,您获取数据时需要进行修改。 - response.getBody()获取数据格式示例如下,请您根据所需查询目标参。- { "cursor":"***", //返回下次调用的cursor。 "code":200, //返回本地调用的结果code。 "length":1 //数据长度。 "dataResults": // 返回的监控指标数据列表。 [{ "associated":{}, "dimensions":[{"label":"userId","value":"***"},{"label":"instanceId","value":"***"}], "measurements":{"Maximum":***,"Average":***}, "metric":"***", "namespace":"***", "period":60, "timestamp":1687760100000 }] "hasNext":true //是否需要继续查询。 "success":true //操作是否成功。 }{ "cursor":"***", //返回下次调用的cursor。 "code":200, //返回本地调用的结果code。 "length":1 //数据长度。 "dataResults": // 返回的监控指标数据列表。 [{ "associated":{}, "dimensions":[{"label":"userId","value":"***"},{"label":"instanceId","value":"***"}], "measurements":{"Maximum":***,"Average":***}, "metric":"***", "namespace":"***", "period":60, "timestamp":1687760100000 }] "hasNext":true //是否需要继续查询。 "success":true //操作是否成功。 }
该文章对您有帮助吗?