LoginSignup
14
21

More than 5 years have passed since last update.

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

Last updated at Posted at 2018-03-21

初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

以上でカスタムメトリクスが自作できました。
その他監視したいものがあれば、適宜スクリプトを作成すると監視可能です。

14
21
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
21