SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

特集記事

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

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

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

 最近クラウド環境へサーバーを移行するケースが増えてきております。そこで本稿では、アマゾン ウェブ サービス(以下、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

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

会員登録無料すると、続きをお読みいただけます

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

次のページ
まとめ

この記事は参考になりましたか?

  • このエントリーをはてなブックマークに追加
特集記事連載記事一覧

もっと読む

この記事の著者

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

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

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/8100 2014/09/24 16:29

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング