AWS SDK for Ruby (バージョン 3.0.1) で CloudWatch のメトリクスを取得する手順について解説します。
日常的に業務で AWS でインフラを運用管理している私としては GUI でボタンをクリックして設定していくスタイルから徐々に CUI またはプログラムでの運用管理に移行したいと考えています。
まずは Ruby で試してみました。
Python で CloudWatch のメトリクスを取得する手順は以下の記事を参考にしてください。
【AWS】AWS SDK for Python (Boto3) で CloudWatch のメトリクスを取得する手順
プログラムで CloudWatch メトリクスを取得したいと思った理由
コマンドラインやプログラムで CloudWatch のメトリクスを取得したいと思った理由としては、以下の記事のように Zabbix とも連携できてよりレベルの高い運用保守ができるのではと考えたからです。
ZabbixでAWS/CloudWatchの値を取得してみた
https://dev.classmethod.jp/articles/zabbix-with-cloudwatch/
CentOS8 で AWS SDK for Ruby バージョン 3 を試す
まずは上の記事にある通りに「AWS SDK for Ruby」を試しました。
ただし、記事は古いバージョン(バージョン 2?)だったのでバージョン 3 を試しました。
CentOS8 ではデフォルトで Ruby がインストールされていない為、別途インストールが必要になります。
■OS は CentOS8.3
[root@test01 ~]# cat /etc/redhat-release |
■Ruby のインストール
※yum install ruby を実行すると Ruby 2.5 がインストールされます。
[root@test01 ~]# yum install ruby |
■Ruby のバージョン確認
[root@test01 ~]# ruby -v |
Ruby の最新バージョンが 3.0.0 なので、それに比べると古いです。
■gem のバージョン確認
[root@test01 ~]# gem –version |
■AWS SDK for Ruby のインストール
[root@test01 ~]# gem install aws-sdk |
■gem コマンドでインストールしたバージョンの確認
[root@test01 work]# gem list |
AWS SDKの動作確認
AWS SDK の動作確認をします。
■AWS SDKの動作確認
[root@test01 ~]# ruby -e “require ‘rubygems’;require ‘aws-sdk’;AWS::CloudWatch.new.client.describe_alarms”
|
エラーが出ましたが、上記構文はバージョンが古いことによるエラーなので、最新バージョン(aws-sdk 3.0.1 )の構文で記載しなおします。
■AWS SDKの動作確認(最新バージョン 3.0.1)
[root@test01 work]# sudo ruby -e “require ‘rubygems’;require ‘aws-sdk’;Aws::CloudWatch::Client.new(region: ‘eu-west-2’)” |
Ruby のプログラム
CloudWatch のメトリクスを取得する Ruby のプログラムを作成します。
EC2 インスタンスの CPUUtilization を取得する
最初に EC2 インスタンスの CPUUtilization を取得するプログラムです。
■Ruby のプログラム(バージョン 3 用)
[root@test01 ~]# vi cloudwatch01 |
■プログラムの実行結果
[root@test01 ~]# ruby cloudwatch01
~ 省略 ~
#<struct Aws::CloudWatch::Types::Datapoint timestamp=2021-02-12 04:57:00 UTC, sample_count=nil, average=0.16617489326485538, sum=nil, minimum=nil, maximum=nil, unit=”Percent”, extended_statistics={}>, #<struct Aws::CloudWatch::Types::Datapoint timestamp=2021-02-12 04:22:00 UTC, sample_count=nil, average=0.0994535519125698, sum=nil, minimum=nil, maximum=nil, unit=”Percent”, extended_statistics={}>, #<struct Aws::CloudWatch::Types::Datapoint timestamp=2021-02-12 03:47:00 UTC, sample_count=nil, average=0.1333518569973148, sum=nil, minimum=nil, maximum=nil, unit=”Percent”, extended_statistics={}>, #<struct Aws::CloudWatch::Types::Datapoint timestamp=2021-02-12 03:12:00 UTC, sample_count=nil, average=0.1011494252873566, sum=nil, minimum=nil, maximum=nil, unit=”Percent”, extended_statistics={}>, #<struct Aws::CloudWatch::Types::Datapoint timestamp=2021-02-12 02:37:00 UTC, sample_count=nil, average=0.1333880080189544, sum=nil, minimum=nil, maximum=nil, unit=”Percent”, extended_statistics={}>] |
※もし値がうまく取得できなかった場合は、時間の設定が短すぎる可能性があるので調整します。
■プログラムの実行結果
成形すると以下のようになります。
[root@test01 ~]# ruby cloudwatch01
~ 省略 ~
#<struct Aws::CloudWatch::Types::Datapoint timestamp=2021-02-12 03:17:00 UTC, sample_count=nil, average=0.1333518569973136, sum=nil, minimum=nil, maximum=nil, unit=”Percent”, extended_statistics={}>, |
■Ruby のプログラム(バージョン 3 用)(時間を短く調整)
require ‘aws-sdk’ |
■プログラムの実行結果
[root@test01 ~]# ruby cloudwatch01 |
RDS の CPUUtilization を取得する
■RDS の CPUUtilization を取得するプログラム(Maximumの場合)
[root@test01 ~]# vi cloudwatch03 |
■プログラムの実行結果
[root@test01 ~]# ruby cloudwatch03 |
- 5 行出力されています。
- RDS と EC2 インスタンスでは CloudWatch の監視間隔が異なるので RDS では 5行表示されます。
(EC2 インスタンス:300秒間隔、RDS:60秒間隔)
- start_time と end_time の間を 60秒にして、period を 60秒にすると 1つのメトリクスだけが表示されます。
■RDS の CPUUtilization を取得するプログラム(Averageの場合)
require ‘aws-sdk’ |
■プログラムの実行結果
[root@test01 ~]# ruby cloudwatch03 |
コメント