Ruby v2以降が必要です。
zabbixユーザからみて、Ruby v2が利用できないと監視に失敗します。
rbenvで切り替えていて見事にはまりました。
Gemfileに記述するか、下記コマンドでsdkをインストールします。
gem install aws-sdk-core
下記をcloud_watchとして保存します。
zabbixから外部スクリプトとして呼び出すため、/usr/lib/zabbix/externalscripts/配下に保存します。
このパスはインストール方法によってパスが変わっている場合があります。
#!/usr/local/bin/ruby
require 'rubygems'
require 'aws-sdk-core'
require 'optparse'
params = ARGV.getopts(
"",
"region:",
"namespace:",
"metric:",
"dimension_name:",
"dimension_value:",
"statistics:",
"unit:"
)
cw = Aws::CloudWatch::Client.new(
:region => params['region'],
:access_key_id => '<KEY>',
:secret_access_key => '<KEY>'
)
resp = cw.get_metric_statistics(
namespace: params['namespace'],
metric_name: params['metric'],
dimensions: [
{
name: params['dimension_name'],
value: params['dimension_value'],
},
],
start_time: Time.now - 300,
end_time: Time.now,
period: 300,
statistics: [params['statistics']],
unit: params['unit'],
)
data = resp[:datapoints]
last_stats = data.sort_by{ | stat | stat[:timestamp]}.last
if last_stats.nil? then
exit
else
p last_stats[params['statistics'].downcase.to_sym].to_i
end
使い方はコマンドラインからだと下記のようになります。
./cloud_watch --region ap-northeast-1 --namespace AWS/ELB --metric RequestCount --dimension_name LoadBalancerName --dimension_value ELBNAME --statistics Sum --unit Count
namespaceや、dimension_nameはAWSのドキュメントを参照してください。
zabbixで利用する場合には、下記のような形で設定します。
キーには、
cloud_watch[“–region”,”ap-northeast-1″,”–namespace”,”AWS/ELB”,”–metric”,”RequestCount”,”–dimension_name”,”LoadBalancerName”,”–dimension_value”,”{HOST.NAME}”,”–statistics”,”Sum”,”–unit”,”Count”]
等として指定します。