Shoeisha Technology Media

CodeZine(コードジン)

特集ページ一覧

Amazon ClouldWatchで始めるAWSのリソース監視、はじめの一歩

Amazon ClouldWatchにおけるメトリクスのカスタマイズと、アラートの設定

  • ブックマーク
  • LINEで送る
  • このエントリーをはてなブックマークに追加
2014/09/19 14:00

 最近クラウド環境へサーバーを移行するケースが増えてきております。そこで本稿では、アマゾン ウェブ サービス(以下、AWS)環境でホスティングするときに運用上必要となるであろう「リソース監視」について、Amazon CloudWatchを導入する取っ掛かりの部分を紹介します。

目次

Amazon CloudWatchとは

 「Amazon CloudWatch(以下、CloudWatch)」は、AWSで実行するアプリケーションのモニタリングサービスです。メトリクスを収集/追跡してモニタリングを行い、閾値を設定してアラートを設定できます。

対象読者

  • AWSに興味のある方
  • サーバー運用を行っている方

必要な環境

  • AWSのアカウント
  • EC2のAmazonLinuxインスタンス

CloudWatchにメトリクスを追加し、アラートを設定する

 CloudWatchのEC2にはデフォルトで、 CPU使用率、ディスクIO、ネットワークIO、インスタンスの状態のメトリクスが用意されています。これだけで運用上問題がないのであれば良いですが、 メモリの使用量やディスク容量なども監視したい場合は手動で追加してやる必要があります。

 下記手順はAmazon Linuxでの設定になります。

メモリ使用率、スワップ使用率、ディスク使用率を追加する

 以下の手順でメトリクスを追加するスクリプトを用意します。

mkdir /usr/local/cloudwatch
cd /usr/local/cloudwatch
wget http://ec2-downloads.s3.amazonaws.com/cloudwatch-samples/CloudWatchMonitoringScripts-v1.1.0.zip
unzip CloudWatchMonitoringScripts-v1.1.0.zip
rm -f CloudWatchMonitoringScripts-v1.1.0.zip
yum -y install perl-Switch perl-Sys-Syslog perl-URI perl-IO-Compress perl-libwww-perl perl-LWP-Protocol-https
mkdir /var/log/cloudwatch/

 AWSのAPIにアクセスするためのアクセスキーとシークレットキーを設定します。アクセスキーとシークレットキーについては、AWSのドキュメントを参照してください。

echo "AWSAccessKeyId={アクセスキー}" > /usr/local/cloudwatch/aws-credential
echo "AWSSecretKey={シークレットキー}" >> /usr/local/cloudwatch/aws-credential

 テスト実行します。

/usr/local/cloudwatch/aws-scripts-mon/mon-put-instance-data.pl --mem-util --swap-util --disk-space-util --disk-path=/ --aws-credential-file=/usr/local/cloudwatch/aws-credential

 「Successfully reported metrics to CloudWatch」と表示されれば成功です。

 定期的に実行する必要があるため、cronに設定します。

crontab
*/5 * * * * /usr/local/cloudwatch/aws-scripts-mon/mon-put-instance-data.pl --mem-util --swap-util --disk-space-util --disk-path=/ --from-cron --aws-credential-file=/usr/local/cloudwatch/aws-credential >> /var/log/cloudwatch/linux-error.log

 AWS Management ConsoleからCloudWatchを見ると、左メニューに「Linux System」というものが追加され、DiskSpaceUtilization、MemoryUtilization、SwapUtilizationの3つが項目として表示されるようになります。

 

 OSのリソース情報としては、これで一通り足りていると思いますが、 それ以外のメトリクスを追加するには以下のように行います。

その他のメトリクスを追加する

easy_install php
easy_install pip
pip install awscli --upgrade

 アクセスキーとシークレットキーを再度設定する

aws configure
AWS Access Key ID [None]: {アクセスキー}
AWS Secret Access Key [None]: {シークレットキー}
Default region name [None]: ap-northeast-1
Default output format [None]: json

 サンプルとしてApacheの情報をプロットしてみます。

Apacheのserver-statusをプロットする

 Amazon Linuxのシェルから「http://localhost/server-status」にアクセスしたときにApacheのserver-statusが表示できるようにします。

/etc/httpd/conf.d/server-status.conf(Apache2.4系の場合)
ExtendedStatus On

<Location /server-status>
    SetHandler server-status
    Require local
</Location>
/etc/httpd/conf.d/server-status.conf(Apache2.2系の場合)
ExtendedStatus On

<Location /server-status>
    SetHandler server-status
    Order allow,deny
    Deny from all
    Allow from localhost
</Location>

 設定を反映させます。

service httpd reload

 Apacheのserver-statusを読み取り、CloudWatchにプロットするスクリプトを作成します。

/usr/local/cloudwatch/apache-status-put.sh
STATUS="/tmp/apache_status"
SERVER=`wget -q -O - http://169.254.169.254/latest/meta-data/instance-id`
wget -q -O - http://localhost/server-status?auto > $STATUS
BusyWorkers=`cat $STATUS | grep BusyWorkers | awk '{ print $2 }'`
IdleWorkers=`cat $STATUS | grep IdleWorkers | awk '{ print $2 }'`
ReqPerSec=`cat $STATUS | grep ReqPerSec  | awk '{ print $2 }'`
BytesPerSec=`cat $STATUS | grep BytesPerSec  | awk '{ print $2 }'`
BytesPerReq=`cat $STATUS | grep BytesPerReq  | awk '{ print $2 }'`

/usr/bin/aws cloudwatch put-metric-data --metric-name httpd-busyworkers --namespace "EC2: HTTPD" --dimensions "InstanceId=$SERVER" --unit "Count" --value $BusyWorkers
/usr/bin/aws cloudwatch put-metric-data --metric-name httpd-idleworkers --namespace "EC2: HTTPD" --dimensions "InstanceId=$SERVER" --unit "Count" --value $IdleWorkers
/usr/bin/aws cloudwatch put-metric-data --metric-name httpd-request-per-sec --namespace "EC2: HTTPD" --dimensions "InstanceId=$SERVER" --unit "Count" --value $ReqPerSec
/usr/bin/aws cloudwatch put-metric-data --metric-name httpd-byte-per-sec --namespace "EC2: HTTPD" --dimensions "InstanceId=$SERVER" --unit "Bytes" --value $BytesPerSec
/usr/bin/aws cloudwatch put-metric-data --metric-name httpd-byte-per-req --namespace "EC2: HTTPD" --dimensions "InstanceId=$SERVER" --unit "Bytes" --value $BytesPerReq

 実行権限を追加し、テスト実行します

chmod +x apache-status-put.sh
./apache-status-put.sh

 Custom Metricsに「EC2: HTTPD」というものが追加され、httpd-busyworkers、httpd-idleworkers、httpd-request-per-sec、httpd-byte-per-sec、httpd-byte-per-reqが項目として表示されます。

 

 cronに登録します。

crontab
*/5 * * * * /usr/local/cloudwatch/apache-status-put.sh 2>> /var/log/cloudwatch/apache-error.log

 ここまででメトリクスの追加ができたので、次はアラートの設定を行います。


  • ブックマーク
  • LINEで送る
  • このエントリーをはてなブックマークに追加

著者プロフィール

  • 越川祐次(コシカワユウジ)

    株式会社エイムラック所属 グループウェア「Aipo」の開発のほか、サーバー運用、移行、システム開発をおこなっています。 kousoku AWS Aipo.com

All contents copyright © 2005-2019 Shoeisha Co., Ltd. All rights reserved. ver.1.5