From 02855fc13fab7319d6d516fa3ea631a97cc990c5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johannes=20W=C3=BCrbach?= Date: Thu, 25 Jan 2018 18:31:08 +0100 Subject: [PATCH] Enable metrics for AutoScalingGroups Those metrics simplify monitoring the created ASGs and are free [0]. Enable them by default. [0] https://aws.amazon.com/about-aws/whats-new/2016/08/free-auto-scaling-group-metrics-with-graphs/ --- cloudmock/aws/mockautoscaling/group.go | 4 ++ .../aws/mockautoscaling/unimplemented.go | 4 -- pkg/model/awsmodel/autoscalinggroup.go | 12 +++++ .../additional_user-data/cloudformation.json | 30 +++++++++++++ .../update_cluster/complex/kubernetes.tf | 6 +++ .../update_cluster/ha/kubernetes.tf | 12 +++++ .../lifecycle_phases/cluster-kubernetes.tf | 9 ++++ .../update_cluster/minimal-141/kubernetes.tf | 6 +++ .../cloudformation.json | 30 +++++++++++++ .../update_cluster/minimal/kubernetes.tf | 6 +++ .../privatecalico/kubernetes.tf | 9 ++++ .../update_cluster/privatecanal/kubernetes.tf | 9 ++++ .../update_cluster/privatedns1/kubernetes.tf | 9 ++++ .../update_cluster/privatedns2/kubernetes.tf | 9 ++++ .../privateflannel/kubernetes.tf | 9 ++++ .../privatekopeio/kubernetes.tf | 9 ++++ .../update_cluster/privateweave/kubernetes.tf | 9 ++++ .../shared_subnet/kubernetes.tf | 6 +++ .../update_cluster/shared_vpc/kubernetes.tf | 6 +++ .../fi/cloudup/awstasks/autoscalinggroup.go | 44 ++++++++++++++++--- 20 files changed, 227 insertions(+), 11 deletions(-) diff --git a/cloudmock/aws/mockautoscaling/group.go b/cloudmock/aws/mockautoscaling/group.go index 8443f361b7..6056d51c16 100644 --- a/cloudmock/aws/mockautoscaling/group.go +++ b/cloudmock/aws/mockautoscaling/group.go @@ -46,6 +46,10 @@ func (m *MockAutoscaling) CreateAutoScalingGroup(input *autoscaling.CreateAutoSc return nil, nil } +func (m *MockAutoscaling) EnableMetricsCollection(input *autoscaling.EnableMetricsCollectionInput) (*autoscaling.EnableMetricsCollectionOutput, error) { + return nil, nil +} + func (m *MockAutoscaling) DescribeAutoScalingGroups(input *autoscaling.DescribeAutoScalingGroupsInput) (*autoscaling.DescribeAutoScalingGroupsOutput, error) { if len(input.AutoScalingGroupNames) == 0 { return &autoscaling.DescribeAutoScalingGroupsOutput{ diff --git a/cloudmock/aws/mockautoscaling/unimplemented.go b/cloudmock/aws/mockautoscaling/unimplemented.go index 277eaabeda..b12f76ee8f 100644 --- a/cloudmock/aws/mockautoscaling/unimplemented.go +++ b/cloudmock/aws/mockautoscaling/unimplemented.go @@ -552,10 +552,6 @@ func (m *MockAutoscaling) DisableMetricsCollectionRequest(*autoscaling.DisableMe return nil, nil } -func (m *MockAutoscaling) EnableMetricsCollection(*autoscaling.EnableMetricsCollectionInput) (*autoscaling.EnableMetricsCollectionOutput, error) { - log.Fatal("Not implemented") - return nil, nil -} func (m *MockAutoscaling) EnableMetricsCollectionWithContext(aws.Context, *autoscaling.EnableMetricsCollectionInput, ...request.Option) (*autoscaling.EnableMetricsCollectionOutput, error) { log.Fatal("Not implemented") return nil, nil diff --git a/pkg/model/awsmodel/autoscalinggroup.go b/pkg/model/awsmodel/autoscalinggroup.go index b536e2926a..05fbf42fbf 100644 --- a/pkg/model/awsmodel/autoscalinggroup.go +++ b/pkg/model/awsmodel/autoscalinggroup.go @@ -177,6 +177,18 @@ func (b *AutoscalingGroupModelBuilder) Build(c *fi.ModelBuilderContext) error { Name: s(name), Lifecycle: b.Lifecycle, + Granularity: s("1Minute"), + Metrics: []*string{ + s("GroupMinSize"), + s("GroupMaxSize"), + s("GroupDesiredCapacity"), + s("GroupInServiceInstances"), + s("GroupPendingInstances"), + s("GroupStandbyInstances"), + s("GroupTerminatingInstances"), + s("GroupTotalInstances"), + }, + LaunchConfiguration: launchConfiguration, } diff --git a/tests/integration/update_cluster/additional_user-data/cloudformation.json b/tests/integration/update_cluster/additional_user-data/cloudformation.json index 0257b85a93..46d43c7b04 100644 --- a/tests/integration/update_cluster/additional_user-data/cloudformation.json +++ b/tests/integration/update_cluster/additional_user-data/cloudformation.json @@ -29,6 +29,21 @@ "Value": "1", "PropagateAtLaunch": true } + ], + "MetricsCollection": [ + { + "Granularity": "1Minute", + "Metrics": [ + "GroupMinSize", + "GroupMaxSize", + "GroupDesiredCapacity", + "GroupInServiceInstances", + "GroupPendingInstances", + "GroupStandbyInstances", + "GroupTerminatingInstances", + "GroupTotalInstances" + ] + } ] } }, @@ -61,6 +76,21 @@ "Value": "1", "PropagateAtLaunch": true } + ], + "MetricsCollection": [ + { + "Granularity": "1Minute", + "Metrics": [ + "GroupMinSize", + "GroupMaxSize", + "GroupDesiredCapacity", + "GroupInServiceInstances", + "GroupPendingInstances", + "GroupStandbyInstances", + "GroupTerminatingInstances", + "GroupTotalInstances" + ] + } ] } }, diff --git a/tests/integration/update_cluster/complex/kubernetes.tf b/tests/integration/update_cluster/complex/kubernetes.tf index fda4d17d97..784d31b3cd 100644 --- a/tests/integration/update_cluster/complex/kubernetes.tf +++ b/tests/integration/update_cluster/complex/kubernetes.tf @@ -83,6 +83,9 @@ resource "aws_autoscaling_group" "master-us-test-1a-masters-complex-example-com" value = "1" propagate_at_launch = true } + + metrics_granularity = "1Minute" + enabled_metrics = ["GroupMinSize", "GroupMaxSize", "GroupDesiredCapacity", "GroupInServiceInstances", "GroupPendingInstances", "GroupStandbyInstances", "GroupTerminatingInstances", "GroupTotalInstances"] } resource "aws_autoscaling_group" "nodes-complex-example-com" { @@ -121,6 +124,9 @@ resource "aws_autoscaling_group" "nodes-complex-example-com" { value = "1" propagate_at_launch = true } + + metrics_granularity = "1Minute" + enabled_metrics = ["GroupMinSize", "GroupMaxSize", "GroupDesiredCapacity", "GroupInServiceInstances", "GroupPendingInstances", "GroupStandbyInstances", "GroupTerminatingInstances", "GroupTotalInstances"] } resource "aws_ebs_volume" "us-test-1a-etcd-events-complex-example-com" { diff --git a/tests/integration/update_cluster/ha/kubernetes.tf b/tests/integration/update_cluster/ha/kubernetes.tf index ec771f9517..04c98e860e 100644 --- a/tests/integration/update_cluster/ha/kubernetes.tf +++ b/tests/integration/update_cluster/ha/kubernetes.tf @@ -66,6 +66,9 @@ resource "aws_autoscaling_group" "master-us-test-1a-masters-ha-example-com" { value = "1" propagate_at_launch = true } + + metrics_granularity = "1Minute" + enabled_metrics = ["GroupMinSize", "GroupMaxSize", "GroupDesiredCapacity", "GroupInServiceInstances", "GroupPendingInstances", "GroupStandbyInstances", "GroupTerminatingInstances", "GroupTotalInstances"] } resource "aws_autoscaling_group" "master-us-test-1b-masters-ha-example-com" { @@ -92,6 +95,9 @@ resource "aws_autoscaling_group" "master-us-test-1b-masters-ha-example-com" { value = "1" propagate_at_launch = true } + + metrics_granularity = "1Minute" + enabled_metrics = ["GroupMinSize", "GroupMaxSize", "GroupDesiredCapacity", "GroupInServiceInstances", "GroupPendingInstances", "GroupStandbyInstances", "GroupTerminatingInstances", "GroupTotalInstances"] } resource "aws_autoscaling_group" "master-us-test-1c-masters-ha-example-com" { @@ -118,6 +124,9 @@ resource "aws_autoscaling_group" "master-us-test-1c-masters-ha-example-com" { value = "1" propagate_at_launch = true } + + metrics_granularity = "1Minute" + enabled_metrics = ["GroupMinSize", "GroupMaxSize", "GroupDesiredCapacity", "GroupInServiceInstances", "GroupPendingInstances", "GroupStandbyInstances", "GroupTerminatingInstances", "GroupTotalInstances"] } resource "aws_autoscaling_group" "nodes-ha-example-com" { @@ -144,6 +153,9 @@ resource "aws_autoscaling_group" "nodes-ha-example-com" { value = "1" propagate_at_launch = true } + + metrics_granularity = "1Minute" + enabled_metrics = ["GroupMinSize", "GroupMaxSize", "GroupDesiredCapacity", "GroupInServiceInstances", "GroupPendingInstances", "GroupStandbyInstances", "GroupTerminatingInstances", "GroupTotalInstances"] } resource "aws_ebs_volume" "a-etcd-events-ha-example-com" { diff --git a/tests/integration/update_cluster/lifecycle_phases/cluster-kubernetes.tf b/tests/integration/update_cluster/lifecycle_phases/cluster-kubernetes.tf index 7141b9eb6d..95e6adee50 100644 --- a/tests/integration/update_cluster/lifecycle_phases/cluster-kubernetes.tf +++ b/tests/integration/update_cluster/lifecycle_phases/cluster-kubernetes.tf @@ -78,6 +78,9 @@ resource "aws_autoscaling_group" "bastion-privateweave-example-com" { value = "1" propagate_at_launch = true } + + metrics_granularity = "1Minute" + enabled_metrics = ["GroupMinSize", "GroupMaxSize", "GroupDesiredCapacity", "GroupInServiceInstances", "GroupPendingInstances", "GroupStandbyInstances", "GroupTerminatingInstances", "GroupTotalInstances"] } resource "aws_autoscaling_group" "master-us-test-1a-masters-privateweave-example-com" { @@ -104,6 +107,9 @@ resource "aws_autoscaling_group" "master-us-test-1a-masters-privateweave-example value = "1" propagate_at_launch = true } + + metrics_granularity = "1Minute" + enabled_metrics = ["GroupMinSize", "GroupMaxSize", "GroupDesiredCapacity", "GroupInServiceInstances", "GroupPendingInstances", "GroupStandbyInstances", "GroupTerminatingInstances", "GroupTotalInstances"] } resource "aws_autoscaling_group" "nodes-privateweave-example-com" { @@ -130,6 +136,9 @@ resource "aws_autoscaling_group" "nodes-privateweave-example-com" { value = "1" propagate_at_launch = true } + + metrics_granularity = "1Minute" + enabled_metrics = ["GroupMinSize", "GroupMaxSize", "GroupDesiredCapacity", "GroupInServiceInstances", "GroupPendingInstances", "GroupStandbyInstances", "GroupTerminatingInstances", "GroupTotalInstances"] } resource "aws_ebs_volume" "us-test-1a-etcd-events-privateweave-example-com" { diff --git a/tests/integration/update_cluster/minimal-141/kubernetes.tf b/tests/integration/update_cluster/minimal-141/kubernetes.tf index 4718cb3295..cd8445a675 100644 --- a/tests/integration/update_cluster/minimal-141/kubernetes.tf +++ b/tests/integration/update_cluster/minimal-141/kubernetes.tf @@ -66,6 +66,9 @@ resource "aws_autoscaling_group" "master-us-test-1a-masters-minimal-141-example- value = "1" propagate_at_launch = true } + + metrics_granularity = "1Minute" + enabled_metrics = ["GroupMinSize", "GroupMaxSize", "GroupDesiredCapacity", "GroupInServiceInstances", "GroupPendingInstances", "GroupStandbyInstances", "GroupTerminatingInstances", "GroupTotalInstances"] } resource "aws_autoscaling_group" "nodes-minimal-141-example-com" { @@ -92,6 +95,9 @@ resource "aws_autoscaling_group" "nodes-minimal-141-example-com" { value = "1" propagate_at_launch = true } + + metrics_granularity = "1Minute" + enabled_metrics = ["GroupMinSize", "GroupMaxSize", "GroupDesiredCapacity", "GroupInServiceInstances", "GroupPendingInstances", "GroupStandbyInstances", "GroupTerminatingInstances", "GroupTotalInstances"] } resource "aws_ebs_volume" "us-test-1a-etcd-events-minimal-141-example-com" { diff --git a/tests/integration/update_cluster/minimal-cloudformation/cloudformation.json b/tests/integration/update_cluster/minimal-cloudformation/cloudformation.json index 07d5f1c426..d4e9409187 100644 --- a/tests/integration/update_cluster/minimal-cloudformation/cloudformation.json +++ b/tests/integration/update_cluster/minimal-cloudformation/cloudformation.json @@ -29,6 +29,21 @@ "Value": "1", "PropagateAtLaunch": true } + ], + "MetricsCollection": [ + { + "Granularity": "1Minute", + "Metrics": [ + "GroupMinSize", + "GroupMaxSize", + "GroupDesiredCapacity", + "GroupInServiceInstances", + "GroupPendingInstances", + "GroupStandbyInstances", + "GroupTerminatingInstances", + "GroupTotalInstances" + ] + } ] } }, @@ -61,6 +76,21 @@ "Value": "1", "PropagateAtLaunch": true } + ], + "MetricsCollection": [ + { + "Granularity": "1Minute", + "Metrics": [ + "GroupMinSize", + "GroupMaxSize", + "GroupDesiredCapacity", + "GroupInServiceInstances", + "GroupPendingInstances", + "GroupStandbyInstances", + "GroupTerminatingInstances", + "GroupTotalInstances" + ] + } ] } }, diff --git a/tests/integration/update_cluster/minimal/kubernetes.tf b/tests/integration/update_cluster/minimal/kubernetes.tf index 8dd00374f5..fde40a2c65 100644 --- a/tests/integration/update_cluster/minimal/kubernetes.tf +++ b/tests/integration/update_cluster/minimal/kubernetes.tf @@ -66,6 +66,9 @@ resource "aws_autoscaling_group" "master-us-test-1a-masters-minimal-example-com" value = "1" propagate_at_launch = true } + + metrics_granularity = "1Minute" + enabled_metrics = ["GroupMinSize", "GroupMaxSize", "GroupDesiredCapacity", "GroupInServiceInstances", "GroupPendingInstances", "GroupStandbyInstances", "GroupTerminatingInstances", "GroupTotalInstances"] } resource "aws_autoscaling_group" "nodes-minimal-example-com" { @@ -92,6 +95,9 @@ resource "aws_autoscaling_group" "nodes-minimal-example-com" { value = "1" propagate_at_launch = true } + + metrics_granularity = "1Minute" + enabled_metrics = ["GroupMinSize", "GroupMaxSize", "GroupDesiredCapacity", "GroupInServiceInstances", "GroupPendingInstances", "GroupStandbyInstances", "GroupTerminatingInstances", "GroupTotalInstances"] } resource "aws_ebs_volume" "us-test-1a-etcd-events-minimal-example-com" { diff --git a/tests/integration/update_cluster/privatecalico/kubernetes.tf b/tests/integration/update_cluster/privatecalico/kubernetes.tf index c1fd531948..560ea5f238 100644 --- a/tests/integration/update_cluster/privatecalico/kubernetes.tf +++ b/tests/integration/update_cluster/privatecalico/kubernetes.tf @@ -88,6 +88,9 @@ resource "aws_autoscaling_group" "bastion-privatecalico-example-com" { value = "1" propagate_at_launch = true } + + metrics_granularity = "1Minute" + enabled_metrics = ["GroupMinSize", "GroupMaxSize", "GroupDesiredCapacity", "GroupInServiceInstances", "GroupPendingInstances", "GroupStandbyInstances", "GroupTerminatingInstances", "GroupTotalInstances"] } resource "aws_autoscaling_group" "master-us-test-1a-masters-privatecalico-example-com" { @@ -114,6 +117,9 @@ resource "aws_autoscaling_group" "master-us-test-1a-masters-privatecalico-exampl value = "1" propagate_at_launch = true } + + metrics_granularity = "1Minute" + enabled_metrics = ["GroupMinSize", "GroupMaxSize", "GroupDesiredCapacity", "GroupInServiceInstances", "GroupPendingInstances", "GroupStandbyInstances", "GroupTerminatingInstances", "GroupTotalInstances"] } resource "aws_autoscaling_group" "nodes-privatecalico-example-com" { @@ -140,6 +146,9 @@ resource "aws_autoscaling_group" "nodes-privatecalico-example-com" { value = "1" propagate_at_launch = true } + + metrics_granularity = "1Minute" + enabled_metrics = ["GroupMinSize", "GroupMaxSize", "GroupDesiredCapacity", "GroupInServiceInstances", "GroupPendingInstances", "GroupStandbyInstances", "GroupTerminatingInstances", "GroupTotalInstances"] } resource "aws_ebs_volume" "us-test-1a-etcd-events-privatecalico-example-com" { diff --git a/tests/integration/update_cluster/privatecanal/kubernetes.tf b/tests/integration/update_cluster/privatecanal/kubernetes.tf index 1f27a6feef..835391be28 100644 --- a/tests/integration/update_cluster/privatecanal/kubernetes.tf +++ b/tests/integration/update_cluster/privatecanal/kubernetes.tf @@ -88,6 +88,9 @@ resource "aws_autoscaling_group" "bastion-privatecanal-example-com" { value = "1" propagate_at_launch = true } + + metrics_granularity = "1Minute" + enabled_metrics = ["GroupMinSize", "GroupMaxSize", "GroupDesiredCapacity", "GroupInServiceInstances", "GroupPendingInstances", "GroupStandbyInstances", "GroupTerminatingInstances", "GroupTotalInstances"] } resource "aws_autoscaling_group" "master-us-test-1a-masters-privatecanal-example-com" { @@ -114,6 +117,9 @@ resource "aws_autoscaling_group" "master-us-test-1a-masters-privatecanal-example value = "1" propagate_at_launch = true } + + metrics_granularity = "1Minute" + enabled_metrics = ["GroupMinSize", "GroupMaxSize", "GroupDesiredCapacity", "GroupInServiceInstances", "GroupPendingInstances", "GroupStandbyInstances", "GroupTerminatingInstances", "GroupTotalInstances"] } resource "aws_autoscaling_group" "nodes-privatecanal-example-com" { @@ -140,6 +146,9 @@ resource "aws_autoscaling_group" "nodes-privatecanal-example-com" { value = "1" propagate_at_launch = true } + + metrics_granularity = "1Minute" + enabled_metrics = ["GroupMinSize", "GroupMaxSize", "GroupDesiredCapacity", "GroupInServiceInstances", "GroupPendingInstances", "GroupStandbyInstances", "GroupTerminatingInstances", "GroupTotalInstances"] } resource "aws_ebs_volume" "us-test-1a-etcd-events-privatecanal-example-com" { diff --git a/tests/integration/update_cluster/privatedns1/kubernetes.tf b/tests/integration/update_cluster/privatedns1/kubernetes.tf index f496cce471..b75bc4a058 100644 --- a/tests/integration/update_cluster/privatedns1/kubernetes.tf +++ b/tests/integration/update_cluster/privatedns1/kubernetes.tf @@ -88,6 +88,9 @@ resource "aws_autoscaling_group" "bastion-privatedns1-example-com" { value = "1" propagate_at_launch = true } + + metrics_granularity = "1Minute" + enabled_metrics = ["GroupMinSize", "GroupMaxSize", "GroupDesiredCapacity", "GroupInServiceInstances", "GroupPendingInstances", "GroupStandbyInstances", "GroupTerminatingInstances", "GroupTotalInstances"] } resource "aws_autoscaling_group" "master-us-test-1a-masters-privatedns1-example-com" { @@ -114,6 +117,9 @@ resource "aws_autoscaling_group" "master-us-test-1a-masters-privatedns1-example- value = "1" propagate_at_launch = true } + + metrics_granularity = "1Minute" + enabled_metrics = ["GroupMinSize", "GroupMaxSize", "GroupDesiredCapacity", "GroupInServiceInstances", "GroupPendingInstances", "GroupStandbyInstances", "GroupTerminatingInstances", "GroupTotalInstances"] } resource "aws_autoscaling_group" "nodes-privatedns1-example-com" { @@ -140,6 +146,9 @@ resource "aws_autoscaling_group" "nodes-privatedns1-example-com" { value = "1" propagate_at_launch = true } + + metrics_granularity = "1Minute" + enabled_metrics = ["GroupMinSize", "GroupMaxSize", "GroupDesiredCapacity", "GroupInServiceInstances", "GroupPendingInstances", "GroupStandbyInstances", "GroupTerminatingInstances", "GroupTotalInstances"] } resource "aws_ebs_volume" "us-test-1a-etcd-events-privatedns1-example-com" { diff --git a/tests/integration/update_cluster/privatedns2/kubernetes.tf b/tests/integration/update_cluster/privatedns2/kubernetes.tf index 44d7c9d2db..6344e25389 100644 --- a/tests/integration/update_cluster/privatedns2/kubernetes.tf +++ b/tests/integration/update_cluster/privatedns2/kubernetes.tf @@ -88,6 +88,9 @@ resource "aws_autoscaling_group" "bastion-privatedns2-example-com" { value = "1" propagate_at_launch = true } + + metrics_granularity = "1Minute" + enabled_metrics = ["GroupMinSize", "GroupMaxSize", "GroupDesiredCapacity", "GroupInServiceInstances", "GroupPendingInstances", "GroupStandbyInstances", "GroupTerminatingInstances", "GroupTotalInstances"] } resource "aws_autoscaling_group" "master-us-test-1a-masters-privatedns2-example-com" { @@ -114,6 +117,9 @@ resource "aws_autoscaling_group" "master-us-test-1a-masters-privatedns2-example- value = "1" propagate_at_launch = true } + + metrics_granularity = "1Minute" + enabled_metrics = ["GroupMinSize", "GroupMaxSize", "GroupDesiredCapacity", "GroupInServiceInstances", "GroupPendingInstances", "GroupStandbyInstances", "GroupTerminatingInstances", "GroupTotalInstances"] } resource "aws_autoscaling_group" "nodes-privatedns2-example-com" { @@ -140,6 +146,9 @@ resource "aws_autoscaling_group" "nodes-privatedns2-example-com" { value = "1" propagate_at_launch = true } + + metrics_granularity = "1Minute" + enabled_metrics = ["GroupMinSize", "GroupMaxSize", "GroupDesiredCapacity", "GroupInServiceInstances", "GroupPendingInstances", "GroupStandbyInstances", "GroupTerminatingInstances", "GroupTotalInstances"] } resource "aws_ebs_volume" "us-test-1a-etcd-events-privatedns2-example-com" { diff --git a/tests/integration/update_cluster/privateflannel/kubernetes.tf b/tests/integration/update_cluster/privateflannel/kubernetes.tf index 47ac30f9cb..d5e576effc 100644 --- a/tests/integration/update_cluster/privateflannel/kubernetes.tf +++ b/tests/integration/update_cluster/privateflannel/kubernetes.tf @@ -88,6 +88,9 @@ resource "aws_autoscaling_group" "bastion-privateflannel-example-com" { value = "1" propagate_at_launch = true } + + metrics_granularity = "1Minute" + enabled_metrics = ["GroupMinSize", "GroupMaxSize", "GroupDesiredCapacity", "GroupInServiceInstances", "GroupPendingInstances", "GroupStandbyInstances", "GroupTerminatingInstances", "GroupTotalInstances"] } resource "aws_autoscaling_group" "master-us-test-1a-masters-privateflannel-example-com" { @@ -114,6 +117,9 @@ resource "aws_autoscaling_group" "master-us-test-1a-masters-privateflannel-examp value = "1" propagate_at_launch = true } + + metrics_granularity = "1Minute" + enabled_metrics = ["GroupMinSize", "GroupMaxSize", "GroupDesiredCapacity", "GroupInServiceInstances", "GroupPendingInstances", "GroupStandbyInstances", "GroupTerminatingInstances", "GroupTotalInstances"] } resource "aws_autoscaling_group" "nodes-privateflannel-example-com" { @@ -140,6 +146,9 @@ resource "aws_autoscaling_group" "nodes-privateflannel-example-com" { value = "1" propagate_at_launch = true } + + metrics_granularity = "1Minute" + enabled_metrics = ["GroupMinSize", "GroupMaxSize", "GroupDesiredCapacity", "GroupInServiceInstances", "GroupPendingInstances", "GroupStandbyInstances", "GroupTerminatingInstances", "GroupTotalInstances"] } resource "aws_ebs_volume" "us-test-1a-etcd-events-privateflannel-example-com" { diff --git a/tests/integration/update_cluster/privatekopeio/kubernetes.tf b/tests/integration/update_cluster/privatekopeio/kubernetes.tf index ae256abdfe..3c6f704422 100644 --- a/tests/integration/update_cluster/privatekopeio/kubernetes.tf +++ b/tests/integration/update_cluster/privatekopeio/kubernetes.tf @@ -88,6 +88,9 @@ resource "aws_autoscaling_group" "bastion-privatekopeio-example-com" { value = "1" propagate_at_launch = true } + + metrics_granularity = "1Minute" + enabled_metrics = ["GroupMinSize", "GroupMaxSize", "GroupDesiredCapacity", "GroupInServiceInstances", "GroupPendingInstances", "GroupStandbyInstances", "GroupTerminatingInstances", "GroupTotalInstances"] } resource "aws_autoscaling_group" "master-us-test-1a-masters-privatekopeio-example-com" { @@ -114,6 +117,9 @@ resource "aws_autoscaling_group" "master-us-test-1a-masters-privatekopeio-exampl value = "1" propagate_at_launch = true } + + metrics_granularity = "1Minute" + enabled_metrics = ["GroupMinSize", "GroupMaxSize", "GroupDesiredCapacity", "GroupInServiceInstances", "GroupPendingInstances", "GroupStandbyInstances", "GroupTerminatingInstances", "GroupTotalInstances"] } resource "aws_autoscaling_group" "nodes-privatekopeio-example-com" { @@ -140,6 +146,9 @@ resource "aws_autoscaling_group" "nodes-privatekopeio-example-com" { value = "1" propagate_at_launch = true } + + metrics_granularity = "1Minute" + enabled_metrics = ["GroupMinSize", "GroupMaxSize", "GroupDesiredCapacity", "GroupInServiceInstances", "GroupPendingInstances", "GroupStandbyInstances", "GroupTerminatingInstances", "GroupTotalInstances"] } resource "aws_ebs_volume" "us-test-1a-etcd-events-privatekopeio-example-com" { diff --git a/tests/integration/update_cluster/privateweave/kubernetes.tf b/tests/integration/update_cluster/privateweave/kubernetes.tf index 196d324155..c171294ce4 100644 --- a/tests/integration/update_cluster/privateweave/kubernetes.tf +++ b/tests/integration/update_cluster/privateweave/kubernetes.tf @@ -88,6 +88,9 @@ resource "aws_autoscaling_group" "bastion-privateweave-example-com" { value = "1" propagate_at_launch = true } + + metrics_granularity = "1Minute" + enabled_metrics = ["GroupMinSize", "GroupMaxSize", "GroupDesiredCapacity", "GroupInServiceInstances", "GroupPendingInstances", "GroupStandbyInstances", "GroupTerminatingInstances", "GroupTotalInstances"] } resource "aws_autoscaling_group" "master-us-test-1a-masters-privateweave-example-com" { @@ -114,6 +117,9 @@ resource "aws_autoscaling_group" "master-us-test-1a-masters-privateweave-example value = "1" propagate_at_launch = true } + + metrics_granularity = "1Minute" + enabled_metrics = ["GroupMinSize", "GroupMaxSize", "GroupDesiredCapacity", "GroupInServiceInstances", "GroupPendingInstances", "GroupStandbyInstances", "GroupTerminatingInstances", "GroupTotalInstances"] } resource "aws_autoscaling_group" "nodes-privateweave-example-com" { @@ -140,6 +146,9 @@ resource "aws_autoscaling_group" "nodes-privateweave-example-com" { value = "1" propagate_at_launch = true } + + metrics_granularity = "1Minute" + enabled_metrics = ["GroupMinSize", "GroupMaxSize", "GroupDesiredCapacity", "GroupInServiceInstances", "GroupPendingInstances", "GroupStandbyInstances", "GroupTerminatingInstances", "GroupTotalInstances"] } resource "aws_ebs_volume" "us-test-1a-etcd-events-privateweave-example-com" { diff --git a/tests/integration/update_cluster/shared_subnet/kubernetes.tf b/tests/integration/update_cluster/shared_subnet/kubernetes.tf index 6f5fa07471..ae3658f716 100644 --- a/tests/integration/update_cluster/shared_subnet/kubernetes.tf +++ b/tests/integration/update_cluster/shared_subnet/kubernetes.tf @@ -70,6 +70,9 @@ resource "aws_autoscaling_group" "master-us-test-1a-masters-sharedsubnet-example value = "1" propagate_at_launch = true } + + metrics_granularity = "1Minute" + enabled_metrics = ["GroupMinSize", "GroupMaxSize", "GroupDesiredCapacity", "GroupInServiceInstances", "GroupPendingInstances", "GroupStandbyInstances", "GroupTerminatingInstances", "GroupTotalInstances"] } resource "aws_autoscaling_group" "nodes-sharedsubnet-example-com" { @@ -96,6 +99,9 @@ resource "aws_autoscaling_group" "nodes-sharedsubnet-example-com" { value = "1" propagate_at_launch = true } + + metrics_granularity = "1Minute" + enabled_metrics = ["GroupMinSize", "GroupMaxSize", "GroupDesiredCapacity", "GroupInServiceInstances", "GroupPendingInstances", "GroupStandbyInstances", "GroupTerminatingInstances", "GroupTotalInstances"] } resource "aws_ebs_volume" "us-test-1a-etcd-events-sharedsubnet-example-com" { diff --git a/tests/integration/update_cluster/shared_vpc/kubernetes.tf b/tests/integration/update_cluster/shared_vpc/kubernetes.tf index 9ecd308192..2a427a53d7 100644 --- a/tests/integration/update_cluster/shared_vpc/kubernetes.tf +++ b/tests/integration/update_cluster/shared_vpc/kubernetes.tf @@ -66,6 +66,9 @@ resource "aws_autoscaling_group" "master-us-test-1a-masters-sharedvpc-example-co value = "1" propagate_at_launch = true } + + metrics_granularity = "1Minute" + enabled_metrics = ["GroupMinSize", "GroupMaxSize", "GroupDesiredCapacity", "GroupInServiceInstances", "GroupPendingInstances", "GroupStandbyInstances", "GroupTerminatingInstances", "GroupTotalInstances"] } resource "aws_autoscaling_group" "nodes-sharedvpc-example-com" { @@ -92,6 +95,9 @@ resource "aws_autoscaling_group" "nodes-sharedvpc-example-com" { value = "1" propagate_at_launch = true } + + metrics_granularity = "1Minute" + enabled_metrics = ["GroupMinSize", "GroupMaxSize", "GroupDesiredCapacity", "GroupInServiceInstances", "GroupPendingInstances", "GroupStandbyInstances", "GroupTerminatingInstances", "GroupTotalInstances"] } resource "aws_ebs_volume" "us-test-1a-etcd-events-sharedvpc-example-com" { diff --git a/upup/pkg/fi/cloudup/awstasks/autoscalinggroup.go b/upup/pkg/fi/cloudup/awstasks/autoscalinggroup.go index 31008ef1ca..f170f8a8db 100644 --- a/upup/pkg/fi/cloudup/awstasks/autoscalinggroup.go +++ b/upup/pkg/fi/cloudup/awstasks/autoscalinggroup.go @@ -44,6 +44,9 @@ type AutoscalingGroup struct { Subnets []*Subnet Tags map[string]string + Granularity *string + Metrics []*string + LaunchConfiguration *LaunchConfiguration } @@ -196,6 +199,17 @@ func (_ *AutoscalingGroup) RenderAWS(t *awsup.AWSAPITarget, a, e, changes *Autos if err != nil { return fmt.Errorf("error creating AutoscalingGroup: %v", err) } + + _, err = t.Cloud.Autoscaling().EnableMetricsCollection(&autoscaling.EnableMetricsCollectionInput{ + AutoScalingGroupName: e.Name, + Granularity: e.Granularity, + Metrics: e.Metrics, + }) + + if err != nil { + return fmt.Errorf("error enabling metrics collection for AutoscalingGroup: %v", err) + } + } else { request := &autoscaling.UpdateAutoScalingGroupInput{ AutoScalingGroupName: e.Name, @@ -294,6 +308,8 @@ type terraformAutoscalingGroup struct { MinSize *int64 `json:"min_size,omitempty"` VPCZoneIdentifier []*terraform.Literal `json:"vpc_zone_identifier,omitempty"` Tags []*terraformASGTag `json:"tag,omitempty"` + MetricsGranularity *string `json:"metrics_granularity,omitempty"` + EnabledMetrics []*string `json:"enabled_metrics,omitempty"` } func (_ *AutoscalingGroup) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *AutoscalingGroup) error { @@ -302,6 +318,8 @@ func (_ *AutoscalingGroup) RenderTerraform(t *terraform.TerraformTarget, a, e, c MinSize: e.MinSize, MaxSize: e.MaxSize, LaunchConfigurationName: e.LaunchConfiguration.TerraformLink(), + MetricsGranularity: e.Granularity, + EnabledMetrics: e.Metrics, } for _, s := range e.Subnets { @@ -364,13 +382,19 @@ type cloudformationASGTag struct { Value *string `json:"Value"` PropagateAtLaunch *bool `json:"PropagateAtLaunch"` } + +type cloudformationASGMetricsCollection struct { + Granularity *string `json:"Granularity"` + Metrics []*string `json:"Metrics"` +} type cloudformationAutoscalingGroup struct { //Name *string `json:"name,omitempty"` - LaunchConfigurationName *cloudformation.Literal `json:"LaunchConfigurationName,omitempty"` - MaxSize *int64 `json:"MaxSize,omitempty"` - MinSize *int64 `json:"MinSize,omitempty"` - VPCZoneIdentifier []*cloudformation.Literal `json:"VPCZoneIdentifier,omitempty"` - Tags []*cloudformationASGTag `json:"Tags,omitempty"` + LaunchConfigurationName *cloudformation.Literal `json:"LaunchConfigurationName,omitempty"` + MaxSize *int64 `json:"MaxSize,omitempty"` + MinSize *int64 `json:"MinSize,omitempty"` + VPCZoneIdentifier []*cloudformation.Literal `json:"VPCZoneIdentifier,omitempty"` + Tags []*cloudformationASGTag `json:"Tags,omitempty"` + MetricsCollection []*cloudformationASGMetricsCollection `json:"MetricsCollection,omitempty"` LoadBalancerNames []*cloudformation.Literal `json:"LoadBalancerNames,omitempty"` } @@ -378,8 +402,14 @@ type cloudformationAutoscalingGroup struct { func (_ *AutoscalingGroup) RenderCloudformation(t *cloudformation.CloudformationTarget, a, e, changes *AutoscalingGroup) error { tf := &cloudformationAutoscalingGroup{ //Name: e.Name, - MinSize: e.MinSize, - MaxSize: e.MaxSize, + MinSize: e.MinSize, + MaxSize: e.MaxSize, + MetricsCollection: []*cloudformationASGMetricsCollection{ + { + Granularity: e.Granularity, + Metrics: e.Metrics, + }, + }, LaunchConfigurationName: e.LaunchConfiguration.CloudformationLink(), }