我第一次在java中使用aws api获取ec2-instance的云监视统计信息。我搜索了这个,我找到了一些代码片段。这是
AmazonCloudWatchClient cloudWatch = new AmazonCloudWatchClient(
new BasicAWSCredentials(AccessKey, SecretKey));
cloudWatch.setEndpoint("ec2-<my-static-ip>.compute-1.amazonaws.com");
long offsetInMilliseconds = 1000 * 60 * 60 * 24;
Dimension instanceDimension = new Dimension();
instanceDimension.setName("Instanceid");
instanceDimension.setValue(InstanceId);
GetMetricStatisticsRequest request = new GetMetricStatisticsRequest()
.withStartTime(
new Date(new Date().getTime()
- offsetInMilliseconds))
.withNamespace("AWS/EC2")
.withPeriod(60 * 60)
.withDimensions(
new Dimension().withName("InstanceId").withValue(
InstanceId))
.withMetricName("CPUUtilization")
.withStatistics("Average", "Maximum")
.withEndTime(new Date());
GetMetricStatisticsResult getMetricStatisticsResult = cloudWatch
.getMetricStatistics(request);
double avgCPUUtilization = 0;
List dataPoint = getMetricStatisticsResult.getDatapoints();
for (Object aDataPoint : dataPoint) {
Datapoint dp = (Datapoint) aDataPoint;
avgCPUUtilization = dp.getAverage();
System.out.println(InstanceId
+ " instance's average CPU utilization : "
+ dp.getAverage());
}
} catch (AmazonServiceException ase) {
System.out
.println("Caught an AmazonServiceException, which means the request was made "
+ "to Amazon EC2, but was rejected with an error response for some reason.");
System.out.println("Error Message: " + ase.getMessage());
System.out.println("HTTP Status Code: " + ase.getStatusCode());
System.out.println("AWS Error Code: " + ase.getErrorCode());
System.out.println("Error Type: " + ase.getErrorType());
System.out.println("Request ID: " + ase.getRequestId());
}
所以,使用此代码我试图获取统计信息,但第一次它会抛出错误说
com.amazonaws.AmazonClientException: Unable to execute HTTP request:Connection to https://ec2-<my-static-ip>.compute-1.amazonaws.com refused
然后我认为它是发送https请求。所以我在我的实例上启用了ssl并尝试了,然后我得到了以下异常。
com.amazonaws.AmazonClientException: Unable to execute HTTP request: peer not authenticated
我在我的实例中使用OpenJDK,所以我认为这可能会导致问题。然后我删除了openjdk并安装了Oracle JDK 1.7。但仍然是同样的问题。
我的问题是,
1)我如何只发送HTTP(而不是HTTPS)请求来获取统计信息?
2)如何摆脱这个问题,以便我可以得到我的结果?
但请不要让我阅读任何文档,因为我通过网络,博客,论坛,文档等搜索搞砸了,然后我就到了这里。所以,请给我解决方案或告诉我哪里出错了。
任何人都可以帮我解决这个问题。
先谢谢你。
答案 0 :(得分:0)
得到了解决方案。
1)删除了AmazonCloudWatchClient的设置终点。
2)AWS凭证(访问密钥ID,密钥)的问题。因此,我创建了另一组凭据,并为用户提供了CloudWatchFullAccess策略。
现在它的工作方式就像Charm ......: - )
感谢。