AWS API与Cloudwatch的集成返回空白数据点

时间:2019-06-24 15:07:00

标签: java amazon-s3 aws-sdk amazon-cloudwatch aws-java-sdk-2.x

我目前正在尝试创建一个Java应用程序,该应用程序可以通过AWS Java SDK调用和引用Amazon AWS API。我已经能够直接调用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 Client

 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中又变空白了吗?

1 个答案:

答案 0 :(得分: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;
    }