我目前正在尝试创建一个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中又变空白了吗?
答案 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;
}