使用AWS Java SDK获取CloudWatch指标? [英] Fetching CloudWatch metrics using the AWS Java SDK?

查看:444
本文介绍了使用AWS Java SDK获取CloudWatch指标?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用CloudWatch API从EC2实例中获取CPU统计信息:

I'm trying to fetch CPU stats from an EC2 instance using the CloudWatch API:

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

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

I have the following code but its returning an empty result, even though the instance Id, and AWS access and secret keys are correct.

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

I can see the CPU util for the instance on the CloudWatch UI, but can't seem to get it below?

我正在使用1.9.0版的AWS开发工具包。

I'm using version 1.9.0 of the AWS SDK.

任何帮助都值得赞赏。

Any help much appreciated.

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());
        }
    }
}


推荐答案

我在客户端上缺少端点设置。

I was missing the endpoint setting on the client. Working now.

已更改:

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

为此:

    private static AmazonCloudWatchClient client(final String awsAccessKey, final String awsSecretKey) {
        final AmazonCloudWatchClient client = new AmazonCloudWatchClient(new BasicAWSCredentials(awsAccessKey, awsSecretKey));
        client.setEndpoint("http://monitoring.eu-west-1.amazonaws.com");
        return client;
    }

这篇关于使用AWS Java SDK获取CloudWatch指标?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆