Help us understand the problem. What is going on with this article?

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

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

hf7777hi
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした