【问题标题】:AWS Custom CloudWatch metrics - Aggregate by Auto-Scaling groupAWS 自定义 CloudWatch 指标 - 按 Auto-Scaling 组聚合
【发布时间】:2012-04-14 13:13:49
【问题描述】:

我正在尝试使用 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 开发工具包将数据放在此处?
  2. 我在哪里可以使用 Java AWS 开发工具包将数据放在此处?
  3. 我还需要包含哪些其他数据以确保我可以通过自动缩放组进行聚合? (按安全组聚合也可以)

对于 #1,我已经看到我可以对 http://169.254.169.254/latest/meta-data/instance-id 进行常规 HTTP 调用以获取实例 ID,但如果有可用的方法,我希望通过 AWS 开发工具包完成这一切这样做。

【问题讨论】:

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


    【解决方案1】:

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

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

    可以使用AWS SDK for Java 获取自动扩展组,方法是获取所有自动扩展组的列表,然后遍历该列表,直到找到具有您自己的 instanceId 的实例(使用上面列出的网址):

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

    【讨论】:

      【解决方案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)
      

      【讨论】:

        【解决方案3】:

        尝试使用 AWS Java 开发工具包 1.10.17 版实现同样的事情,@Tinclon 在接受的答案中提供的解决方案仅对 Auto Scaling 组返回 null。但是,以下 sn-p 确实为我正确返回了自动缩放组。

            String getAutoscalingGroup(final String instanceId) {
            final DescribeAutoScalingInstancesRequest describeRequest = new DescribeAutoScalingInstancesRequest().withInstanceIds(Collections.singleton(instanceId));
            final DescribeAutoScalingInstancesResult result = autoScalingClient.describeAutoScalingInstances(describeRequest);
        
            for (AutoScalingInstanceDetails details : result.getAutoScalingInstances()) {
                if (StringUtils.equals(instanceId, details.getInstanceId())) {
                    return details.getAutoScalingGroupName();
                }
            }
        
            return null;
        }
        

        我没有尝试使用其他版本的 SDK,但 functionality is equivalent 具有(截至今天)最新版本的 AWS 命令​​行客户端中的功能

        【讨论】:

          【解决方案4】:

          可以按图片id聚合:

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

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

          【讨论】:

            猜你喜欢
            • 2014-10-14
            • 1970-01-01
            • 1970-01-01
            • 2018-03-25
            • 2018-07-27
            • 2017-04-23
            • 2020-10-05
            • 2017-07-24
            • 2017-07-13
            相关资源
            最近更新 更多