AWSのCloudwatchで色々な値が見れますが、そんなに多くありません、そこでカスタムメトリクスを使って知りたいデータを計測しましょうっていうお話
なにはともあれ使ってみました
アクセスできるようにする
まず、CloudwatchへEC2からアクセスができるようにする必用があります
方法はいくつかありますが今回はconfigureで入力してしまいます
- aws configure
aws configure
コマンドでアクセスキーなどの設定をします
ユーザー追加時に取得したAccessKey,SecretKeyを入力します
追加時以外には取得できないようなのでどこかに保存するなりして大切に保存しましょう
aws configure AccessKey:[入力] SecretKey:[入力] region:northeast-1 Format:json
scriptの登録
直近のload averageを取得してみます
#!/bin/sh meta_data='http://169.254.169.254/latest/meta-data' instance_id=`curl -sS ${meta_data}/instance-id` la=`uptime | awk -F"[, ]" '{print $16}'` aws cloudwatch put-metric-data \ --namespace 'Test' \ --dimensions InstanceId=${instance_id} \ #dimension [ InstanceId | AutoScalingGroupName | ImageId | InstanceType ] --metric-name 'LoadAverage' \ --value ${la} \ --unit [ Seconds | Microseconds | Milliseconds | Bytes | Kilobytes | Megabytes | Gigabytes | Terabytes | Bits | Kilobits | Megabits | Gigabits | Terabits | Percent | Count | Bytes/Second | Kilobytes/Second | Megabytes/Second | Gigabytes/Second | Terabytes/Second | Bits/Second | Kilobits/Second | Megabits/Second | Gigabits/Second | Terabits/Second | Count/Second | None ]
- metaデータの取得
InstanceIDなどは下記ページを参照して取得します
169.254.169.254
へリクエストを送ることでメタデータを取得できるようです
host名とか、セキュリティグループ名とか結構色々取ってこれる模様
- cronの設定
*/5 * * * * /usr/local/bin/get_metrics.sh
こんな感じで定期実行しておくだけで計測できるようです
システム依存の指標を使いたい場合とかにも有効ですね
公式スクリプト
既にディスクとかメモリとかそういうのを集めた公式のscriptがあるので同じことやるならそちらを使ったほうが幸せになりますね
Amazon ColoudWatch Monitoring Script for Linux
perlで書かれていていくらかモジュールのインストールが必要でした
インストール後、適当なところに展開して中身を読みつつ実行してみます
中身はこんな感じ
aws-scripts-mon |-- AwsSignatureV4.pm |-- CloudWatchClient.pm |-- LICENSE.txt |-- NOTICE.txt |-- awscreds.template |-- mon-get-instance-stats.pl `-- mon-put-instance-data.pl
今回、EC2にIAM Roleなどは設定していないのでawscreds.templateにCloudwatchへのアクセスが可能なAccesskey,Secretkeyを記述して実行します
$ yum install -y perl-Sys-Syslog perl-DateTime perl-IO-Compress perl-libwww-perl perl-LWP-Protocol-https perl-URI $ perl mon-put-instance-data.pl --aws-credential-file=awscreds.template --mem-util $ perl mon-put-instance-data.pl --aws-credential-file=awscreds.template --disk-space-util --disk-path=/
このスクリプトで作成したメトリクスは下記のように「Linux System Metrics」という感じで選択できるようになる模様
コマンドラインからメトリクスを取得するスクリプトもあるので使ってみた
$ perl mon-get-instance-stats.pl --aws-credential-file=awscreds.template Instance i-------- statistics for the last 1 hour. CPU Utilization Average: 1.85%, Minimum: 0.50%, Maximum: 12.00% Memory Utilization Average: 36.56%, Minimum: 36.56%, Maximum: 36.56% Swap Utilization Average: 0.00%, Minimum: 0.00%, Maximum: 0.00% Disk Space Utilization for /dev/xvda1 mounted on / Average: 40.04%, Minimum: 40.04%, Maximum: 40.04%
簡単な監視や計測であればAlarmとも連携できるので十分すぎるくらい便利そう
特にディスク容量とかはいつの間に100%になっててシステム止まってた!なんてことになりかねないのでAMIに組み込んでもいいのかなとか思ったり
cronに登録する際は実行権限を忘れずに!