0

我目前正在尝试创建一个可以通过 AWS Java SDK 调用和引用 Amazon AWS API 的 Java 应用程序。我已经能够直接调用 S3 和 EC2 等服务,但是当我尝试从 Cloudwatch 提取数据时,我无法获取任何数据点。

我尝试过调整不同的变量(维度、调整时间变量),并尝试通过 CLI 提取数据。当我通过 CLI 请求数据时,我能够获取数据点,但 Java 应用程序没有获取相同的数据。这是我的 CLI 代码:

aws cloudwatch get-metric-statistics --metric-name BucketSizeBytes --namespace "AWS/S3" --start-time 2019-06-21T00:00:00Z --end-time 2019-06-22T00:00:00Z --period 3600 --statistics Average --unit Bytes --output json --region us-east-1 --dimensions Name=BucketName,Value=XXXXX Name=StorageType,Value=StandardStorage

这是我在 Java 端使用的。变量命名空间等于字符串“AWS/S3”,变量区域设置为 Region.US_EAST_1

设置 CloudWatch 客户端

 private CloudWatchClient cwClient = CloudWatchClient.builder().region(region).build();

调用数据

public S3 individualS3BucketSize(S3 s3) {
        Instant now = Instant.now();
        Dimension dimensions = Dimension.builder().name("BucketName").value("XXXXX").name("StorageType").value("StandardStorage").build();

        GetMetricStatisticsRequest request = GetMetricStatisticsRequest.builder().namespace(namespace).metricName("BucketSizeBytes")
            .statistics(Statistic.AVERAGE)
            .startTime(now.minus(Duration.ofDays(1))).endTime(now).period(3600)
            .dimensions(dimensions)
            .build();

        GetMetricStatisticsResponse response;

        response = cwClient.getMetricStatistics(request);
        System.out.println(response.toString());
}

当调用该方法并运行 print 方法时,我得到:

GetMetricStatisticsResponse(Label=BucketSizeBytes, Datapoints=[])

关于为什么它在 Java 应用程序中返回空白而不是 CLI 的任何想法?

4

1 回答 1

0

上述代码的问题在于时间片。由于此特定指标的报告时间,此对 Cloudwatch 的特定调用 (BucketSizeBytes) 不会返回数据,除非它处于 1d 时间窗口中。如果您进入 CloudWatch 的 Web 控制面板,除非时间范围设置为 1d,否则不会提取任何数据。

由于上述代码的开始时间和结束时间在 24 小时内,因此不会出现任何数据点。我已经修改了代码以获得轻微的可读性改进和正确的功能。

public S3 individualS3BucketSize(S3 s3) {
        Instant now = Instant.now();
        Instant earlier = now.minusSeconds(259201); //3 Days in the past in seconds
        Statistic stat = Statistic.AVERAGE;
        GetMetricStatisticsResponse response;

        Dimension dimensionsName = Dimension.builder().name("BucketName").value(XXXXX).build();
        Dimension dimensionsStorage = Dimension.builder().name("StorageType").value("StandardStorage").build();

        Collection<Dimension> dimensions = new ArrayList<>();
        dimensions.add(dimensionsName);
        dimensions.add(dimensionsStorage);

        GetMetricStatisticsRequest request = GetMetricStatisticsRequest.builder().namespace(namespace).metricName("BucketSizeBytes")
            .dimensions(dimensions)
            .startTime(earlier).endTime(now).period(3600)
            .unit("Bytes").statistics(stat).build();

        response = cwClient.getMetricStatistics(request);
        System.out.println(response.toString());
        return null;
    }
于 2019-06-24T19:03:10.033 回答