【AWS】カスタムメトリクスを使ったプロセス監視(Linux編)【CloudWatch】

#はじめに
こんにちは。
CloudWatchでプロセスの監視を行おうとした時、デフォルトの設定だけではできずかなり困りました。
色々な方の記事を参考にプロセス監視設定をしたときのメモを残します。

(20160911 追記)
WIndows編も記載しました！
[【AWS】 カスタムメトリクスを使ったプロセス監視(Windows編) 【Cloudwatch】](http://desert-snow.hatenadiary.jp/entry/2016/09/11/130254)


#概要


今回の記載内容は、主に下記となります。
監視するプロセスは、[chrony] です。

1. カスタムメトリクス用IAM作成
2. CloudWatch用ツールダウンロード
3. カスタムメトリクス作成

#前提
・Red Hat Enterprise Linux 7.1 (HVM), SSD Volume Type - ami-b1b458b1
　Amazon Linuxを利用しない手順を記載します。
・コンソールにログインできるアカウント

#①カスタムメトリクス用IAM作成

カスタムメトリクスをCloudWatchに送るには、*PutMetricData*という権限をもったIAMのアクセスキーとシークレットアクセスキーが必要になります。
まず、その権限をもったIAMを作ります。

今回権限は下記のようにしました。

```
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "xxxxxxxxxxxxxx",
            "Effect": "Allow",
            "Action": [
                "cloudwatch:PutMetricData"
            ],
            "Resource": [
                "*"
            ]
        }
    ]
}
```
作成したIAMでアクセスキー IDとシークレットアクセスキーを発行します。

#②CloudWatch用ツール準備
CloudWatch用のツールを準備します。

・SSHでEC2に接続します。

・wgetコマンドが使えないので、wgetをインストール
`sudo yum install wget`

・CloudWatchコマンドツール用のフォルダ作成
`mkdir bin`

・CloudWatchコマンドツールのダウンロード
`cd bin`
`wget http://ec2-downloads.s3.amazonaws.com/CloudWatch-2010-08-01.zip`

・unzipも入ってなかった・・・

```
unzip CloudWatch-2010-08-01.zip
-bash: unzip: コマンドが見つかりません
```
・unzipのインストール
`sudo yum install unzip`

・改めて、zip解凍及びzipファイルの削除
`sudo unzip CloudWatch-2010-08-01.zip`
`rm CloudWatch-2010-08-01.zip`

・CloudWatchにアクセスするために、CloudWatch証明書情報のテンプレートをコピー
`cd CloudWatch-1.0.20.0/`
`sudo cp credential-file-path.template credentials`


・証明書情報情報の書き換え
　先ほど、作成した アクセスキーID と シークレットキー を入力

```
sudo vi credentials 
AWSAccessKeyId=<アクセスキー ID入力>
AWSSecretKey=<シークレットキー入力>
```

#③カスタムメトリクス作成
ClooudWatchにカスタムメトリクスを送るシェルを作成します。

・CloudWatchコマンドツールを利用するには、javaが必要なので、インストール
`sudo yum install java-1.7.0-openjdk`

・シェル作成
chronydが動いている場合は、1を返します。
chronydが停止している場合は、0を返します。

```lang:custom_metrics.sh
#!/bin/bash
	 
export AWS_CLOUDWATCH_HOME=/home/ec2-user/bin/CloudWatch-1.0.20.0
export AWS_CREDENTIAL_FILE=$AWS_CLOUDWATCH_HOME/credentials
export AWS_CLOUDWATCH_URL=https://monitoring.amazonaws.com
export PATH=$AWS_CLOUDWATCH_HOME/bin:$PATH
export JAVA_HOME=/usr/lib/jvm/jre

InstanceId=$(curl -s http://169.254.169.254/latest/meta-data/instance-id)

chrony=`ps cax | grep chronyd | wc -l`

if [ "$chrony" -gt "0" ]; then
 Processes=1
else
 Processes=0
fi

mon-put-data --metric-name "chrony Processes" --namespace "System/Linux" --dimensions "InstanceId=$InstanceId" --value "$Processes" --unit "Count" --region ap-northeast-1

```

・シェルに実行権限を付与
cronからも実行できるようになります。
`sudo chmod 755 custom_metrics.sh `

・シェルを実行
 CloudWatchにカスタムメトリクスが送られます！
`sh custom_metrics.sh`

・[AWSコンソール] - [CloudWatch-メトリック] - [Linuxシステム>InstanceId]で動作確認
chronyが起動している場合　1を返しています。 #見にくくてごめんなさい...
![スクリーンショット 2015-12-12 16.25.04.png](https://qiita-image-store.s3.amazonaws.com/0/95380/fd30faa0-a621-e7f0-eb00-31e7f7a48ace.png)

chronyが停止している場合　0を返しています。
![スクリーンショット 2015-12-12 17.29.27.png](https://qiita-image-store.s3.amazonaws.com/0/95380/8a5a0840-6df5-f5b1-4c7e-b5e859c79468.png)




ちゃんと動作していますね。
定期的に実行したい場合は、先ほど作成したシェルをcronに登録してください。

また、カスタムメトリクスの値をトリガーにアラームの設定をすれば、
プロセスの監視を色々とカスタマイズできますね。


修正が必要な部分などありましたら、ご連絡お願いします！
それでは、失礼します！


#参考サイト
・http://stk-inc.co.jp/2013/01/aws-cloudwatch-ec2/
・http://qiita.com/hilotter/items/5d5c7cddb5e580bd7aa5