1

我在使用AmazonCloudWatch獲取CPU利用率時遇到了一些麻煩。當我嘗試使用AmazonCloudWatch.GetMetricStatistics(),我得到這樣一個異常消息AWS:從AmazonCloudWatch.GetMetricStatistics()獲取400錯誤的請求錯誤

Exception of type 'Amazon.CloudWatch.AmazonCloudWatchException' was thrown.

而本作的內部異常

{"The remote server returned an error: (400) Bad Request."}

這裏是我的代碼m使用撥打電話:

public static String getCPUStats(String Endpoint, String InstanceID) 
    { 
     try 
     { 
      AmazonCloudWatchConfig cloudConfig = new AmazonCloudWatchConfig(); 
      cloudConfig.ServiceURL = Endpoint; 

      string AWSAccessKey = Sql.ToString(appConfig["AWSAccessKey"]); 
      string AWSSecretKey = Sql.ToString(appConfig["AWSSecretKey"]); 

      AmazonCloudWatch client = AWSClientFactory.CreateAmazonCloudWatchClient(AWSAccessKey, AWSSecretKey, cloudConfig); 

      GetMetricStatisticsRequest request = new GetMetricStatisticsRequest(); 
      request.Dimensions.Add(new Dimension { Name = "InstanceId", Value = InstanceID }); 
      request.StartTime = DateTime.UtcNow.AddMinutes(-5); 
      request.EndTime = DateTime.UtcNow; 
      request.Namespace = "AWS/EC2"; 
      request.Statistics.Add("Maximum"); 
      request.Statistics.Add("Average"); 
      request.MetricName = "CPUUtilization"; 
      request.Period = 60; 

      GetMetricStatisticsResponse r = client.GetMetricStatistics(request); 

      if (r.GetMetricStatisticsResult.Datapoints.Count > 0) 
      { 
       Datapoint dataPoint = r.GetMetricStatisticsResult.Datapoints[0]; 
       return "CPU maximum load: " + dataPoint.Maximum; 

      } 

      return "No data available."; 
     } 
     catch (Exception ex) 
     { 
      return ex.Message; 
     } 
    } 

一些備註 - 訪問密鑰,祕密訪問密鑰和endp oint可以很好地創建AmazonEC2Client,所以我很確定問題不在那裏。

我已經完成了很多關於文檔的搜索和編輯工作,但並沒有成功地解決這個問題。有任何想法嗎?非常感謝!

+0

部分的調試挑戰微軟Azure是, 「真正的」亞馬遜錯誤信息在AWSSDK中迷失了,並被轉化爲一個通用的.NET 400(又名:「BadRequest」)...我正在用一些DynamoDB代碼來解決同樣的問題......我認爲唯一的答案是發射提琴手,並看看答案... – Scrappydog

回答

1

不幸的是,我們沒能弄清楚這一個 - 我們最終決定,而不是使用亞馬遜網絡服務:(

+0

我開始有相同的想法。沒有從論壇或電子郵件支持獲得很大幫助。 AWS希望你付錢,然後我想我會得到幫助。我是一名嘗試測試並希望使用AWS的開發人員。 – andrebruton

0

我想你一次只能請求一個統計信息。因此,嘗試刪除或者request.Statistics.Add("Maximum");request.Statistics.Add("Average");

+0

我拿出了「平均」一個,但不幸的是,我得到了同樣的結果:( –

+0

嗯..我不是很熟悉的C#,但你可以檢查startTime格式並確認它看起來像這樣2012-06-02T10:00:00+ 08:00。如果不是將其更改爲此格式。 – Josnidhin

+0

謝謝,但我不認爲我可以這樣做,因爲startTime需要一個DateTime對象,而不是一個字符串 - 據我所知,DateTime對象不能有格式(它們只是保存所有的信息)。只有DateTime可解析的字符串可以具有這樣的格式。 (讓我知道如果我錯了,雖然) –