aws cloudwatch 公式から配布されているスクリプトのカスタムメトリクスを実装


amazon linuxに公式から配布されているスクリプトを実装してカスタムメトリクスを表示させる。

IAMの設定してインスタンスの設定をします。
細かく手順をかいてありますので、順番にやっていくと実装できます。

IAMの設定

インスタンスがcloudwatchに許可をとるために必要です。
今回の流れは、IAMでユーザーを作成し、cloudwatchにアクセス許可するポリシーを作成しユーザーに割り振り。インスタンスにユーザーを登録。インスタンスはユーザーのcloudwatchの許可を通してカスタムメトリクスを作成します。

許可する方法はユーザーとロールの二通りあります。ユーザーでやります。
ロールでは既存のインスタンスに割り振る場合にインスタンスを止めなければならなく時間がかかり手間です。
(ロールの場合、スナップショットを取る。そこからAMI(イメージ)を取る。インスタンスを削除。取ったAMIから作成する際にロールを割り振る。時間がかかりめんどくさい…)

IAMのサービスを開いてユーザーの作成ポリシーの作成します。

1.ユーザー作成

1-1.左のナビゲーションからユーザーを選択、新規ユーザーの作成を選択

1-2.適当にユーザー名を書いて「ユーザーごとにアクセスキーを生成」にチェックがついていることを確認する。確認したら右下にある作成を選択

1-3.認証情報のダウンロードを選択(アクセスする際に大切なものです大事に保管)
ダウンロードしたら、閉じるを選択。ユーザーが作られているので確認

2.ポリシー作成

2-1.左のナビゲーションでポリシーを選択。ポリシーを作成を選択

2-2.「Policy Generator」を選択。

2-3.以下のようにする

効果:許可
AWSサービス:Amazon Cloudwatch
アクション:PutMetricDataにチェック

以上のものができたらステートメントの追加を選択。右下にある次のステップを選択

2-4.適当にポリシー名と説明を入力後ポリシーの作成を選択
[メトリクス名]が作成されました。
と出てきます。

3.ユーザーにポリシーをアタッチする。

3-1.左のナビゲーションからユーザーを選択。1で作成したユーザーを選択。アクセス許可のタブにポリシーのアタッチと出てくるので選択。

3-2.フィルターのポリシータイプを選択して、カスタマー管理ポリシーを選択。
2で作成したポリシーがあるのでチェックボックスにチェックを入れて、右下にあるポリシーのアタッチを選択。

これでIAMの設定は終わり。cloudwatchにアクセス許可をするユーザーができましたので、次はインスタンスの設定をします。


インスタンス設定

基本rootユーザーのホームディレクトリで作業します。
sudo su
cd ~

wgetで公式が準備してくれているスクリプトをダウンロードします。
wget http://aws-cloudwatch.s3.amazonaws.com/downloads/CloudWatchMonitoringScripts-1.2.1.zip

展開します。
unzip CloudWatchMonitoringScripts-1.2.1.zip
展開したらaws-scripts-monというディレクトリができます。
zipはもういらないので削除。
rm -f CloudWatchMonitoringScripts-1.2.1.zip

ディレクトリ移動
cd aws-scripts-mon

コピーして中身を編集
cp awscreds.template awscreds.conf
vi awscreds.conf

※アクセスキー、シークレットキーはIAM設定の1-3でダウンロードしたものに書いてあります。awscreds.confの[]はいらない。

awscreds.conf
AWSAccessKeyId=[accesskeyを入力]
AWSSecretKey=[seacretkeyを入力]

必要なパッケージをインストールします。
yum install perl-Switch perl-DateTime perl-Sys-Syslog perl-LWP-Protocol-https

cloudwatchにカスタムメトリクスが送れる状態なのかテストします。
./mon-put-instance-data.pl --mem-util --mem-used --verify --verbose
「Verification completed successfully. No actual metrics sent to CloudWatch.」とでてきたら成功

cronで定期的にメトリクスデータをcloudwatchに送信する。
crontab -e

crontab
*/5 * * * * /root/aws-scripts-mon/mon-put-instance-data.pl  --mem-util --mem-used --mem-avail --swap-util --swap-used --disk-space-util --disk-space-used --disk-space-avail --disk-path=/ --from-cron

crondをリロードします。
/etc/init.d/crond reload

インスタンスの設定はこれで終わりです。


cloudwatchサービスを開いて、左のナビゲーションペインのメトリックスのなかに「Linux システム」が追加されているはず。

デフォルトではないメモリーの情報が見れるから便利ですね。カスタムメトリクスもアラートかけれるのでかけます。

追記(2017/06/08)
ロールの場合はポリシーアタッチ後いきなりcrontab -e
*/5 * * * * /root/aws-scripts-mon/mon-put-instance-data.pl --mem-util --mem-used --mem-avail --swap-util --swap-used --disk-space-util --disk-space-used --disk-space-avail --disk-path=/ --from-cron
でいけました。

エラーは/var/log/messagesに出る