AWS Custom CloudWatch指标 - 按Auto-Scaling组聚合

时间:2012-03-30 20:24:25

标签: java amazon-web-services amazon-ec2 amazon-cloudwatch

我正在尝试使用Java SDK设置一些自定义AWS CloudWatch指标。

我似乎无法在描述如何获取某些数据的文档中找到任何内容,也不需要包含哪些数据。

MetricDatum datum = new MetricDatum()
    .withDimensions(
        new Dimension()
            .withName("InstanceType").withValue(/* 1 */),
        new Dimension()
            .withName("InstanceId").withValue(/* 2 */)
        /* 3 */
    .withMetricName("My metric").withTimestamp(new Date())
    .withUnit("Percent").withValue(new Double(55.0));

所以,问题(对于上面代码中的每个注释数字):

  1. 我在哪里可以使用Java AWS SDK获取数据?
  2. 我在哪里可以使用Java AWS SDK获取数据?
  3. 我需要包含哪些其他数据才能确保我可以通过自动缩放组进行汇总? (按安全组汇总也没问题)
  4. 对于#1,我已经看到我可以对http://169.254.169.254/latest/meta-data/instance-id进行常规HTTP调用以获取instance-id,但我希望通过AWS SDK完成所有这些操作,如果有方法的话可以这样做。

3 个答案:

答案 0 :(得分:9)

我将问题发布到亚马逊支持团队。

EC2 documentation提供了一个URL列表,可以调用这些URL来获取一堆元数据,包括InstanceType(问题1),InstanceId(问题2)和安全组(问题3)

可以使用AWS SDK for Java获取自动缩放组,获取所有自动缩放组的列表,然后遍历该列表,直到找到具有您自己的instanceId的实例(已检索到该实例)使用上面列出的URL):

String instanceId = "Your-InstanceId";
AmazonAutoScalingClient amazonAutoScalingClient = new AmazonAutoScalingClient(new BasicAWSCredentials(accessKey, secretKey));
DescribeAutoScalingGroupsResult describeAutoScalingGroupsResult = amazonAutoScalingClient.describeAutoScalingGroups();
for(AutoScalingGroup autoScalingGroup : describeAutoScalingGroupsResult.getAutoScalingGroups()) {
    for(Instance instance : autoScalingGroup.getInstances()) {
        if(instance.getInstanceId().equals(instanceId)) {
            return autoScalingGroup.getAutoScalingGroupName();
        }
    }
}

答案 1 :(得分:2)

它不在javadocs中,但有一个名为EC2MetadataUtils的方便实用程序类,它将为您提供元数据信息,例如InstanceType(1)和InstanceId(2)。

至于获取ASG名称,AWS documents

  

在Auto Scaling组中启动实例时,Auto Scaling会使用aws键添加标签到实例:autoscaling:groupName和Auto Scaling组名称的值

因此,只需获取实例的标记

即可保存一点循环
String instanceId = EC2MetadataUtils.getInstanceId();

String asgName = null;
List<TagDescription> tagDescriptions = new AmazonEC2Client().describeTags(
        new DescribeTagsRequest().withFilters(
            new Filter().withName("resource-id").withValues(instanceId)
        )
).getTags();
for (TagDescription tagDescription : tagDescriptions) {
    if ("aws:autoscaling:groupName".equals(tagDescription.getKey())) {
        asgName = tagDescription.getValue();
        break;
    }
}

用于确保您可以按Auto Scaling组名称聚合的维度名称为AutoScalingGroupName(3)

new Dimension().withName("AutoScalingGroupName").withValue(asgName)

答案 2 :(得分:-1)

您可以按图片ID汇总:

curl http://169.254.169.254/latest/meta-data/ami-id

通常,自动缩放组在专用图像上运行,因此这种方法应该有效。