ポンコツ.log

ひよっこエンジニアのちょっとしたメモ。主に備忘録。たまに雑記。

【CentOS】CentOS6.9にCloudWatchモニタリングスクリプトを入れて監視する

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.

通った!\\ ٩( 'ω' )و //

参考