cfn_monitor 0.3.2 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 83c0c905a435c5f898ebcfaa505db758d92cc3527fd170e67b001bef38dedcbd
4
- data.tar.gz: ed28eef1615dc18c2a6a09b0ba76a65067cb2229f766272793eb064f3307ade5
3
+ metadata.gz: d9ad46a04c973e8e513a89fa1a6aaa774c55680e6d23b3a86d295107420cfe79
4
+ data.tar.gz: 2004bfad14bb93e09873f4d048d24a03333b43c489da972be5525ab3f402f669
5
5
  SHA512:
6
- metadata.gz: a4dae73aed3500adee7b9b80a5e86e730c0c35ee23a780ee34c5765188adaaedc9e45c9dbaae9f8ed582a5a6d3edcd9c4dc1b21617854d85f8d56109aef35270
7
- data.tar.gz: 87d68f547c4826dc1efad61a9fbb7d84a6bb295e6bbb0f1fc1f87bc4f3ecafa4e5b521ca5a8f89511467d88dc552474df8cd9e9f0e0491893f39a94236bd0982
6
+ metadata.gz: e10aa44c6904f4f2e669ebd4d30ff1876c1bab5d6b79a6672591cf7003f762b830d744695864b8de89c7b99ddd7f7db55adf6c019d357f59d21df3003fcbc896
7
+ data.tar.gz: 4a99599700015475d0df8ae6e2822763c07b343c94a325167b838c09e0cc1644a3403e6a1e4cefc16659b0c65795e6ee07f63953a8cbc666b2c891037603a2af
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- cfn_monitor (0.3.2)
4
+ cfn_monitor (0.4.0)
5
5
  aws-sdk-cloudformation (~> 1, < 2)
6
6
  aws-sdk-elasticloadbalancingv2 (~> 1, < 2)
7
7
  aws-sdk-s3 (~> 1, < 2)
@@ -12,28 +12,28 @@ GEM
12
12
  remote: https://rubygems.org/
13
13
  specs:
14
14
  aws-eventstream (1.0.3)
15
- aws-partitions (1.168.0)
16
- aws-sdk-cloudformation (1.22.0)
17
- aws-sdk-core (~> 3, >= 3.53.0)
15
+ aws-partitions (1.176.0)
16
+ aws-sdk-cloudformation (1.23.0)
17
+ aws-sdk-core (~> 3, >= 3.56.0)
18
18
  aws-sigv4 (~> 1.1)
19
- aws-sdk-core (3.54.0)
19
+ aws-sdk-core (3.56.0)
20
20
  aws-eventstream (~> 1.0, >= 1.0.2)
21
21
  aws-partitions (~> 1.0)
22
22
  aws-sigv4 (~> 1.1)
23
23
  jmespath (~> 1.0)
24
- aws-sdk-elasticloadbalancingv2 (1.29.0)
25
- aws-sdk-core (~> 3, >= 3.53.0)
24
+ aws-sdk-elasticloadbalancingv2 (1.30.0)
25
+ aws-sdk-core (~> 3, >= 3.56.0)
26
26
  aws-sigv4 (~> 1.1)
27
- aws-sdk-kms (1.21.0)
28
- aws-sdk-core (~> 3, >= 3.53.0)
27
+ aws-sdk-kms (1.22.0)
28
+ aws-sdk-core (~> 3, >= 3.56.0)
29
29
  aws-sigv4 (~> 1.1)
30
- aws-sdk-s3 (1.40.0)
31
- aws-sdk-core (~> 3, >= 3.53.0)
30
+ aws-sdk-s3 (1.43.0)
31
+ aws-sdk-core (~> 3, >= 3.56.0)
32
32
  aws-sdk-kms (~> 1)
33
- aws-sigv4 (~> 1.0)
33
+ aws-sigv4 (~> 1.1)
34
34
  aws-sigv4 (1.1.0)
35
35
  aws-eventstream (~> 1.0, >= 1.0.2)
36
- cfndsl (0.16.13)
36
+ cfndsl (0.17.0)
37
37
  diff-lcs (1.3)
38
38
  jmespath (1.4.0)
39
39
  rake (10.5.0)
@@ -116,11 +116,19 @@ module CfnMonitor
116
116
  end
117
117
  stackResources[:template]["#{location[1..-1]}.#{resource['logical_resource_id']}/#{tg['target_groups'][0]['load_balancer_arns'][0]}"] = config['resource_defaults'][resource['resource_type']]
118
118
  else
119
- stackResources[:template]["#{location[1..-1]}.#{resource['logical_resource_id']}"] = config['resource_defaults'][resource['resource_type']]
119
+ if location[1..-1].nil?
120
+ stackResources[:template]["#{stack}::#{resource['logical_resource_id']}"] = config['resource_defaults'][resource['resource_type']]
121
+ else
122
+ stackResources[:template]["#{location[1..-1]}.#{resource['logical_resource_id']}"] = config['resource_defaults'][resource['resource_type']]
123
+ end
120
124
  end
121
125
  stackResourceCount += 1
122
126
  stackResourceCountLocal += 1
123
- print "#{location[1..-1]}: Found #{stackResourceCount} resource#{"s" if stackResourceCount != 1}\r"
127
+ if location[1..-1].nil?
128
+ print "#{stack}: Found #{stackResourceCount} resource#{"s" if stackResourceCount != 1}\r"
129
+ else
130
+ print "#{location[1..-1]}: Found #{stackResourceCount} resource#{"s" if stackResourceCount != 1}\r"
131
+ end
124
132
  sleep 0.2
125
133
  elsif resource['resource_type'] == 'AWS::ElasticLoadBalancingV2::LoadBalancer'
126
134
  stackResources[:physical_resource_id][resource['physical_resource_id']] = "#{location[1..-1]}.#{resource['logical_resource_id']}"
@@ -1,3 +1,3 @@
1
1
  module CfnMonitor
2
- VERSION = "0.3.2".freeze
2
+ VERSION = "0.4.0".freeze
3
3
  end
@@ -13,3 +13,6 @@ resource_defaults:
13
13
  AWS::DynamoDB::Table: DynamoDBTable
14
14
  AWS::ApiGateway::RestApi: ApiGateway
15
15
  AWS::AmazonMQ::Broker: AmazonMQBroker
16
+ AWS::Lambda::Function: LambdaFunction
17
+ AWS::SQS::Queue: SQSQueue
18
+ AWS::CloudFront::Distribution: CloudFrontDistribution
@@ -85,18 +85,18 @@ templates:
85
85
  ComparisonOperator: LessThanThreshold
86
86
  Dimensions: [ { Name: 'URL', Value: '${resource}' } ]
87
87
  Statistic: Maximum
88
- Threshold: 30 # 30 days
88
+ Threshold: 5 # 5 days
89
89
  Period: 60
90
90
  EvaluationPeriods: 1
91
91
  MetricName: ExpiresInDays
92
92
  AlarmDescription: { 'Fn::Join': [ ' ', [ '${resource}', '${templateName}' ] ] }
93
- Warn:
94
- AlarmActions: warn
93
+ Task:
94
+ AlarmActions: task
95
95
  Namespace: SSL
96
96
  ComparisonOperator: LessThanThreshold
97
97
  Dimensions: [ { Name: 'URL', Value: '${resource}' } ]
98
98
  Statistic: Maximum
99
- Threshold: 60 # 60 days
99
+ Threshold: 30 # 30 days
100
100
  Period: 60
101
101
  EvaluationPeriods: 1
102
102
  MetricName: ExpiresInDays
@@ -108,18 +108,18 @@ templates:
108
108
  ComparisonOperator: LessThanThreshold
109
109
  Dimensions: [ { Name: 'Domain', Value: '${resource}' } ]
110
110
  Statistic: Maximum
111
- Threshold: 30 # 30 days
111
+ Threshold: 5 # 5 days
112
112
  Period: 60
113
113
  EvaluationPeriods: 1
114
114
  MetricName: ExpiresInDays
115
115
  AlarmDescription: { 'Fn::Join': [ ' ', [ '${resource}', '${templateName}' ] ] }
116
- Warn:
117
- AlarmActions: warn
116
+ Task:
117
+ AlarmActions: task
118
118
  Namespace: DNS
119
119
  ComparisonOperator: LessThanThreshold
120
120
  Dimensions: [ { Name: 'Domain', Value: '${resource}' } ]
121
121
  Statistic: Maximum
122
- Threshold: 60 # 60 days
122
+ Threshold: 30 # 30 days
123
123
  Period: 60
124
124
  EvaluationPeriods: 1
125
125
  MetricName: ExpiresInDays
@@ -461,10 +461,31 @@ templates:
461
461
  Namespace: AWS/ApiGateway
462
462
  MetricName: 5XXError
463
463
  ComparisonOperator: GreaterThanThreshold
464
- DimensionsName: ApiName
464
+ #DimensionsName: ApiName
465
+ Dimensions: [ { Name: 'ApiName', Value: '${name}' }]
466
+ Statistic: Sum
467
+ Threshold: 5
468
+ EvaluationPeriods: 2
469
+ ApiEndpoint4xx:
470
+ AlarmActions: warn
471
+ Namespace: AWS/ApiGateway
472
+ MetricName: 4XXError
473
+ ComparisonOperator: GreaterThanThreshold
474
+ #DimensionsName: ApiName
475
+ Dimensions: [ { Name: 'ApiName', Value: '${name}' }]
465
476
  Statistic: Sum
466
477
  Threshold: 5
467
478
  EvaluationPeriods: 2
479
+ Latency:
480
+ AlarmActions: warn
481
+ Namespace: AWS/ApiGateway
482
+ MetricName: Latency
483
+ ComparisonOperator: GreaterThanThreshold
484
+ #DimensionsName: ApiName
485
+ Dimensions: [ { Name: 'ApiName', Value: '${name}' }]
486
+ Statistic: Average
487
+ Threshold: 5
488
+ EvaluationPeriods: 2
468
489
  DynamoDBTable: #AWS::DynamoDB::Table
469
490
  DynamoDBReadUsage:
470
491
  AlarmActions: warn
@@ -637,3 +658,119 @@ templates:
637
658
  Period: 60
638
659
  EvaluationPeriods: 3
639
660
  TreatMissingData: notBreaching
661
+ SQSQueue:
662
+ ApproximateAgeOfOldestMessage:
663
+ AlarmActions: crit
664
+ Namespace: AWS/SQS
665
+ ComparisonOperator: GreaterThanThreshold
666
+ DimensionsName: QueueName
667
+ Statistic: Average
668
+ Threshold: 0.5
669
+ Period: 60
670
+ EvaluationPeriods: 5
671
+ MetricName: ApproximateAgeOfOldestMessage
672
+ TreatMissingData: breaching
673
+ ApproximateNumberOfMessagesVisible:
674
+ AlarmActions: crit
675
+ Namespace: AWS/SQS
676
+ ComparisonOperator: GreaterThanThreshold
677
+ DimensionsName: QueueName
678
+ Statistic: Average
679
+ Threshold: 0.5
680
+ Period: 60
681
+ EvaluationPeriods: 5
682
+ MetricName: ApproximateNumberOfMessagesVisible
683
+ TreatMissingData: breaching
684
+ LambdaFunction: #AWS::Lambda::Function
685
+ Throttles:
686
+ AlarmActions: crit
687
+ Namespace: AWS/Lambda
688
+ ComparisonOperator: GreaterThanThreshold
689
+ DimensionsName: FunctionName
690
+ Statistic: Average
691
+ Threshold: 0.5
692
+ Period: 60
693
+ EvaluationPeriods: 5
694
+ MetricName: Throttles
695
+ TreatMissingData: notBreaching
696
+ DeadLetterErrors:
697
+ AlarmActions: crit
698
+ Namespace: AWS/Lambda
699
+ ComparisonOperator: GreaterThanThreshold
700
+ DimensionsName: FunctionName
701
+ Statistic: Average
702
+ Threshold: 0.5
703
+ Period: 60
704
+ EvaluationPeriods: 5
705
+ MetricName: DeadLetterErrors
706
+ TreatMissingData: notBreaching
707
+ LambdaFunctionIteratorAge:
708
+ IteratorAge:
709
+ AlarmActions: crit
710
+ Namespace: AWS/Lambda
711
+ ComparisonOperator: GreaterThanThreshold
712
+ DimensionsName: FunctionName
713
+ Statistic: Average
714
+ Threshold: 600000
715
+ Period: 60
716
+ EvaluationPeriods: 5
717
+ MetricName: IteratorAge
718
+ TreatMissingData: notBreaching
719
+ LambdaFunctionDuration:
720
+ Duration:
721
+ AlarmActions: crit
722
+ Namespace: AWS/Lambda
723
+ ComparisonOperator: GreaterThanThreshold
724
+ DimensionsName: FunctionName
725
+ Statistic: Average
726
+ Threshold: 30
727
+ Period: 60
728
+ EvaluationPeriods: 5
729
+ MetricName: Duration
730
+ TreatMissingData: notBreaching
731
+ LambdaFunctionErrors:
732
+ Errors:
733
+ AlarmActions: crit
734
+ Namespace: AWS/Lambda
735
+ ComparisonOperator: GreaterThanThreshold
736
+ DimensionsName: FunctionName
737
+ Statistic: Average
738
+ Threshold: 0.5
739
+ Period: 60
740
+ EvaluationPeriods: 5
741
+ MetricName: Errors
742
+ TreatMissingData: notBreaching
743
+ CloudFrontDistribution:
744
+ 4xxErrorRate:
745
+ AlarmActions: warn
746
+ Namespace: AWS/CloudFront
747
+ ComparisonOperator: GreaterThanThreshold
748
+ DimensionsName: DistributionId
749
+ SecondaryDimensions: [ { Name: 'Region', Value: 'Global' }]
750
+ Statistic: Sum
751
+ Threshold: 5
752
+ EvaluationPeriods: 2
753
+ MetricName: 4xxErrorRate
754
+ TreatMissingData: breaching
755
+ 5xxErrorRate:
756
+ AlarmActions: warn
757
+ Namespace: AWS/CloudFront
758
+ ComparisonOperator: GreaterThanThreshold
759
+ SecondaryDimensions: [ { Name: 'Region', Value: 'Global' }]
760
+ DimensionsName: DistributionId
761
+ Statistic: Average
762
+ Threshold: 5
763
+ EvaluationPeriods: 2
764
+ MetricName: 5xxErrorRate
765
+ TreatMissingData: breaching
766
+ TotalErrorRate:
767
+ AlarmActions: warn
768
+ Namespace: AWS/CloudFront
769
+ ComparisonOperator: GreaterThanThreshold
770
+ SecondaryDimensions: [ { Name: 'Region', Value: 'Global' }]
771
+ DimensionsName: DistributionId
772
+ Statistic: Average
773
+ Threshold: 5
774
+ EvaluationPeriods: 5
775
+ MetricName: TotalErrorRate
776
+ TreatMissingData: breaching
@@ -126,9 +126,15 @@ CloudFormation do
126
126
  dimensionValue = FnSelect('1',FnSplit('loadbalancer/',Ref("GetPhysicalId#{resourceHash}"))) if dimensionsNames[index] == 'LoadBalancer'
127
127
  dimensionValue = FnSelect('1',FnSplit('service/',Ref("GetPhysicalId#{resourceHash}"))) if dimensionsNames[index] == 'ServiceName'
128
128
  dimensionValue = FnJoin('', [Ref("GetPhysicalId#{resourceHash}"),'-001']) if dimensionsNames[index] == 'CacheClusterId'
129
+ dimensionValue = FnSelect('4',FnSplit('/',Ref("GetPhysicalId#{resourceHash}"))) if dimensionsNames[index] == 'QueueName'
129
130
  # Prepare conditions based on physical resource ID values
130
131
  conditions << FnNot(FnEquals(Ref("GetPhysicalId#{resourceHash}"),'null'))
131
132
  dimensions << { Name: dimensionsNames[index], Value: dimensionValue }
133
+ if params.key?('SecondaryDimensions')
134
+ params['SecondaryDimensions'].each do |secondaryDimension|
135
+ dimensions << secondaryDimension
136
+ end
137
+ end
132
138
  end
133
139
  params['Dimensions'] = dimensions
134
140
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cfn_monitor
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.2
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Base2Services
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: exe
12
12
  cert_chain: []
13
- date: 2019-05-29 00:00:00.000000000 Z
13
+ date: 2019-06-20 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: thor
@@ -247,7 +247,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
247
247
  - !ruby/object:Gem::Version
248
248
  version: '0'
249
249
  requirements: []
250
- rubygems_version: 3.0.3
250
+ rubygems_version: 3.0.4
251
251
  signing_key:
252
252
  specification_version: 4
253
253
  summary: Configure and generate a cloudwatch monitoring cloudformation stack