Amazon CloudWatch で EC2 インスタンスのプロセス監視を行う
Amazon EC2 で作成したサーバは無料で Amazon CloudWatch を利用したサーバの死活監視ができます。
標準で CPU の使用率やネットワークのトラフィック等、基本的な監視を行うことができますが、カスタムメトリクスを使用すればプロセス監視も行えるので、設定しておくにこしたことはないです。
料金も 10 メトリクス、10 アラーム、100 万 API リクエストまで無料なので、多くの場合無料の範囲内で使用できるはずです。Amazon Linux 64bit での手順は以下です。
1. YUM で AWS のモニタリングツールをインストール
Amazon Linuxだと、Amazon の YUM レポジトリに登録されているので、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 のインストールが必要です。各種パスは環境に応じて変更してください。サンプルとして、Apache と MySQL のプロセス数を監視する方法を以下に載せます。
# 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 上から確認できます。