2013-07-20 9 views
0

Использование Ruby SDK для AWS/CloudWatch. Я пытаюсь просто получить среднее использование ЦП конкретного экземпляра RDS.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 

Но я не вижу, как сузить этот к конкретному экземпляру, который меня интересует, поскольку хеш datapoint не говорит, в каком экземпляре он находится.

Я довольно новичок в Ruby, но добился успеха с помощью EC2, ELB, AutoScaling частей SDK. 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

Для версии 2 aws-sdk

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

Чтобы получить статистику,

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