0

假設我的LoadBalancer名稱爲app/test123/123abc,其中123abc是唯一ID。這是負載均衡器ARN的結束。AWS CloudWatch維度值包含

我目前做這個檢索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); 

回答

0

我不認爲有這樣做的直接方式。我可以想到的一種解決方法:

  • 使用DescribeLoadBalancers API獲取您帳戶中所有ELB的列表。
    • 由於響應是分頁的,因此您可能必須進行多個呼叫,具體取決於您擁有多少個ELB。
    • 相應的CLI命令可以找到here
  • 從返回的LoadBalancer s中,使用LoadBalancerArn字段過濾掉所需的一個。你可以使用正則表達式或簡單的字符串操作來實現這一點。
  • 請致電GetMetricStatisticsRequest最初在您的問題中提到。
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; 
     } 
    } 
}