4

我试图使用CloudWatch的API从EC2实例获取CPU统计:使用AWS Java SDK获取CloudWatch指标?

http://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/cloudwatch/AmazonCloudWatchClient.html

我有以下的代码,但它返回一个空的结果,即使实例ID和AWS访问和密钥是正确的。

我可以在CloudWatch UI上看到该实例的CPU实用程序,但似乎无法看到它在下面?

我正在使用AWS SDK 1.9.0版本。

任何帮助非常感谢。

import java.util.Date; 

import com.amazonaws.auth.BasicAWSCredentials; 
import com.amazonaws.services.cloudwatch.AmazonCloudWatchClient; 
import com.amazonaws.services.cloudwatch.model.Datapoint; 
import com.amazonaws.services.cloudwatch.model.Dimension; 
import com.amazonaws.services.cloudwatch.model.GetMetricStatisticsRequest; 
import com.amazonaws.services.cloudwatch.model.GetMetricStatisticsResult; 

public class AmazonCloudWatchFetchCpuUtilTest { 

    public static void main(String[] args) { 
     final String awsAccessKey = ...; 
     final String awsSecretKey = ...; 
     final String instanceId = ...; 

     final AmazonCloudWatchClient client = client(awsAccessKey, awsSecretKey); 
     final GetMetricStatisticsRequest request = request(instanceId); 
     final GetMetricStatisticsResult result = result(client, request); 
     toStdOut(result, instanceId); 
    } 

    private static AmazonCloudWatchClient client(final String awsAccessKey, final String awsSecretKey) { 
     return new AmazonCloudWatchClient(new BasicAWSCredentials(awsAccessKey, awsSecretKey)); 
    } 

    private static GetMetricStatisticsRequest request(final String instanceId) { 
     final long twentyFourHrs = 1000 * 60 * 60 * 24; 
     final int oneHour = 60 * 60; 
     return new GetMetricStatisticsRequest() 
      .withStartTime(new Date(new Date().getTime()- twentyFourHrs)) 
      .withNamespace("AWS/EC2") 
      .withPeriod(oneHour) 
      .withDimensions(new Dimension().withName("InstanceId").withValue(instanceId)) 
      .withMetricName("CPUUtilization") 
      .withStatistics("Average", "Maximum") 
      .withEndTime(new Date()); 
    } 

    private static GetMetricStatisticsResult result(
      final AmazonCloudWatchClient client, final GetMetricStatisticsRequest request) { 
     return client.getMetricStatistics(request); 
    } 

    private static void toStdOut(final GetMetricStatisticsResult result, final String instanceId) { 
     System.out.println(result); // outputs empty result: {Label: CPUUtilization,Datapoints: []} 
     for (final Datapoint dataPoint : result.getDatapoints()) { 
      System.out.printf("%s instance's average CPU utilization : %s%n", instanceId, dataPoint.getAverage());  
      System.out.printf("%s instance's max CPU utilization : %s%n", instanceId, dataPoint.getMaximum()); 
     } 
    } 
} 

回答

2

我错过了客户端上的端点设置。现在工作。

改变了这个:

private static AmazonCloudWatchClient client(final String awsAccessKey, final String awsSecretKey) { 
     return new AmazonCloudWatchClient(new BasicAWSCredentials(awsAccessKey, awsSecretKey)); 
    } 

这样:

​​
+0

我想和你一样写的,但得到下面的异常:异常在线程 “主要” com.amazonaws.AmazonServiceException:状态代码: 405,AWS服务:AmazonCloudWatch,AWS请求ID:null,AWS错误代码:null,AWS错误消息:null – Anand 2015-03-30 11:43:43

相关问题