この記事は公開から1年以上が経過しています。内容が古い場合があるのでご注意下さい。

今更感がありますが、備忘録として書いています。

では早速、下記の公式マニュアルにある「Red Hat Enterprise Linux 6.6」の手順を参考に設定していきます。
(尚、対象のOSはCentOS6です。)

Amazon EC2 Linux インスタンスのメモリとディスクのメトリックスのモニタリング

EC2(OS)環境の準備

必要パッケージのインストール

$ sudo yum install zip unzip -y
$ sudo yum install perl-DateTime perl-Sys-Syslog perl-LWP-Protocol-https perl-Digest-SHA -y

今回利用しているインスタンスの元のAMIは、CentOS6を独自に最小インストール構成の状態から作成したものなので、これだけでは不十分でした。

その為、以下を追加でインストールしました。

 $ sudo yum -y install perl-CPAN gcc perl-libwww-perl libyaml-devel openssl-devel

Perlモジュールのインストール

次に、必要なPerlモジュールをインストールします。
色々聞かれるので、全てyesで応えるようにしています。

$ perl -MCPAN -e shell

cpan> o conf prerequisites_policy follow
cpan> o conf commit

cpan> install Bundle::LWP6 LWP
cpan> install YAML
cpan> install Crypt::SSLeay

これで環境の準備が整いました。
 

環境によっては`export LANG=C`しないと、Crypt::SSLeayのインストール時のテストでエラーになるかもしれません。
メモリ使用率が取れるようになったCloudWatchのスクリプトを導入してみた。

IAM設定

ドキュメントにある通り、以下のポリシーのIAM RoleをEC2インスタンスに付与しています。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Stmt1455254031000",
            "Effect": "Allow",
            "Action": [
                "cloudwatch:GetMetricStatistics",
                "cloudwatch:ListMetrics",
                "cloudwatch:PutMetricData",
                "ec2:DescribeTags"
            ],
            "Resource": [
                "*"
            ]
        }
    ]
}

モニタリングスクリプトの設置

Amazonが公式で公開しているモニタリングスクリプトをサーバに設置します。

$ curl http://aws-cloudwatch.s3.amazonaws.com/downloads/CloudWatchMonitoringScripts-1.2.1.zip -O
$ unzip CloudWatchMonitoringScripts-1.2.1.zip
$ rm CloudWatchMonitoringScripts-1.2.1.zip
$ cd aws-scripts-mon

テストラン

問題無ければ以下のような応答が返ってきます。

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

MemoryUtilization: 13.3129236475253 (Percent)
No credential methods are specified. Trying default IAM role.
Using IAM role <myrole>
Endpoint: https://monitoring.ap-northeast-1.amazonaws.com
Payload: {"MetricData":[{"Timestamp":1455261544,"Dimensions":[{"Value":"i-xxxxxxxxxxxxxxxxx","Name":"InstanceId"}],"Value":13.3129236475253,"Unit":"Percent","MetricName":"MemoryUtilization"}],"Namespace":"System/Linux","__type":"com.amazonaws.cloudwatch.v2010_08_01#PutMetricDataInput"}

Verification completed successfully. No actual metrics sent to CloudWatch.

CloudWatch への送信確認

以下を実行して、マネジメントコンソール上でグラフが見れることを確認します。

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

正常に送れていれば下記のようにLinuxシステムメトリックスという表示が出ています。
custommetrics_001.png

ここからメモリやディスク関連のグラフが見られれば導入完了です。
custommetrics_002.png

後は、またまたドキュメント通り、下記のような内容でcronに登録してあげれば完了です。

*/5 * * * * ~/aws-scripts-mon/mon-put-instance-data.pl --mem-util --disk-space-util --disk-path=/ --from-cron

他にもいくつかの使い方がドキュメントに載っていますので、必要に応じて使い分けてもらえばと思います。

同じAMIからインスタンスを作った時の注意点

公式ドキュメントに書かれている通り、このスクリプトは、インスタンスのメタデータをローカルにキャッシュするので、AMIからインスタンスを複製するような場合は、キャッシュを削除する必要があります。
http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/mon-scripts.html

キャッシュTTLを過ぎると、新しいデータを取得するとのことですが、私の環境では1週間以上経過しても更新されなかったので、明示的に削除しました。

削除は、rm /var/tmp/aws-mon/instance-idで該当ファイルを消すだけです。
このファイルには、インスタンスIDが格納されています。

cat /var/tmp/aws-mon/instance-id
i-xxxxxxxxxxxxxxxxx

もし、スクリプトが実行されているインスタンスでAMIを作った場合、そのAMIから起動したインスタンスの/var/tmp/aws-mon/instance-idには、AMIを取得したインスタンスIDが入ってしまっているので、cloudwatch上でも、元のインスタンスIDとして認識されてしまいます。

忘れずに消すようにしましょう!

関連記事:

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です