0

假设我的LoadBalancer名字是 app/test123/123abc,其中123abc是唯一 ID。这是负载均衡器 ARN 的结尾。

我目前正在通过以下方式检索 Cloudwatch 统计信息:

GetMetricStatisticsRequest oRequest = new GetMetricStatisticsRequest()
            .withStartTime(startTime)
            .withNamespace("AWS/ApplicationELB")
            .withPeriod(oneHour)
            .withDimensions(new Dimension().withName("LoadBalancer").withValue("app/test123/123abc"))
            .withMetricName("HTTPCode_Backend_2XX")
            .withStatistics("Sum")
            .withEndTime(endTime);

我真正需要的是一个contains规则......因为我想根据我的负载均衡器查找我的负载均衡器test123,因此不包括 URL 的唯一部分。

这可能吗?

就像是....

GetMetricStatisticsRequest oRequest = new GetMetricStatisticsRequest()
            .withStartTime(startTime)
            .withNamespace("AWS/ApplicationELB")
            .withPeriod(oneHour)
            .withDimensions(new Dimension().withName("LoadBalancer").withValue.contains("test123"))
            .withMetricName("HTTPCode_Backend_2XX")
            .withStatistics("Sum")
            .withEndTime(endTime);
4

2 回答 2

0

我认为没有直接的方法可以做到这一点。我能想到的一种解决方法:

  • 使用DescribeLoadBalancers API 获取您账户中所有 ELB 的列表。
    • 由于响应是分页的,因此您可能需要根据您拥有的 ELB 数量进行多次调用。
    • 可以在此处找到相应的 CLI 命令。
  • 从返回的LoadBalancerLoadBalancerArn中,使用该字段过滤掉所需的。您可以使用正则表达式或简单的字符串操作来实现这一点。
  • GetMetricStatisticsRequest按照您的问题中最初提到的方式致电。
于 2017-04-05T12:13:12.603 回答
0

解决方案:搜索listMetrics并找到您需要的,然后将其用作.withDimensions(oDim)过滤器。

List<Metric> oMetricList = new ArrayList<Metric>();
try
{
    oMetricList = client.listMetrics().getMetrics();
}
catch (Exception e)
{
    System.out.println(e.getMessage());
    return null;
}

for (Metric oMetric : oMetricList)
{
    for (Dimension oDim : oMetric.getDimensions())
    {
        if (oDim.getName().contains(dimensionName) && oDimsgetValue().contains(lbName))
        {
           return oDim; 
        }
    }
}
于 2017-04-05T12:52:06.257 回答