2013-07-20 141 views
0

使用Ruby SDK for AWS/CloudWatch。我試圖簡單地獲取特定RDS實例的平均CPU利用率。Ruby AWS SDK CloudWatch

metric = AWS::CloudWatch::Metric.new('AWS/RDS', 'CPUUtilization', :dimensions => {[ :name => 'DBInstanceIdentifier'], [:value => 'my_db_instance' ] }) 
puts metric.metric_name # shows the right name 
puts metric.namespace # shows the right namespace 

stats = metric.statistics(:start_time => Time.now - 300, :statistics => ['Average']) 

最後一行失敗:

/Library/Ruby/Gems/1.8/gems/aws-sdk-1.12.0/lib/aws/core/option_grammar.rb:337:in `validate': expected hash value for member 1 of option dimensions (AWS::Core::OptionGrammar::FormatError) 

我也試過:

stats = metric.statistics(:options => {[:start_time => Time.now - 300], [:statistics => ['Average']]}) 

,並得到了同樣的錯誤。

stats = metric.statistics({[:start_time => Time.now - 300], [:statistics => ['Average']]}) 

給出:

/Library/Ruby/Gems/1.8/gems/aws-sdk-1.12.0/lib/aws/core/option_grammar.rb:588:in `validate': unexpected option start_timeSat Jul 20 11:27:14 -0400 2013 (ArgumentError) 

繼AWS文檔,我能夠從代碼中找回數據是這樣的:

metric = CloudWatch::Metric.new('AWS/RDS', 'CPUUtilization') 

stats = metric.statistics(:start_time => Time.now - 3600, :end_time => Time.now, :statistics => ['Average']) 

stats.label #=> 'some-label' 
stats.each do |datapoint| 
    puts datapoint 
end 

但我不明白如何縮小這個到我感興趣的特定實例,因爲數據點哈希沒有說明它來自哪個實例。

我對Ruby很新,但使用SDK的EC2,ELB,AutoScaling部分已經取得成功。 CloudWatch正在困擾着我。

我很欣賞任何人都可以提供的幫助。

彼得

回答

3

你:尺寸選項哈希需要這樣被格式化:

metric = AWS::CloudWatch::Metric.new(
    'AWS/RDS', 
    'CPUUtilization', 
    :dimensions => [{ :name => 'DBInstanceIdentifier', :value => 'my_db_instance' }] 
) 

亞馬遜的SDK doc試圖解釋這是「一個哈希數組」。在Ruby中非常罕見,很難弄清楚,至少對我來說。

+1

感謝kino1。花了我一段時間來測試,但你的解決方案讓我過了一會兒。我還注意到它可以在沒有大括號的情況下工作: :dimensions => [:name =>'DBInstanceIdentifier',:value =>'my_db_instance'] – Peter

+1

沒有大括號,它更幹,很棒。我只是想知道Ruby現在實際構造的是什麼......我決定不要編輯帖子來反映@peter評論,但是因爲我認爲對於2維尺寸,您需要再次使用大括號,即'[{:name =>'dim1 ',:value =>'val1'},{:name =>'dim2',:value =>'val2'}]' – kino1

0

對於aws-sdk

cloudwatch_metric = Aws::CloudWatch::Metric.new(
    'AWS/RDS', 
    'CPUUtilization' 
) 

2版本,以獲得統計數據,

metrics = cloudwatch_metric.get_statistics({ 
    dimensions: [ 
    { 
     name: "DBInstanceIdentifier", # required 
     value: "my_db_instance", # required 
    }, 
    ], 
    start_time: Time.now - 30000, # required 
    end_time: Time.now, # required 
    period: 1, # required 
    statistics: ["Average"], # accepts SampleCount, Average, Sum, Minimum, Maximum 
    # unit: "Seconds", # accepts Seconds, Microseconds, Milliseconds, Bytes, Kilobytes, Megabytes, Gigabytes, Terabytes, Bits, Kilobits, Megabits, Gigabits, Terabits, Percent, Count, Bytes/Second, Kilobytes/Second, Megabytes/Second, Gigabytes/Second, Terabytes/Second, Bits/Second, Kilobits/Second, Megabits/Second, Gigabits/Second, Terabits/Second, Count/Second, None 
})