AmazonLinuxカスタムメトリクス取得

CloudWatch Monitoring ScriptでDiskUsageやMemoryUsage等を取得
→これらのメトリクスはEC2上で動くOSに依存するメトリクスであるため、OS側からの補助なしでは取得できない。

[Amazon CloudWatch Monitoring Scripts for Linux](https://aws.amazon.com/jp/code/amazon-cloudwatch-monitoring-scripts-for-linux/)
↑Amazon EC2インスタンスのメモリとディスクスペースの使用率をモニタリングするためのサンプルスクリプト

[CloudWatch Monitoring ScriptでDiskUsageやMemoryUsage等を取得](https://dev.classmethod.jp/cloud/aws/cloudwatch-monitoring-script-for-linux/)
↑参考ですが2013年と古いので少し変更点がありました。

[[AWS] Perlモジュールが見当たらない](http://blue-bear.jp/kb/aws-perlモジュールが見当たらないcant-locate-xxx-pmエラー/#Can8217t_locate_SysSyslogpm)
↑Perlモジュールをインストールしないとエラーが出ます。(Can’t locate xxx.pmエラー)が出ます。

[Amazon EC2 Linux インスタンスのメモリとディスクのメトリクスのモニタリング](https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/mon-scripts.html)
↑公式document

#Amazon CloudWatch Monitoring Scripts for Linuxの準備

```
mkdir cloudwatch
cd cloudwatch
wget http://aws-cloudwatch.s3.amazonaws.com/downloads/CloudWatchMonitoringScripts-1.2.1.zip
unzip CloudWatchMonitoringScripts-1.2.1.zip
rm CloudWatchMonitoringScripts-1.2.1.zip
cd aws-scripts-mon
```
#関係モジュールのインストール
Perlモジュールが見当たらない(Can’t locate xxx.pmエラー)が出るので下記のコマンドでPerlモジュールをインストール

```
sudo yum install -y perl-Sys-Syslog
sudo yum install -y perl-URI-1.60-9.8.amzn1.noarch 
sudo yum install –y perl-DateTime-TimeZone-1.63-2.9.amzn1.noarch
yum provides *Compress
sudo yum install -y perl-Compress-Raw-Zlib-2.061-4.1.amzn1.x86_64
sudo mv /usr/lib64/perl5/vendor_perl/Compress/Raw/Zlib.pm /usr/lib64/perl5/vendor_perl/Compress/Zlib.pm
sudo yum install -y perl-LWP-Protocol-https.noarch
```

#IAM作成
OSの中からCloudWatch APIを叩いて値を送信するため、インスタンスに対してAPIへのアクセス権限を付与する必要があります
*cwscript-policy*　を作成してください。ロールにアタッチしてメトリクスを取得、CloudWatchにを出力できるように設定
EC2にアタッチするロールを作成し、上記のcwscript-policyを割り当てる
*cwscript-policy*

```
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": [
                "cloudwatch:GetMetricStatistics",
                "cloudwatch:PutMetricData"
            ],
            "Effect": "Allow",
            "Resource": [
                "*"
            ]
        }
    ]
}
```

#test
実行環境が整いました。動作テスト　–verifyをつけると実際にはCloudWatchには送信されない

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

***option****
--mem-util         :メモリ使用率       :Memory Utilization (%)
--mem-used         :使用メモリ         :Memory Used (MB)
--mem-avail        :利用可能なメモリ  　:Memory Available (MB)
--swap-util        :スワップ使用率      :Swap Utilization (%)
--swap-used        :使用済みスワップ    :Swap Used (MB)
--disk-space-util  :ディスク容量使用率  :Disk Space Utilization (%)
--disk-space-used  :使用ディスク容量    :Disk Space Used (GB)
--disk-space-avail :ディスク空き容量    :Disk Space Available (GB)
--verify           :CloudWatchに送信しない	

#cron設定
***crontab -e***コマンドでエディタを開き、cron設定
ディスク使用量に関するメトリクスはパスを指定が必要　下記は/を指定
***--disk-path=/***
cronから呼び出す場合は、--from-cronというオプションが必要
***--from-cron***

```
* * * * * /home/ec2-user/cloudwatch/aws-scripts-mon/mon-put-instance-data.pl  --mem-util --mem-used --mem-avail --swap-util --swap-used --disk-space-util --disk-space-used --disk-space-avail --disk-path=/ --from-cron
```

#このサンプルについて
これらのスクリプトは、Linuxを実行しているAmazon EC2インスタンスで実行するように設計されています。ここで、メモリとディスクスペースの使用状況のメトリクスをAmazon CloudWatchに報告するようにスクリプトを設定できます。
メトリクスがCloudWatchに送信されると、CloudWatchコンソールでグラフを表示し、統計を計算し、それらにアラームを設定することができます。
スクリプトからCloudWatchに送信されるメトリックスは、個々のインスタンスまたは複数のインスタンスにわたって設定できます。
さらに、Amazon Auto Scaling利用者は、Auto Scalingポリシーにスクリプトによって報告されたメトリックスを使用できます。 スクリプトの認証にAWS IAMを使用し、IAMロールのサポートを含みます。







スクリプトは、Amazon CloudWatchカスタムメトリックスとしてメモリおよびディスクスペース使用量メトリックスを送信します。標準のAmazon CloudWatch無料利用枠の数量と価格が適用されます。 これはサポートされていないサンプルですが、AWSフォーラムに投稿したすべてのフィードバック、コメント、質問に受け付けます。

セットアップや設定など、スクリプトの使用方法の詳細については、Amazon CloudWatch開発者ガイドの「Linux用のAmazon CloudWatchモニタリングスクリプト」を参照してください