Develop with pleasure!

福岡でCloudとかBlockchainとか。

メモリ使用率が取れるようになったCloudWatchのスクリプトを導入してみた。

Amazon Web Services ブログ: 【AWS発表】Linux用CloudWatch監視スクリプトに3つの新機能を追加
というアナウンスが出てたので早速↓のページ見ながら導入してみた。

Amazon CloudWatch Monitoring Scripts for Linux - Amazon CloudWatch

事前準備

スクリプト自体はperlで書かれてるため、必要なPerlのモジュールをインストールする必要がある↓
(Can’t locate CPAN.pm inとかエラーが出る場合はcpanがインストールされてないので、yum install perl-CPAN する必要がある。)

$ cd /
$ perl -MCPAN -e shell
...
いろいろ聞かれるけど基本的にyesでOK
...
cpan[1]> install Bundle::LWP5_837 LWP

ちなみにCrypt::SSLeayがインストールされてないとCloudWatchにデータ登録する際にhttpsプロトコルが使えずエラーになるので、こちらも事前にインストールしておく。
※export LANG=Cしてるのは、そうしないとCrypt::SSLeayのインストール時のテストでエラーになるため。

$ export LANG=C
$ perl -MCPAN -e shell
cpan[1]> install Crypt::SSLeay

スクリプトを入手

$ wget http://ec2-downloads.s3.amazonaws.com/cloudwatch-samples/CloudWatchMonitoringScripts-v1.1.0.zip
$ unzip CloudWatchMonitoringScripts-v1.1.0.zip -d aws-scripts-mon
$ cd aws-scripts-mon

アクセス情報の準備

スクリプトがCloudWatchにインスタンスの監視情報を登録できるようAWSのアクセスキーとシークレットアクセスキーを用意する。既に持ってるキーでも良いけど、IAMでスクリプトが必要とするCloudWatchのPutMetricDataオペレーションを許可するようパーミッションを設定した監視専用のユーザ作って、そのユーザのキー情報を使うのが良いかと思う。とりあえず↓なポリシーのユーザ作ってみた。

{
  "Statement": [
    {
      "Sid": "****************",
      "Action": [
        "cloudwatch:PutMetricData"
      ],
      "Effect": "Allow",
      "Resource": [
        "*"
      ]
    }
  ]
}

↑の権限を持ったユーザのアクセスキーとシークレットアクセスキーをダウンロードしたawscreds.confに設定する。

AWSAccessKeyId=YourAccessKeyID
AWSSecretKey=YourSecretAccessKey

スクリプト

いよいよ監視。ダウンロードしたファイルの中のmon-put-instance-data.plというファイルが実際の監視スクリプトで、メモリ、ディスク、スワップの使用率を取得しCloudWatchにカスタムメトリクスとして登録が可能。どのデータを監視するかはオプションで指定する。

スクリプトを↓で実行すると実際にデータ取得できるか確認ができる(確認だけでこのコマンドでは実際にデータをCloudWatchには送ってない)

$ ./mon-put-instance-data.pl --mem-util --verify --verbose

実際にメモリ使用率を収集する際は↓なコマンド

$ ./mon-put-instance-data.pl --mem-util --mem-used --mem-avail

以下のようにcronに設定しておくと5分おきにメモリ使用率をCloudWatchに送信するようになる。--from-cronオプション指定することで標準出力へのアウトプットが抑制されエラー時のみエラー内容が出力されるようになるみたい。

*/5 * * * * ~/aws-scripts-mon/mon-put-instance-data.pl --mem-util --mem-used --mem-avail --from-cron

あとはManagementConsoleで↓な感じで登録されたメモリ使用率が確認できるようになる。

f:id:techmedia-think:20130225190049p:plain,w600

デフォルトのCloudWatchの監視内容はインスタンスの内部情報(今回のメモリ使用率みたいな)に関する監視はサポートされてなかったので、こういったスクリプトが増えてくると便利ね〜。