【作業ログ】
#Zabbixサーバにて以下のモジュールを導入
gem install aws-sdk-core
# aws-sdkのバージョン3ではうまく動かない模様。aws-sdk(v2)を追加でインストール
gem install aws-sdk -v "~>2"
gem list
(抜粋)
# aws-sdk (2.11.33)
# aws-sdk-core (3.19.0, 3.6.0, 2.11.33)
# aws-sdk-resources (2.11.33)
実行アカウントの設定
# ※複数のAWS認証情報を利用する場合は、profile機能を利用する
# aws hogehoge --profile ${profile}
AWS Management Console
# CloudWatch用IAMユーザ作成
ユーザ名:zabbix
AWSアクセスの種類:プログラムによるアクセス
グループ:CloudWatch(CloudWatchFullAccess)←とりあえずテストなのでこれくらいの権限で
zabbixサーバで認証情報登録
# zabbixユーザにbashを設定する
mkdir /var/lib/zabbix
cp -p /etc/skel/.bash_profile /var/lib/zabbix/
# zabbixアカウント用のアクセスキー等を配置
sudo -u zabbix aws configure
# AWS Access Key ID [None]: hogehoge
# AWS Secret Access Key [None]: fugafuga
# Default region name [None]: ap-northeast-1
# Default output format [None]:json
複数アカウントを利用できるようにプロファイルを用意しておく
vi /var/lib/zabbix/.aws/config
[profile awshoge]
output = json
region = ap-northeast-1
[default]
region = ap-northeast-1
vi /var/lib/zabbix/.aws/credentials
[awshoge]
aws_access_key_id = hogehoge
aws_secret_access_key = fugafuga
[default]
aws_access_key_id = XXXXXXXXXX
aws_secret_access_key = XXXXXXXXXXXX
zabbixから実行する cloud_watch を作成
vi /usr/lib/zabbix/externalscripts/cloud_watch
#!/usr/bin/ruby
require 'rubygems'
require 'aws-sdk'
require 'optparse'
params = ARGV.getopts(
"",
"region:",
"profile:",
"namespace:",
"metric:",
"dimension_name:",
"dimension_value:",
"statistics:",
"unit:"
)
creds = Aws::SharedCredentials.new path: '/var/lib/zabbix/.aws/credentials', profile_name: params['profile']
Aws.config[:credentials] = creds
cw = Aws::CloudWatch::Client.new(
:region => params['region'],
)
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
chmod 755 /usr/lib/zabbix/externalscripts/cloud_watch
# テスト実行
sudo -u zabbix /usr/lib/zabbix/externalscripts/cloud_watch --region ap-northeast-1 --namespace AWS/RDS --metric CPUUtilization --dimension_name DBInstanceIdentifier --dimension_value ホスト名 --statistics Average --profile awshoge
zabbixWebUIから設定
例:CPUUtilization
1.設定→テンプレート→テンプレートの作成ボタンを押下
ホスト名:RDS-awshoge
(そのほかはデフォルトのまま)にして作成
3.設定→テンプレート→「RDS-awshoge」の「アイテム 」リンクを押下
[アイテムの作成]にて
名前:RDS CPU Usage
タイプ:外部チェック
キー:cloud_watch["--metric","CPUUtilization","--dimension_name","DBInstanceIdentifier","--dimension_value","{HOST.NAME}","--statistics","Average","--namespace","AWS/RDS","--region","ap-northeast-1","--profile","awshoge"]
データ型:数値(浮動小数)
単位:%
更新間隔(秒):60
として作成
これで値が取れるようになりました。