Edited at

CloudWatch カスタムメトリクスで色々監視する

More than 1 year has passed since last update.

初EC2を立てるまで

EC2初期設定

でEC2の初期設定までできたので、実際に運用していくにあたり必要そうなカスタムメトリクスを自作します。

カスタムメトリクス導入にて、メモリ使用率、ディスク使用率は設定しました。

今回は+αシェルを作成して色々監視できる状態にしたいと思います。


基本情報

基本的に「/var/tmp/aws-mon/」にインスタンスの情報が入っています。

※AMIから作成したインスタンスはこのディレクトリがクリアされていないこともあるので、EC2起動したら削除しておくほうがいいです。

/aws-scripts-mon/mon-put-instance-data.plを実行すると作られるっぽいです。



/instance-id :インスタンスID

/placement/availability-zone :アベイラビリティゾーン

/as-group-name :オートスケーリンググループ名


テンプレスクリプト

/opt/aws/bin/mon-put-dataを実行することでCloudWatchに登録できます。

#!/bin/sh

export JAVA_HOME=/usr/lib/jvm/jre
export AWS_CLOUDWATCH_HOME=/opt/aws/apitools/mon
export EC2_REGION=ap-northeast-1
export AWS_CREDENTIAL_FILE=/home/ec2-user/cloudwatch/credential
InstanceId=`cat /var/tmp/aws-mon/instance-id`

/opt/aws/bin/mon-put-data --metric-name "[メトリクス名]" --namespace "CustomMetrix" --dimensions "InstanceId=${InstanceId}" --value [登録するデータ]

各オプションは以下の図の通りCloudWatchに反映されます。

「dimensions」に関しては、「,」区切りで複数設定することも可能です。

例) --dimensions "InstanceID=\${InstanceID}, HostName=\${hostname}"


  • --metric-name

  • --namespace

  • --dimensions

  • --value

スクリーンショット 2018-03-21 11.26.58.png

スクリーンショット 2018-03-21 11.40.34.png


カスタムメトリクス作成

以下のスクリプトを記載してcronに設定することで、CloudWatchで監視可能になります。


必要モジュールインストール

yum install aws-apitools-mon


実際に作成してみました。

例は、LoadAverageとhttpd, crondプロセスをチェックをするスクリプトになっています。

このディレクトリに作成します

$ pwd

/home/ec2-user/cloudwatch
$ ll
total 4
drwxrwxr-x 2 ec2-user ec2-user 185 Mar 21 00:08 aws-scripts-mon
-rw------- 1 ec2-user ec2-user 91 Mar 21 00:32 credential


スクリプト作成

・CustomMetrix.sh

#!/bin/sh

CUR_DIR=/home/ec2-user/cloudwatch

export JAVA_HOME=/usr/lib/jvm/jre
export AWS_CLOUDWATCH_HOME=/opt/aws/apitools/mon
export EC2_REGION=ap-northeast-1
export AWS_CREDENTIAL_FILE=${CUR_DIR}/credential
InstanceId=`cat /var/tmp/aws-mon/instance-id`
# 設定ファイル
PROCESSCONFIG=${CUR_DIR}/process-conf.txt

# Process Check(設定したファイルから読み込む)
cat ${PROCESSCONFIG} | sed '/^$/d' | grep -v '^#.*' | while read PROCESS
do
COUNT=`ps -aux | grep ${PROCESS} | grep -v grep | wc -l`
echo ${PROCESS}:${COUNT}
/opt/aws/bin/mon-put-data --metric-name ${PROCESS} --namespace "CustomMetrix" --dimensions "InstanceId=${InstanceId}" --value ${COUNT}
done

# LoadAverage(1分間の測定値を取得)
/opt/aws/bin/mon-put-data --metric-name "LoadAverage" --namespace "CustomMetrix" --dimensions "InstanceId=${InstanceId}" --value `cat /proc/loadavg | awk '{print $1;}'`

実行できるようにパーミッション調整

$ chmod u+x CustomMetrix.sh 


設定ファイルを準備

・process-conf.txtにチェックしたいプロセスを記載します。

$ cat process-conf.txt 

httpd
crond


実行

実行してCloudWatchに登録されていればOKです。

$ ./CustomMetrix.sh 

httpd:6
crond:1

CustomMetrixが追加されていればOKです。

スクリーンショット 2018-03-21 11.12.31.png

こんな感じで登録されます。

スクリーンショット 2018-03-21 11.12.58.png


cron設定

これで毎分の状況がCloudWatchにて監視することができます。

適宜、アラートを設定して監視を行ってください。

$ crontab -e

crontab: installing new crontab
$ crontab -l
*/1 * * * * /home/ec2-user/cloudwatch/CustomMetrix.sh > /dev/null 2>&1

以上でカスタムメトリクスが自作できました。

その他監視したいものがあれば、適宜スクリプトを作成すると監視可能です。