AutoScaling - EnableMetricsパラメータ


ManagementConsoleの画面にあるので存在は何となく知っていましたが、
よく把握していなかったのでaws-cliで試してみました。

（初投稿になります。宜しくお願い致します。）


# EnableMetricsパラメータ<a id="sec-1-1" name="sec-1-1"></a>

## １.概要
   -   説明:　AutoScalingのメトリクスを追加生成するためのパラメータ
   -   使いどころ：　AutoScalingGroupのインスタンス数の推移などをCloudWatchに記録したい場合
   -  値に登録するもの:　生成するAutoScalingのメトリクス名

```json   
"EnabledMetrics": [
                      {
                          "Metric": "GroupPendingInstances",　 #生成するメトリクス名
                          "Granularity": "1Minute"             #メトリクスのデータの送信間隔(粒度) / 1Minute固定
                      },
             ]
```
-  表示コマンド

```bash
$ aws autoscaling describe-auto-scaling-groups
```
- 設定コマンド

```bash
$ aws autoscaling enable-metrics-collection
```
- 注意点
    - LaunchConfigurationのDetailed Monitoringの有効化が必須
    - メトリクスを追加生成すると課金が発生（恐らくカスタムメトリクスとして扱われるのかと…。）

---
## 2. 設定状況の確認 
```bash
$ aws autoscaling describe-auto-scaling-groups
{
    "AutoScalingGroups": [
        {
            "AutoScalingGroupARN": "arn:aws:autoscaling:ap-northeast-1:111111111111111111:autoScalingGroupName/ASG1",
            "HealthCheckGracePeriod": 0,
            "SuspendedProcesses": [],
            "DesiredCapacity": 2,
            "Tags": [],
            "EnabledMetrics": [],  #デフォルトは値が空
            "LoadBalancerNames": [],
            "AutoScalingGroupName": "ASG1",
            "DefaultCooldown": 300,
            "MinSize": 2,
            "Instances": [
                {
                    "InstanceId": "i-xxxxxxx",
                    "AvailabilityZone": "ap-northeast-1c",
                    "HealthStatus": "Healthy",
                    "LifecycleState": "InService",
                    "LaunchConfigurationName": "LC1"
                },
                {
                    "InstanceId": "i-yyyyyyy",
                    "AvailabilityZone": "ap-northeast-1a",
                    "HealthStatus": "Healthy",
                    "LifecycleState": "Pending",
                    "LaunchConfigurationName": "LC1"
                }
            ],
            "MaxSize": 4,
            "VPCZoneIdentifier": "subnet-xxxxxxxxx,subnet-yyyyyyyy",
            "TerminationPolicies": [
                "Default"
            ],
            "LaunchConfigurationName": "LC1",
            "CreatedTime": "2015-07-29T05:40:52.323Z",
            "AvailabilityZones": [
                "ap-northeast-1c",
                "ap-northeast-1a"
            ],
            "HealthCheckType": "EC2"
        }
    ]
}
```

## 3. EnableMetricsの値に設定できるものの一覧表示
```bash
$ aws autoscaling describe-metric-collection-types
{
    "Metrics": [                          #値に設定できるものの一覧
        {
            "Metric": "GroupMinSize"
        },
        {
            "Metric": "GroupMaxSize"
        },
        {
            "Metric": "GroupDesiredCapacity"
        },
        {
            "Metric": "GroupInServiceInstances"
        },
        {
            "Metric": "GroupPendingInstances"
        },
        {
            "Metric": "GroupTerminatingInstances"
        },
        {
            "Metric": "GroupStandbyInstances"
        },
        {
            "Metric": "GroupTotalInstances"
        }
    ],
    "Granularities": [     #粒度に設定できるものの一覧
        {
            "Granularity": "1Minute"
        }
    ]
}
```

## 4. EnableMetricsの有効化（すべてのメトリクスを生成）
--metricsオプションを指定しないと、生成可能なすべてのメトリクスを作ることができます。

```bash
$ aws autoscaling enable-metrics-collection --auto-scaling-group-name MyAutoScalingGroup --granularity "1Minute"
```

## 参考：EnableMetricsに値を設定するには、LaunchConfigurationのDetailedMonitoringをEnableが必須です
AutoScalingのメトリクスに送られる情報の粒度が1Minute固定なので、enableにしていないと怒られます。

```bash
$ aws autoscaling enable-metrics-collection --auto-scaling-group-name ASG1 --granularity "1Minute"

A client error (ValidationError) occurred when calling the EnableMetricsCollection operation: Your group must use a launch configuration with 'InstanceMonitoring' enabled to be able to use group metrics.
```

## 5-1. 確認（aws-cli / autoscaling)

```bash
$ aws autoscaling  describe-auto-scaling-groups
{
    "AutoScalingGroups": [
        {
            "AutoScalingGroupARN": "arn:aws:autoscaling:ap-northeast-1:xxxxxxxx:autoScalingGroup:yyyyyyy:autoScalingGroupName/ASG1",
            "HealthCheckGracePeriod": 0,
            "SuspendedProcesses": [],
            "DesiredCapacity": 2,
            "Tags": [],
            "EnabledMetrics": [
                {
                    "Metric": "GroupPendingInstances", #Pending中のインスタンス
                    "Granularity": "1Minute"
                },
                {
                    "Metric": "GroupMaxSize",     #maxの設定値
                    "Granularity": "1Minute"
                },
                {
                    "Metric": "GroupDesiredCapacity",　　#Desiredの値
                    "Granularity": "1Minute"
                },
                {
                    "Metric": "GroupInServiceInstances", #InServiceのインスタンス数
                    "Granularity": "1Minute"
                },
                {
                    "Metric": "GroupTerminatingInstances",  #Terminate中のインスタンス数
                    "Granularity": "1Minute"
                },
                {
                    "Metric": "GroupMinSize", 　#minの設定値
                    "Granularity": "1Minute"
                },
                {
                    "Metric": "GroupTotalInstances",  #In Service+Pending+Terminatingの合計値
                    "Granularity": "1Minute"  #粒度
                }
            ],
            "LoadBalancerNames": [],
            "AutoScalingGroupName": "ASG1",
            "DefaultCooldown": 300,
            "MinSize": 2,
            "Instances": [
                {
                    "InstanceId": "i-xxxxxxxx",
                    "AvailabilityZone": "ap-northeast-1c",
                    "HealthStatus": "Healthy",
                    "LifecycleState": "InService",
                    "LaunchConfigurationName": "LC1"
                },
                {
                    "InstanceId": "i-yyyyyyyyy",
                    "AvailabilityZone": "ap-northeast-1a",
                    "HealthStatus": "Healthy",
                    "LifecycleState": "InService",
                    "LaunchConfigurationName": "LC1"
                }
            ],
            "MaxSize": 4,
            "VPCZoneIdentifier": "subnet-xxxxxxxx,subnet-yyyyyyyy",
            "TerminationPolicies": [
                "Default"
            ],
            "LaunchConfigurationName": "LC1",
            "CreatedTime": "2015-07-29T05:40:52.323Z",
            "AvailabilityZones": [
                "ap-northeast-1c",
                "ap-northeast-1a"
            ],
            "HealthCheckType": "EC2"
        }
    ]
}
```

## 5-2. 確認（ManagementConsole / CloudWatch)
CloudWatchに新しく「Auto Scaling」のネームスペースと、登録したメトリクスが見えています。

![WS000187.JPG](https://qiita-image-store.s3.amazonaws.com/0/83881/a57f96b9-99f6-0a45-71e7-df2118aa7a66.jpeg)

## 6. まとめ
- 課金は発生しますが、値に追加生成するメトリクスを登録するとCloudWatchからAutoScalingGroup内のインスタンスの動作履歴をグラフで追うことができ、とても便利です。
- 料金面がクリアされれば、AutoScaling使用時はマストでONという認識でもいいのではないかと個人的には思っています。
- やっぱり機能をしっかり把握するにはaws-cliやSDKの方が分かりやすいですね。