運用をおこなっていると、時間の節約ため監視系はどこか一つに統一したいと思ってくることがあります。
ボトルネック調査などには向きませんが、アクセス、リソース監視程度であればCloudWatchに統一してしまったほうがサーバーに負荷がかからないので良いかと思います。
まずApacheで「mod_status」を有効にし、
wget -q -O - http://localhost/server-status?auto
でAapacheの情報が見えるようにします。ひとまず上記コマンドで取れる情報をそのままCloudWatchに投げます。
#!/bin/bash export EC2_REGION=ap-northeast-1 export AWS_CLOUDWATCH_HOME=/opt/aws/apitools/mon export JAVA_HOME=/usr/lib/jvm/jre STATUS="/tmp/apache_status" CREDENTIAL="{awsのcredentialのファイル}" 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 }'` /opt/aws/bin/mon-put-data --metric-name httpd-busyworkers --namespace "EC2: HTTPD" --dimensions "InstanceId=$SERVER" --unit "Count" --value $BUSYWORKERS --aws-credential-file $CREDENTIAL /opt/aws/bin/mon-put-data --metric-name httpd-idleworkers --namespace "EC2: HTTPD" --dimensions "InstanceId=$SERVER" --unit "Count" --value $IDLEWORKERS --aws-credential-file $CREDENTIAL /opt/aws/bin/mon-put-data --metric-name httpd-request-per-sec --namespace "EC2: HTTPD" --dimensions "InstanceId=$SERVER" --unit "Count" --value $ReqPerSec --aws-credential-file $CREDENTIAL /opt/aws/bin/mon-put-data --metric-name httpd-byte-per-sec --namespace "EC2: HTTPD" --dimensions "InstanceId=$SERVER" --unit "Bytes" --value $BytesPerSec --aws-credential-file $CREDENTIAL /opt/aws/bin/mon-put-data --metric-name httpd-byte-per-req --namespace "EC2: HTTPD" --dimensions "InstanceId=$SERVER" --unit "Bytes" --value $BytesPerReq --aws-credential-file $CREDENTIAL
あとはcronに5分置きに実行するようにすればCloudWatchから見れるようになります。