【参考】
aws-sdk-coreを利用して、ELBやRDSをzabbixで監視する | システム運用日記
↑ほぼここの内容のコピペですが、実行インスタンスにロールに権限がついてない場合、または別AWSアカウントで稼働しているzabbixから別のAWSアカウントの持つCloudWatchを監視するために、zabbixアカウントが利用するcredentialsに複数profileを書いて利用できるよう、一部追加しました
https://qiita.com/ryo0301/items/39308a5dc457b5df59ee
https://qiita.com/kenjiskywalker/items/2c29f8f532880cb81aef
https://gist.github.com/yokota-shinsuke/7350559
https://qiita.com/bakira/items/3a4876cbb39f9a7ec3b8
【作業ログ】
#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
として作成
※
20240818追記
-
- dimension_name","DBInstanceIdentifier"
について、クラスタ名で値を取りたい時は
DBClusterIdentifier
に読み替えてください
これで値が取れるようになりました。