夏なので、AWSのCentOS7でCloudWatchでディスク容量監視、始めました

# 夏なので、AWSのCentOS7でCloudWatchでディスク容量監視、始めました

夏なので始めました。以下は手順です。

AWSのCloudWatchにはディスク容量を監視するメトリクスは標準では無いので、カスタムメトリクスを設定する必要があります。

## 参考
* [Amazon EC2 Linux インスタンスのメモリとディスクのメトリクスのモニタリング - Amazon Elastic Compute Cloud](https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/mon-scripts.html)

ここの内容を簡単にしただけです。少し画面キャプチャとかも加えました。

## CloudWatch モニタリングスクリプトの導入

### 必要なパッケージのインストールを行う

```bash
sudo yum install perl-DateTime perl-CPAN perl-Net-SSLeay perl-IO-Socket-SSL perl-Digest-SHA gcc -y
sudo yum install zip unzip
```

次にSUDOでCPANを実行。

```bash
sudo cpan
```

次のプロンプトが表示されるまで、各プロンプトで Enter キーを押す。

```
cpan[1]>
```

以下のコマンドでモジュールをインストールする。

```bash
cpan[1]> install YAML 
cpan[1]> install LWP::Protocol::https 
cpan[1]> install Sys::Syslog 
cpan[1]> install Switch 
```

### モニタリングスクリプトのダウンロード、インストール

任意のスクリプト保存用フォルダを作成し、ダウンロード。

```bash
mkdir cloudWatchScript
cd cloudWatchScript/
curl https://aws-cloudwatch.s3.amazonaws.com/downloads/CloudWatchMonitoringScripts-1.2.2.zip -O
```

ファイルを解凍し、解凍したディレクトリに移動。

```bash
unzip CloudWatchMonitoringScripts-1.2.2.zip
rm CloudWatchMonitoringScripts-1.2.2.zip
cd aws-scripts-mon
```

認証情報ファイルで AWS 認証情報を指定する。
まず、次のようにモニタリングスクリプトに含まれている awscreds.template ファイルを awscreds.conf にコピー。

```bash
cp awscreds.template awscreds.conf
```

作成したファイルに、アクセスキーIDとシークレットアクセスキーを入力。

```bash
vi awscreds.conf 
```

```
AWSAccessKeyId=my-access-key-id
AWSSecretKey=my-secret-access-key
```

以上で準備は完了。

### 動作テスト、CloudWatchでの確認

オプションの`--veryfy`と`--verbose`を用いて、正常にインストールされているかを確認することができる。
CloudWatch にデータを投入しないでテストを行うためには、以下のコマンドを入力

```bash
./mon-put-instance-data.pl --mem-util --verify --verbose
```

公式ページには結果は書かれていないが、下記のような実行結果が得られれば、OK

```
MemoryUtilization: 4.24024510254427 (Percent)
Using AWS credentials file <./awscreds.conf>
Endpoint: https://monitoring.ap-northeast-1.amazonaws.com
Payload: {"MetricData":[{"Timestamp":1528942171,"Dimensions":[{"Value":"i-09c2c31fef1692c33","Name":"InstanceId"}],"Value":4.24024510254427,"Unit":"Percent","MetricName":"MemoryUtilization"}],"Namespace":"System/Linux","__type":"com.amazonaws.cloudwatch.v2010_08_01#PutMetricDataInput"}

Verification completed successfully. No actual metrics sent to CloudWatch.
```

試しに以下のコマンドで、実際にCloudWatchにデータを送信してみる。送信しているのはディスクの利用率。

```bash
 ./mon-put-instance-data.pl --mem-used-incl-cache-buff --mem-util --disk-space-util --disk-path=/
```

AWSの管理画面にて、以下の画面を確認(CouldWatch->メトリクス->全てのメトリクス->Linux システム)
<img src="https://qiita-image-store.s3.amazonaws.com/0/182837/f7a62a54-4c4c-2536-83d2-efa39e33ed5b.png" width="700">


この中の`Filesystem, InstanceId, MountPath`という項目があるのでそれをクリック。
その中の`DiskSpaceUtilization`という名前のメトリクスにディスク利用率が記録されているのがわかる。

<img src="https://qiita-image-store.s3.amazonaws.com/0/182837/c83e7e2c-1496-2574-3fec-aa52231d7ebb.png" width="700">

`df`の実行結果と比較しても、おおよそ間違いないことがわかる。
(CloudWatchへの記録とdfの実行に少し間が空いたので厳密にあってはいないけど…)

```bash
$ df
Filesystem     1K-blocks    Used Available Use% Mounted on
/dev/xvda1      52416860 7559496  44857364  15% /
```

### cronへの登録

以下の内容をCronに追加(パスは適宜変更)

```bash
*/5 * * * * ~/CoudWatchScript/aws-scripts-monaws-scripts-mon/mon-put-instance-data.pl --mem-used-incl-cache-buff --mem-util --disk-space-util --disk-path=/ --from-cron
```

少したってからClousWatchで正常に値が確認できれば完了！
お疲れ様でした。