概要
デフォルトのCloudWatchだと取れないメトリックがあります。
たまに調べたりするので、ここに書いておこう。
基本的には下記を参考にすると良いです。
https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/mon-scripts.html
IAMロールを用意しよう
EC2からCloudWatchを使ったりするために、下記のようなポリシーのついたIAMロールを用意しましょう。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "1",
"Effect": "Allow",
"Action": [
"cloudwatch:PutMetricData",
"cloudwatch:GetMetricStatistics",
"cloudwatch:ListMetrics",
"ec2:DescribeTags"
],
"Resource": [
"*"
]
}
]
}
EC2にIAMロールを設定しましょう
昔は起動中にIAMロールを変更できなかったんですが、今はAWSコンソールから起動中でも変更できます。
今回はUbuntu
必要なパッケージをインストールします。
sudo apt-get update
sudo apt-get install unzip
sudo apt-get install libwww-perl libdatetime-perl
AWS提供の監視スクリプトをダウンロードします
最新バージョンは下記のURLを確認してください。
https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/mon-scripts.html
curl https://aws-cloudwatch.s3.amazonaws.com/downloads/CloudWatchMonitoringScripts-1.2.2.zip -O
unzip CloudWatchMonitoringScripts-1.2.2.zip && \
rm CloudWatchMonitoringScripts-1.2.2.zip && \
cd aws-scripts-mon
そうすると下記のようなファイルができます。
- CloudWatchClient.pm – 共通 Perl モジュール。これを使って、他のスクリプトから簡単に Amazon CloudWatch を呼び出すことができます。
- mon-put-instance-data.pl – Amazon EC2 インスタンス (メモリ、スワップ、ディスクスペースの使用状況) のシステムメトリクスを収集し、Amazon CloudWatch に送信します。
- mon-get-instance-stats.pl – Amazon CloudWatch に問い合わせて、このスクリプトが実行される EC2 インスタンスの最新の使用状況統計を表示します。
- awscreds.template – アクセスキー ID とシークレットアクセスキーを保存する AWS 認証情報のファイルテンプレートです。
動作確認
解凍してできたディレクトリの中で、下記のようにすると動くかの確認ができます。
$ ./mon-put-instance-data.pl --mem-util --verify --verbose
MemoryUtilization: 53.4314735431687 (Percent)
No credential methods are specified. Trying default IAM role.
Using IAM role <HogeHogeRole>
Endpoint: https://monitoring.ap-northeast-1.amazonaws.com
Payload: {"__type":"com.amazonaws.cloudwatch.v2010_08_01#PutMetricDataInput","MetricData":[{"Unit":"Percent","MetricName":"MemoryUtilization","Value":53.4314735431687,"Dimensions":[{"Name":"InstanceId","Value":"i-hogehoge"}],"Timestamp":159184XXXXX}],"Namespace":"System/Linux"}
Verification completed successfully. No actual metrics sent to CloudWatch.
cronに設定しよう
cronに設定していきましょう
$ crontab -e
# 最後の行に書きを付け足します。(メモリ使用量、ディスク使用量を監視してます。メモリではcache、buffもusedに計上します)
*/5 * * * * ~/aws-scripts-mon/mon-put-instance-data.pl --mem-used-incl-cache-buff --mem-util --disk-space-util --disk-path=/ --from-cron
おわり
多分これで、CloudWatchにディスクの情報とメモリの情報が送られるようになりました。