CloudWatchのメトリクスで取れそうで取れないものがディスク容量やメモリ使用量ですが、さすがAWSさん。
公式でプラグインのスクリプトを用意してくれています。ありがたい。
Amazon EC2 Linux インスタンスのメモリとディスクのメトリクスのモニタリング - Amazon Elastic Compute Cloud
このプラグインの導入、CentOS7だとさっくりできたのに、CentOS6.9だと無駄にウロウロしたので、備忘録としておいておきます。
先に結論
フラフラしたので結論だけ書くと、CloudWatchClient.pm
の26行目を書き換えました。
use LWP 6; ↓ use LWP;
なんか思わぬところでハマるんじゃ無いかという恐れもありますが、今の所動いています。
IAMの作成
モニタリングスクリプトを実行するIAMユーザが必要になるので、先に作っておきます。
IAM > ユーザー > ユーザーを追加 から、下記4つの権限を持ったユーザを作成します。
アクセスキー、シークレットアクセスキーが必要になるので、アクセスの種類では「プログラムによるアクセス」を有効にします。
- cloudwatch:PutMetricData
- cloudwatch:GetMetricStatistics
- cloudwatch:ListMetrics
- ec2:DescribeTags
完了したら、認証ファイルをダウンロードしてスクリプトのインストールに進みます。
余談ですけど、IAMの権限の設定すごく楽になりましたよね。
インストール
Amazon EC2 Linux インスタンスのメモリとディスクのメトリクスのモニタリング - Amazon Elastic Compute Cloudの内容に沿って、必要なライブラリをインストールします。
$ sudo yum install perl-Switch perl-DateTime perl-Sys-Syslog perl-LWP-Protocol-https zip unzip -y
Perlが入っていない場合、追加でPerlのインストールも必要です。
$ sudo yum -y install perl-CPAN gcc perl-libwww-perl libyaml-devel openssl-devel
CPANを実行して、必要なモジュールをインストールします。
$ sudo cpan cpan[1]> install YAML cpan[1]> install LWP::Protocol::https cpan[1]> install Sys::Syslog cpan[1]> install Switch
インストールが終わったら、プラグイン本体をダウンロード、展開します。
$ curl https://aws-cloudwatch.s3.amazonaws.com/downloads/CloudWatchMonitoringScripts-1.2.2.zip -O $ unzip CloudWatchMonitoringScripts-1.2.2.zip
認証情報のテンプレートファイルをコピーして、中に作成しておいたIAMのアクセスキー等を設定します。
$ cd aws-scripts-mon $ cp awscreds.template awscreds.conf $ vi awscreds.conf AWSAccessKeyId=ACCESS_KEY_ID AWSSecretKey=SECRET_ACCESS_KEY
これでインストールは完了したので、mon-put-instance-data.pl
を実行して動作をみます。
--disk-space-util
オプションでディスク使用量の確認、--verify
オプションでテスト実行します。
$ ./mon-put-instance-data.pl --disk-space-util --disk-path=/ --verify --verbose --aws-credential-file=/home/centos/cloudwatch_plugins/aws-scripts-mon/awscreds.conf LWP version 6 required--this is only version 5.833 at CloudWatchClient.pm line 26. BEGIN failed--compilation aborted at CloudWatchClient.pm line 26. Compilation failed in require at ./mon-put-instance-data.pl line 86. BEGIN failed--compilation aborted at ./mon-put-instance-data.pl line 86.
はい。
LWPのバージョンをあげようとしてみる
どうやらバージョンが関わっていそうなので、アップグレードで解決?と考え始めます。
# LWPのバージョン確認 $ perl -MLWP -le "print(LWP->VERSION)" 5.833 # アップグレードできるもの確認 $ perl -MCPAN -e "CPAN::Shell->r" Package namespace installed latest in CPAN file LWP 5.833 6.34 ETHER/libwww-perl-6.34.tar.gz
latestは6.34。
libwww-perl-6.34.tar.gz
を手に入れる必要がある?と考え、インストールチャレンジします。
$ sudo perl -MCPAN -e "CPAN::Shell->install('ETHER/libwww-perl-6.34.tar.gz')" Warning: No success on command[/usr/bin/perl Makefile.PL INSTALLDIRS=site] ETHER/libwww-perl-6.34.tar.gz /usr/bin/perl Makefile.PL INSTALLDIRS=site -- NOT OK Running make test Make had some problems, won't test Running make install Make had some problems, won't install
できません。
スクリプトを書き換える
ふと冷静になります。
「LWP version 6 required」ということは、スクリプト内でバージョンの指定されているところか何かしらがあるのでは?
ここで冒頭に戻るわけですが、そのままだとCloudWatchClient.pm
への書き込み権限が無いようなので、先に権限を変更します。
$ ls -la -r--r--r-- 1 centos centos 22519 2018-03-26 12:47 CloudWatchClient.pm $ chmod 644 CloudWatchClient.pm $ ls -la -rw-r--r-- 1 centos centos 22519 2018-03-26 12:47 CloudWatchClient.pm
これで変更できるようになるので、冒頭に書いた通り、26行目にあるuse LWP 6;
をuse LWP;
に変更します。
変更したら、先ほど実行したmon-put-instance-data.pl
を再び実行します。
$ ./mon-put-instance-data.pl --disk-space-util --disk-path=/ --verify --verbose --aws-credential-file=/home/centos/cloudwatch_plugins/aws-scripts-mon/awscreds.conf DiskSpaceUtilization [/]: 52.6020399623083 (Percent) Using AWS credentials file </home/centos/cloudwatch_plugins/aws-scripts-mon/awscreds.conf> Endpoint: https://monitoring.ap-northeast-1.amazonaws.com Payload: {"MetricData":[{"Timestamp":1529401137,"Dimensions":[{"Value":"/dev/xvda1","Name":"Filesystem"},{"Value":"i-021839685456c0737","Name":"InstanceId"},{"Value":"/","Name":"MountPath"}],"Value":52.6020399623083,"Unit":"Percent","MetricName":"DiskSpaceUtilization"}],"Namespace":"System/Linux","__type":"com.amazonaws.cloudwatch.v2010_08_01#PutMetricDataInput"} Verification completed successfully. No actual metrics sent to CloudWatch.
通った!\\ ٩( 'ω' )و //