hiratake55 の作業メモ

R, Javascript, Python, Linux and Hadoop

Amazon CloudWatch で EC2 インスタンスのプロセス監視を行う

Amazon EC2 で作成したサーバは無料で Amazon CloudWatch を利用したサーバの死活監視ができます。
標準で CPU の使用率やネットワークのトラフィック等、基本的な監視を行うことができますが、カスタムメトリクスを使用すればプロセス監視も行えるので、設定しておくにこしたことはないです。

料金も 10 メトリクス、10 アラーム、100 万 API リクエストまで無料なので、多くの場合無料の範囲内で使用できるはずです。Amazon Linux 64bit での手順は以下です。

1. YUMAWSモニタリングツールをインストール

Amazon Linuxだと、AmazonYUM レポジトリに登録されているので、YUM コマンドで簡単にインストール可能です。root で実行します。

# yum install aws-apitools-mon

2. Credential ファイルを作成する

テンプレートとして用意されている Credential ファイルをコピーし、必要な情報を記入します。
アクセスキー、シークレットキーは Amazon Web Services のアカウント画面(My Account→Security Credentials)に記載されています。(https://portal.aws.amazon.com/gp/aws/securityCredentials

# cp /opt/aws/credential-file-path.template /opt/aws/credential
# vi /opt/aws/credential
AWSAccessKeyId=<Write your AWS access ID>
AWSSecretKey=<Write your AWS secret key>

chmod 600 /opt/aws/credential

3. 監視スクリプトを作成する

プロセス数を送信するシェルスクリプトを作成します。JVM のインストールが必要です。各種パスは環境に応じて変更してください。サンプルとして、ApacheMySQL のプロセス数を監視する方法を以下に載せます。

# vi /root/cloudwatch/cloudwatch.sh
#!/bin/sh
export JAVA_HOME=/usr/lib/jvm/jre
export PATH=$PATH:$JAVA_HOME/bin

export EC2_REGION=ap-northeast-1
export AWS_CLOUDWATCH_HOME=/opt/aws/apitools/mon
export PATH=$PATH:$AWS_CLOUDWATCH_HOME/bin

export AWS_CREDENTIAL_FILE=/opt/aws/credential

#Apacheのプロセス数監視
mon-put-data --metric-name NumberOfProcesses --namespace Processes --dimensions 'Processes=httpd' --value `ps -e|grep httpd|wc -l`

#MySQLのプロセス数監視
mon-put-data --metric-name NumberOfProcesses --namespace Processes --dimensions 'Processes=mysqld' --value `ps -e|grep mysqld$|wc -l`

4. 作成したスクリプトを crontab に登録します

本例では 5 分ごとにスクリプトを実行し、CloudWatch に値を登録します。

# crontab -u root -e
*/5 * * * * /root/cloudwatch/cloudwatch.sh 1> /dev/null

5. 成功したか確認する

下記コマンドで成功したかどうか確認できます。結果が反映されるまで時間がかかることがあるようです。

# mon-get-stats MyWatch --namespace Processes --dimensions 'Processes=httpd' --statistics Average --headers

6. 稼働状況を確認する

AWS Management Console で送信されたアラートを Web 上から確認できます。

7. アラームを設定する

AWS Management Console からアラートを発生する条件を設定します。Amazon SNS(Simple Notification Service) で登録した通知先にHTTP(S)リクエストなどで通知できるようですが、メールで通知する方法が一般的かと思われます。