sensu-plugins-aws 2.3.0 → 2.4.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- MjZiZDczN2YwYTQ3NTkzZGYwYTNmYjY0ODg4MzA0NTJlYTlmODNlMQ==
4
+ NmIxNTU0MzhkZTAzOGNhODc3OWY0ZmY2OTgzZThkMThjYjVhYmZlNw==
5
5
  data.tar.gz: !binary |-
6
- NGNmMjZjMzZiN2YwYjNmOTA3OGZmZjE1MWVlYjU1ZDljZTk4NTMxNg==
6
+ NzlhNTNkN2ViMWYxMjdhZTQxN2FhNWQ2MTA1NmE5ZTA4ZDlkOGEwYw==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- NGY2MjMxZTdlYmNhNzk1NzUzZjQ5YWE5MGIyYzNhMGNlYTdmOTM4MzBkNWEx
10
- NTkwZDI5NDlhZTQ3OWI0N2RmZTc3ZTA1NjE4Y2IxY2I4ZDNhNTdhNDg0ZWFj
11
- NTE0NTY5N2RhNDc5ZTkyZWFhZmE0ZjRlMmIzN2M5YWY4NzJmODY=
9
+ YTNmNzc0YWM2ZGYyMTQzYTU0N2UyMGZjZGNiMDNiNzQwMGU3NDE1OWVjOTQx
10
+ N2FlMWQwZWY3ZDk0NmFkNjAwZjllMWY1NzU5YTdmZGZhMmRiNDhkZGY1NWFl
11
+ NDU5OWZhNTE5Zjg3NWU2N2IyNTVlNTM5Mjg5NzdlYmNiNzExOWY=
12
12
  data.tar.gz: !binary |-
13
- MzQ0YWU2MjE2NWMyYmM1NWM0OGFhMjg5ZjlhYmUwN2RkZjFiMjJjMGQ3NDdl
14
- YTY1N2ZhMzJlMzE5ZWRjMzRhMDVjYTk1NWE1NzQyYTU5MDRmZWU5NDVkODUy
15
- YmQwYzRlZjFkM2UzNDA2YTNmYjBjYzc3NzhiZWYyMDRlMDhmODE=
13
+ YmM1Njk5YzcxMDZlNGIyNDcxNjc2Nzk1NTkxODlkZDhkMjAyMzVlZjU2MTU1
14
+ Y2FhODk3MTJmNzBiMTQ1NjVmMzI5ZDQ3N2U1ODJlMTZiOWRkODBjNjA3NjJh
15
+ YzJmYmVjZTZmNDZmMTQwMTM1ZWY2ZjEzMGIwMDBjZjhjZDZjZjQ=
@@ -5,6 +5,21 @@ This CHANGELOG follows the format listed at [Keep A Changelog](http://keepachang
5
5
 
6
6
  ## [Unreleased]
7
7
 
8
+ ## [2.4.0] - 2016-04-13
9
+ ### Added
10
+ - Added metrics-ses.rb to collect SES metrics from GetSendStatistics
11
+ - Added check-ses-statistics.rb to check SES thresholds from GetSendStatistics
12
+ - check-emr-steps.rb: Added options to check different step status for check EMR steps
13
+ - metrics-emr.rb: Added cluster ID to EMR step metrics
14
+ - Added two handlers for increasing/decreasing desired capacity of autoscaling groups
15
+ - Implemented check for reserved instances
16
+ - Added check to ensure that some or all AWS ConfigService rules have full compliance
17
+ - Added check to ensure that SNS subscriptions is not pending
18
+ - handler-ec2_node.rb: protect from instance state_reason which may be nil
19
+ - Added check to ensure that some or all ECS Services are healthy on a cluster
20
+ - Added check to ensure a KMS key is available (enabled or disabled)
21
+ - metrics-elasticache.rb: retrieve BytesUsedForCache metric for redis nodes
22
+
8
23
  ## [2.3.0] - 2016-03-18
9
24
  ### Added
10
25
  - Implemented metrics for EMR cluster steps
@@ -147,7 +162,8 @@ WARNING: This release contains major breaking changes that will impact all user
147
162
  ### Added
148
163
  - initial release
149
164
 
150
- [Unreleased]: https://github.com/sensu-plugins/sensu-plugins-aws/compare/2.3.0...HEAD
165
+ [Unreleased]: https://github.com/sensu-plugins/sensu-plugins-aws/compare/2.4.0...HEAD
166
+ [2.4.0]: https://github.com/sensu-plugins/sensu-plugins-aws/compare/v2.3.0...2.4.0
151
167
  [2.3.0]: https://github.com/sensu-plugins/sensu-plugins-aws/compare/v2.2.0...2.3.0
152
168
  [2.2.0]: https://github.com/sensu-plugins/sensu-plugins-aws/compare/v2.1.1...2.2.0
153
169
  [2.1.1]: https://github.com/sensu-plugins/sensu-plugins-aws/compare/2.1.0...v2.1.1
data/README.md CHANGED
@@ -16,6 +16,8 @@
16
16
 
17
17
  **check-cloudwatch-alarm**
18
18
 
19
+ **check-configservice-rules**
20
+
19
21
  **check-dynamodb-capacity.rb**
20
22
 
21
23
  **check-dynamodb-throttle.rb**
@@ -28,6 +30,8 @@
28
30
 
29
31
  **check-ec2-network.rb**
30
32
 
33
+ **check-ecs-service-health.rb**
34
+
31
35
  **check-eip-allocation.rb**
32
36
 
33
37
  **check-elasticache-failover.rb**
@@ -54,18 +58,26 @@
54
58
 
55
59
  **check-instance-health.rb**
56
60
 
61
+ **check-kms-key.rb**
62
+
57
63
  **check-rds-events.rb**
58
64
 
59
65
  **check-rds.rb**
60
66
 
61
67
  **check-redshift-events.rb**
62
68
 
69
+ **check-reserved-instances.rb**
70
+
63
71
  **check-s3-bucket.rb**
64
72
 
65
73
  **check-s3-object.rb**
66
74
 
67
75
  **check-ses-limit.rb**
68
76
 
77
+ **check-ses-statistics.rb**
78
+
79
+ **check-sns-subscriptions**
80
+
69
81
  **check-sqs-messages.rb**
70
82
 
71
83
  **check-vpc-nameservers**
@@ -76,6 +88,10 @@
76
88
 
77
89
  **handler-ec2_node.rb**
78
90
 
91
+ **handler-scale-asg-down.rb**
92
+
93
+ **handler-scale-asg-up.rb**
94
+
79
95
  **handler-ses.rb**
80
96
 
81
97
  **handler-sns.rb**
@@ -94,6 +110,8 @@
94
110
 
95
111
  **metrics-emr-steps.rb**
96
112
 
113
+ **metrics-ses.rb**
114
+
97
115
  **metrics-sqs.rb**
98
116
 
99
117
 
@@ -102,12 +120,14 @@
102
120
  * /bin/check-autoscaling-cpucredits.rb
103
121
  * /bin/check-beanstalk-elb-metric.rb
104
122
  * /bin/check-certificate-expiry.rb
123
+ * /bin/check-configservice-rules.rb
105
124
  * /bin/check-cloudwatch-alarm.rb
106
125
  * /bin/check-dynamodb-capacity.rb
107
126
  * /bin/check-dynamodb-throttle.rb
108
127
  * /bin/check-ebs-snapshots.rb
109
128
  * /bin/check-ec2-filter.rb
110
129
  * /bin/check-ec2-network.rb
130
+ * /bin/check-ecs-service-health.rb
111
131
  * /bin/check-elasticache-failover.rb
112
132
  * /bin/check-elb-certs.rb
113
133
  * /bin/check-elb-health-fog.rb
@@ -124,6 +144,7 @@
124
144
  * /bin/check-redshift-events.rb
125
145
  * /bin/check-s3-object.rb
126
146
  * /bin/check-ses-limit.rb
147
+ * /bin/check-ses-statistics.rb
127
148
  * /bin/check-sqs-messages.rb
128
149
  * /bin/check-vpc-nameservers.rb
129
150
  * /bin/check_vpc_vpn.py
@@ -138,6 +159,7 @@
138
159
  * /bin/metrics-elb-full.rb
139
160
  * /bin/metrics-elb.rb
140
161
  * /bin/metrics-emr-steps.rb
162
+ * /bin/metrics-ses.rb
141
163
  * /bin/metrics-sqs.rb
142
164
 
143
165
  ## Usage
@@ -17,7 +17,7 @@
17
17
  # gem: sensu-plugin
18
18
  #
19
19
  # USAGE:
20
- # ./check-cloudwatch-metric -n CPUUtilization -d InstanceId=i-12345678,AvailabilityZone=us-east-1a -c 90
20
+ # ./check-cloudwatch-metric -m CPUUtilization -d InstanceId=i-12345678,AvailabilityZone=us-east-1a -c 90
21
21
  #
22
22
  # NOTES:
23
23
  #
@@ -0,0 +1,76 @@
1
+ #! /usr/bin/env ruby
2
+ #
3
+ # check-configservice-rules
4
+ #
5
+ # DESCRIPTION:
6
+ # This plugin uses the AWS ConfigService API to check
7
+ # for rules compliance. CRITICAL for non-compliance,
8
+ # UNKNOWN for insufficient data.
9
+ #
10
+ # OUTPUT:
11
+ # plain-text
12
+ #
13
+ # PLATFORMS:
14
+ # Linux, Windows, Mac
15
+ #
16
+ # DEPENDENCIES:
17
+ # gem: aws-sdk
18
+ # gem: sensu-plugin
19
+ #
20
+ # USAGE:
21
+ # ./check-configservice-rules.rb -r {us-east-1|eu-west-1} [-c My_Config_Rule]
22
+ #
23
+ # NOTES:
24
+ # As of this writing, ConfigService rules are only available in us-east-1.
25
+ # All other region selections will return an AccessDeniedException
26
+ #
27
+ # LICENSE:
28
+ # Norm MacLennan <nmaclennan@cimpress.com>
29
+ # Released under the same terms as Sensu (the MIT license); see LICENSE
30
+ # for details.
31
+
32
+ require 'sensu-plugin/check/cli'
33
+ require 'sensu-plugins-aws'
34
+ require 'aws-sdk'
35
+
36
+ class CheckConfigServiceRules < Sensu::Plugin::Check::CLI
37
+ include Common
38
+
39
+ option :aws_region,
40
+ short: '-r AWS_REGION',
41
+ long: '--aws-region AWS_REGION',
42
+ description: 'The AWS region in which to check rules. Currently only available in us-east-1.',
43
+ default: 'us-east-1'
44
+
45
+ option :config_rules,
46
+ short: '-c rule1,rule2',
47
+ long: '--config-rules rule1,rule2',
48
+ description: 'A list of config rules to consider. Default is all rules.'
49
+
50
+ def get_config_rules_data(rules = nil)
51
+ options = { config_rule_names: rules.split(',') } if rules
52
+ config_client = Aws::ConfigService::Client.new
53
+ config_client.describe_compliance_by_config_rule(options).compliance_by_config_rules
54
+ end
55
+
56
+ def get_rule_names_by_compliance_type(rules, compliance_type)
57
+ rules.select { |r| r.compliance.compliance_type == compliance_type }.collect(&:config_rule_name)
58
+ end
59
+
60
+ def run
61
+ rules = get_config_rules_data(config[:config_rules])
62
+
63
+ noncompliant = get_rule_names_by_compliance_type rules, 'NON_COMPLIANT'
64
+ unknown = get_rule_names_by_compliance_type rules, 'INSUFFICIENT_DATA'
65
+
66
+ if noncompliant.any?
67
+ critical("Config rules in violation: #{noncompliant.join(',')}")
68
+ elsif unknown.any?
69
+ unknown("Config rules in unknown state: #{unknown.join(',')}")
70
+ else
71
+ ok
72
+ end
73
+ rescue => e
74
+ unknown "An error occurred processing AWS ConfigService API: #{e.message}"
75
+ end
76
+ end
@@ -0,0 +1,111 @@
1
+ #! /usr/bin/env ruby
2
+ #
3
+ # check-ecs-service-health
4
+ #
5
+ # DESCRIPTION:
6
+ # This plugin uses the AWS ECS API to check the running
7
+ # and desired task counts for services on a cluster.
8
+ # Any services with fewer running than desired tasks will
9
+ # are considered unhealthy.
10
+ #
11
+ # CRIT: 0 = running < desired
12
+ # WARN: 0 < running < desired
13
+ # OK: running >= desired
14
+ #
15
+ # OUTPUT:
16
+ # plain-text
17
+ #
18
+ # PLATFORMS:
19
+ # Linux, Windows, Mac
20
+ #
21
+ # DEPENDENCIES:
22
+ # gem: aws-sdk
23
+ # gem: sensu-plugin
24
+ #
25
+ # USAGE:
26
+ # ./check-ecs-service-health.rb -r {us-east-1|eu-west-1} -c default [-s my-service]
27
+ #
28
+ # NOTES:
29
+ #
30
+ # LICENSE:
31
+ # Norm MacLennan <nmaclennan@cimpress.com>
32
+ # Released under the same terms as Sensu (the MIT license); see LICENSE
33
+ # for details.
34
+
35
+ require 'sensu-plugin/check/cli'
36
+ require 'sensu-plugins-aws'
37
+ require 'aws-sdk'
38
+
39
+ class CheckEcsServiceHealth < Sensu::Plugin::Check::CLI
40
+ include Common
41
+
42
+ option :aws_region,
43
+ short: '-r AWS_REGION',
44
+ long: '--aws-region AWS_REGION',
45
+ description: 'The AWS region in which to check rules. Currently only available in us-east-1.',
46
+ default: 'us-east-1'
47
+
48
+ option :cluster_name,
49
+ short: '-c NAME',
50
+ long: '--cluster-name NAME',
51
+ description: 'The cluster to check services on.',
52
+ default: 'default'
53
+
54
+ option :services,
55
+ short: '-s SERVICE',
56
+ long: '--service NAME',
57
+ description: 'The service to check run status on.'
58
+
59
+ option :warn_as_crit,
60
+ short: '-w',
61
+ long: '--warn_as_crit',
62
+ description: 'Consider it critical when any desired tasks are not running. Otherwise, only 0 is critical.'
63
+
64
+ def ecs_client
65
+ @ecs_client ||= Aws::ECS::Client.new
66
+ end
67
+
68
+ # List of requested services or all services registered to the cluster
69
+ def service_list(cluster = 'default', services = nil)
70
+ return services.split ',' if services
71
+ ecs_client.list_services(cluster: cluster)['service_arns']
72
+ end
73
+
74
+ def service_details(cluster = 'default', services = nil)
75
+ ecs_client.describe_services(cluster: cluster, services: service_list(cluster, services))['services']
76
+ end
77
+
78
+ def bucket_service(running_count, desired_count)
79
+ if running_count == 0 && desired_count > 0
80
+ :critical
81
+ elsif running_count < desired_count
82
+ :warn
83
+ else
84
+ :ok
85
+ end
86
+ end
87
+
88
+ # Unhealthy if service has fewer running tasks than desired
89
+ def services_by_health(cluster = 'default', services = nil)
90
+ service_details(cluster, services).group_by { |s| bucket_service(s[:running_count], s[:desired_count]) }
91
+ end
92
+
93
+ def run
94
+ service_healths = services_by_health(config[:cluster_name], config[:services])
95
+
96
+ unhealthy = []
97
+ unhealthy.concat(service_healths[:critical]) if service_healths.key? :critical
98
+ unhealthy.concat(service_healths[:warn]) if service_healths.key? :warn
99
+ unhealthy = unhealthy.collect { |s| "#{s.service_name} (#{s.running_count}/#{s.desired_count})" }
100
+
101
+ if service_healths.key?(:critical) || (config[:warn_as_crit] && service_healths.key?(:warn))
102
+ critical("Unhealthy ECS Services: #{unhealthy.join ', '}")
103
+ elsif service_healths.key?(:warn)
104
+ warning("Unhealthy ECS Services: #{unhealthy.join ', '}")
105
+ else
106
+ ok
107
+ end
108
+ rescue => e
109
+ unknown "An error occurred processing AWS ECS API: #{e.message}"
110
+ end
111
+ end
@@ -8,13 +8,12 @@
8
8
  # OUTPUT:
9
9
  # plain-text
10
10
  #
11
- #
12
11
  # DEPENDENCIES:
13
12
  # gem: aws-sdk
14
13
  # gem: sensu-plugin
15
14
  #
16
15
  # USAGE:
17
- # check-emr-steps.rb -r us-west-2 -b 'My Cluster'
16
+ # check-emr-steps.rb -r us-west-2 -b 'My Cluster' -t FAILED -c 0
18
17
  #
19
18
  # This will alert on any failed steps in the past 10 minutes on the latest cluster
20
19
  # with the name 'My Cluster'.
@@ -29,7 +28,7 @@ require 'sensu-plugins-aws'
29
28
  require 'sensu-plugin/metric/cli'
30
29
  require 'aws-sdk'
31
30
 
32
- class CheckEMRSteps < Sensu::Plugin::Metric::CLI::Graphite
31
+ class CheckEMRSteps < Sensu::Plugin::Check::CLI
33
32
  include Common
34
33
 
35
34
  option :scheme,
@@ -50,6 +49,18 @@ class CheckEMRSteps < Sensu::Plugin::Metric::CLI::Graphite
50
49
  description: 'The name of the EMR cluster',
51
50
  required: true
52
51
 
52
+ option :status,
53
+ short: '-t STEP_STATUS',
54
+ long: '--step-status',
55
+ description: 'Step status to check, [PENDING RUNNING COMPLETED CANCELLED FAILED INTERRUPTED]',
56
+ default: 'FAILED'
57
+
58
+ option :count,
59
+ short: '-c COUNT',
60
+ long: '--count',
61
+ description: 'Max number of steps with this status.',
62
+ default: 0
63
+
53
64
  def run
54
65
  emr = Aws::EMR::Client.new(aws_config)
55
66
  begin
@@ -60,19 +71,19 @@ class CheckEMRSteps < Sensu::Plugin::Metric::CLI::Graphite
60
71
 
61
72
  steps = emr.list_steps(
62
73
  cluster_id: cluster.id,
63
- step_states: ['FAILED']
74
+ step_states: config[:status]
64
75
  ).steps
65
76
 
66
77
  messages = []
67
78
  now = Time.new
68
79
  failed = steps.select { |step| now - step.status.timeline.end_date_time < 10 * 60 }
69
- failed.each_entry { |step| messages << "Step #{step.id} '#{step.name}' has failed on cluster #{cluster.id} '#{cluster.name}'" }
70
-
71
- if messages.count > 0
72
- critical("#{messages.count} #{messages.count > 1 ? 'steps have' : 'step has'} failed: #{messages.join(',')}")
73
- else
74
- ok
80
+ if failed.size > config[:count]
81
+ failed.each_entry { |step| messages << "Step #{step.id} '#{step.name}' has failed on cluster #{cluster.id} '#{cluster.name}'" }
82
+ if messages.count > 0
83
+ critical("#{messages.count} #{messages.count > 1 ? 'steps have' : 'step has'} failed: #{messages.join(',')}")
84
+ end
75
85
  end
86
+ ok
76
87
  end
77
88
  end
78
89
  end
@@ -0,0 +1,73 @@
1
+ #! /usr/bin/env ruby
2
+ #
3
+ # check-kms-key
4
+ #
5
+ # DESCRIPTION:
6
+ # Check KMS values by KMS API.
7
+ #
8
+ # OUTPUT:
9
+ # plain-text
10
+ #
11
+ # PLATFORMS:
12
+ # Linux
13
+ #
14
+ # DEPENDENCIES:
15
+ # gem: aws-sdk
16
+ # gem: sensu-plugin
17
+ #
18
+ # USAGE:
19
+ # check-kms-key -k key_id
20
+ #
21
+ # Critical if KMS key id doesn't exist
22
+ # Warning if KMS key id exists but is not enabled
23
+ # Ok if KMS key id exists and is enabled
24
+ # Unknown if no key_id is provided
25
+ #
26
+ # NOTES:
27
+ #
28
+ # LICENSE:
29
+ # Released under the same terms as Sensu (the MIT license); see LICENSE
30
+ # for details.
31
+ #
32
+
33
+ require 'sensu-plugin/check/cli'
34
+ require 'sensu-plugins-aws'
35
+ require 'aws-sdk'
36
+
37
+ class CheckKMSKey < Sensu::Plugin::Check::CLI
38
+ include Common
39
+
40
+ option :aws_region,
41
+ short: '-r AWS_REGION',
42
+ long: '--aws-region REGION',
43
+ description: 'AWS Region.',
44
+ default: 'us-east-1'
45
+
46
+ option :key_id,
47
+ short: '-k ID',
48
+ long: '--key-id ID',
49
+ description: 'KMS key identifier',
50
+ default: nil
51
+
52
+ def kms_client
53
+ @kms_client ||= Aws::KMS::Client.new
54
+ end
55
+
56
+ def check_key(id)
57
+ return kms_client.describe_key(key_id: id)['key_metadata']['enabled']
58
+ rescue Aws::KMS::Errors::NotFoundException
59
+ critical 'Key doesnt exist'
60
+ rescue => e
61
+ unknown "Failed to check key #{id}: #{e}"
62
+ end
63
+
64
+ def run
65
+ if config[:key_id].nil?
66
+ unknown 'No KMS key id provided. See help for usage details'
67
+ elsif check_key(config[:key_id])
68
+ ok 'Key exists and is enabled'
69
+ else
70
+ warning 'Key exists but is not enabled'
71
+ end
72
+ end
73
+ end
@@ -0,0 +1,80 @@
1
+ #! /usr/bin/env ruby
2
+ #
3
+ # check-reserved-instances
4
+ #
5
+ # DESCRIPTION:
6
+ # This plugin checks if reserved instances expire soon.
7
+ #
8
+ # OUTPUT:
9
+ # plain-text
10
+ #
11
+ # PLATFORMS:
12
+ # Linux
13
+ #
14
+ # DEPENDENCIES:
15
+ # gem: aws-sdk
16
+ # gem: sensu-plugin
17
+ #
18
+ # USAGE:
19
+ # ./check-reserved-instances.rb --aws-region eu-west-1 --use-iam
20
+ #
21
+ # NOTES:
22
+ #
23
+ # LICENSE:
24
+ # Copyright (c) 2015, Olivier Bazoud, olivier.bazoud@gmail.com
25
+ # Released under the same terms as Sensu (the MIT license); see LICENSE
26
+ # for details.
27
+ #
28
+
29
+ require 'sensu-plugin/check/cli'
30
+ require 'sensu-plugins-aws'
31
+ require 'aws-sdk'
32
+
33
+ class CheckReservedInstances < Sensu::Plugin::Check::CLI
34
+ include Common
35
+
36
+ option :aws_region,
37
+ short: '-r AWS_REGION',
38
+ long: '--aws-region REGION',
39
+ description: 'AWS Region (defaults to us-east-1).',
40
+ default: 'us-east-1'
41
+
42
+ option :warning,
43
+ description: 'Warn if expire date is lower age in seconds',
44
+ short: '-w SECONDS',
45
+ long: '--warning SECONDS',
46
+ default: 60 * 60 * 24 * 5,
47
+ proc: proc(&:to_i)
48
+
49
+ option :critical,
50
+ description: 'Critical if expire date is lower age in seconds',
51
+ short: '-c SECONDS',
52
+ long: '--critical SECONDS',
53
+ default: 60 * 60 * 24 * 30 * 2,
54
+ proc: proc(&:to_i)
55
+
56
+ def run
57
+ reserved_instances_critical = []
58
+ reserved_instances_warning = []
59
+
60
+ ec2 = Aws::EC2::Client.new
61
+ reserved_instances = ec2.describe_reserved_instances(filters: [{ name: 'state', values: ['active'] }]).reserved_instances
62
+
63
+ reserved_instances.each do |reserved_instance|
64
+ age = reserved_instance.end.to_i - Time.now.to_i
65
+ if age < config[:critical]
66
+ reserved_instances_critical << reserved_instance.reserved_instances_id
67
+ elsif age < config[:warning]
68
+ reserved_instances_warning << reserved_instance.reserved_instances_id
69
+ end
70
+ end
71
+
72
+ if !reserved_instances_critical.empty?
73
+ critical "Reserved instances will expire soon - #{reserved_instances_critical}"
74
+ elsif !reserved_instances_warning.empty?
75
+ warning "Reserved instances will expire soon - #{reserved_instances_warning}"
76
+ end
77
+
78
+ ok "#{reserved_instances.size} reserved instances"
79
+ end
80
+ end
@@ -62,7 +62,7 @@ class CheckS3Bucket < Sensu::Plugin::Check::CLI
62
62
  required: true
63
63
 
64
64
  option :key_name,
65
- short: '-b KEY_NAME',
65
+ short: '-n KEY_NAME',
66
66
  long: '--key-name',
67
67
  description: 'The name of key in the bucket',
68
68
  required: true
@@ -0,0 +1,139 @@
1
+ #! /usr/bin/env ruby
2
+ #
3
+ # check-ses-statistics
4
+ #
5
+ # DESCRIPTION:
6
+ # Alerts on threshold values for SES statistics
7
+ #
8
+ # OUTPUT:
9
+ # plain-text
10
+ #
11
+ # DEPENDENCIES:
12
+ # gem: aws-sdk
13
+ # gem: sensu-plugin
14
+ #
15
+ # USAGE:
16
+ # check-ses-statistics.rb -r us-west-2 -b 1 -B 2 -c 5 -C 10 -j 10 -J 20
17
+ #
18
+ # This will alert on bounces, complaints, rejects or delivery attempts
19
+ # if they equal or exceed (>=) threshold values,
20
+ #
21
+ # It will alert on delivery attempts if they fall below (<) threshold values.
22
+ #
23
+ # NOTES:
24
+ #
25
+ # LICENSE:
26
+ # Brandon Smith <freedom@reardencode.com>
27
+ # Released under the same terms as Sensu (the MIT license); see LICENSE
28
+ # for details.
29
+
30
+ require 'sensu-plugins-aws'
31
+ require 'sensu-plugin/metric/cli'
32
+ require 'aws-sdk'
33
+
34
+ class CheckSesStatistics < Sensu::Plugin::Check::CLI
35
+ include Common
36
+
37
+ option :aws_region,
38
+ short: '-r AWS_REGION',
39
+ long: '--aws-region REGION',
40
+ description: 'AWS Region (defaults to us-east-1).',
41
+ default: 'us-east-1'
42
+
43
+ option :low_delivery_warn,
44
+ short: '-l COUNT',
45
+ long: '--low_delivery_warn',
46
+ description: 'Number of delivery attempts to warn below.',
47
+ default: 0
48
+
49
+ option :low_delivery_crit,
50
+ short: '-L COUNT',
51
+ long: '--low_delivery_crit',
52
+ description: 'Number of delivery attempts to alert below.',
53
+ default: 0
54
+
55
+ option :delivery_warn,
56
+ short: '-d COUNT',
57
+ long: '--delivery_warn',
58
+ description: 'Number of delivery attempts to warn above.',
59
+ default: 0
60
+
61
+ option :delivery_crit,
62
+ short: '-D COUNT',
63
+ long: '--delivery_crit',
64
+ description: 'Number of delivery attempts to alert above.',
65
+ default: 0
66
+
67
+ option :complaint_warn,
68
+ short: '-c COUNT',
69
+ long: '--complaint_warn',
70
+ description: 'Number of complaints to warn above.',
71
+ default: 0
72
+
73
+ option :complaint_crit,
74
+ short: '-C COUNT',
75
+ long: '--complaint_crit',
76
+ description: 'Number of complaints to alert above.',
77
+ default: 0
78
+
79
+ option :reject_warn,
80
+ short: '-j COUNT',
81
+ long: '--reject_warn',
82
+ description: 'Number of rejects to warn above.',
83
+ default: 0
84
+
85
+ option :reject_crit,
86
+ short: '-J COUNT',
87
+ long: '--reject_crit',
88
+ description: 'Number of rejects to alert above.',
89
+ default: 0
90
+
91
+ option :bounce_warn,
92
+ short: '-b COUNT',
93
+ long: '--bounce_warn',
94
+ description: 'Number of bounces to warn above.',
95
+ default: 0
96
+
97
+ option :bounce_crit,
98
+ short: '-B COUNT',
99
+ long: '--bounce_crit',
100
+ description: 'Number of bounces to alert above.',
101
+ default: 0
102
+
103
+ def run
104
+ ses = Aws::SES::Client.new(aws_config)
105
+ begin
106
+ response = ses.get_send_statistics
107
+
108
+ unknown 'Empty response from AWS SES API' if response.empty? # Can this happen?
109
+ unknown 'No data points from AWS SES API' if response.send_data_points.empty?
110
+
111
+ data_point = response.send_data_points[-1]
112
+ bounces = data_point.bounces
113
+ rejects = data_point.rejects
114
+ complaints = data_point.complaints
115
+ delivery_attempts = data_point.delivery_attempts
116
+
117
+ message = "SES stats for #{data_point.timestamp}: "\
118
+ "#{delivery_attempts} delivery attempts, #{bounces} bounces, #{rejects} rejects, #{complaints} complaints"
119
+
120
+ if config[:complaint_crit] > 0 && config[:complaint_crit] <= complaints || \
121
+ config[:reject_crit] > 0 && config[:reject_crit] <= rejects || \
122
+ config[:bounce_crit] > 0 && config[:bounce_crit] <= bounces || \
123
+ config[:low_delivery_crit] > 0 && config[:low_delivery_crit] > bounces || \
124
+ config[:delivery_crit] > 0 && config[:delivery_crit] <= bounces
125
+
126
+ critical message
127
+ elsif config[:complaint_warn] > 0 && config[:complaint_warn] <= complaints || \
128
+ config[:reject_warn] > 0 && config[:reject_warn] <= rejects || \
129
+ config[:bounce_warn] > 0 && config[:bounce_warn] <= bounces || \
130
+ config[:low_delivery_warn] > 0 && config[:low_delivery_warn] > bounces || \
131
+ config[:delivery_warn] > 0 && config[:delivery_warn] <= bounces
132
+
133
+ warning message
134
+ else
135
+ ok message
136
+ end
137
+ end
138
+ end
139
+ end
@@ -0,0 +1,52 @@
1
+ #! /usr/bin/env ruby
2
+ #
3
+ # check-sns-subscriptions
4
+ #
5
+ # DESCRIPTION:
6
+ # This plugin checks if topics's subscriptions are not 'PendingConfirmation' state.
7
+ #
8
+ # OUTPUT:
9
+ # plain-text
10
+ #
11
+ # PLATFORMS:
12
+ # Linux
13
+ #
14
+ # DEPENDENCIES:
15
+ # gem: aws-sdk
16
+ # gem: sensu-plugin
17
+ #
18
+ # USAGE:
19
+ # ./check-sns-subscriptions.rb --aws-region eu-west-1
20
+ #
21
+ # NOTES:
22
+ #
23
+ # LICENSE:
24
+ # Copyright (c) 2016, Olivier Bazoud, olivier.bazoud@gmail.com
25
+ # Released under the same terms as Sensu (the MIT license); see LICENSE
26
+ # for details.
27
+ #
28
+
29
+ require 'sensu-plugin/check/cli'
30
+ require 'sensu-plugins-aws'
31
+ require 'aws-sdk'
32
+
33
+ class CheckSNSSubscriptions < Sensu::Plugin::Check::CLI
34
+ include Common
35
+
36
+ option :aws_region,
37
+ short: '-r AWS_REGION',
38
+ long: '--aws-region REGION',
39
+ description: 'AWS Region (defaults to us-east-1).',
40
+ default: 'us-east-1'
41
+
42
+ def run
43
+ sns = Aws::SNS::Client.new
44
+
45
+ subscriptions = sns.list_subscriptions.subscriptions
46
+
47
+ pending_confirmations = subscriptions.select { |subscription| subscription.subscription_arn == 'PendingConfirmation' }
48
+
49
+ critical "#{pending_confirmations.size} pending confirmations" unless pending_confirmations.empty?
50
+ ok
51
+ end
52
+ end
@@ -169,7 +169,7 @@ class Ec2Node < Sensu::Handler
169
169
  # method returns True
170
170
 
171
171
  # Returns instance state reason in AWS i.e: "Client.UserInitiatedShutdown"
172
- instance_state_reason = instances.instances[0].state_reason.code
172
+ instance_state_reason = instances.instances[0].state_reason.nil? ? nil : instances.instances[0].state_reason.code
173
173
  # Returns the instance state i.e: "terminated"
174
174
  instance_state = instances.instances[0].state.name
175
175
 
@@ -0,0 +1,131 @@
1
+ #! /usr/bin/env ruby
2
+ #
3
+ # handler-scale-down-asg
4
+ #
5
+ # DESCRIPTION:
6
+ # => Decreases the desired capacity of an AutoscalingGroup
7
+ #
8
+ # OUTPUT:
9
+ # plain text
10
+ #
11
+ # PLATFORMS:
12
+ # Linux
13
+ #
14
+ # DEPENDENCIES:
15
+ # gem: sensu-plugin
16
+ # gem: aws-sdk
17
+ #
18
+ # USAGE:
19
+ # -j JSONCONFIG - The name of a json config file to be used
20
+ #
21
+ # NOTES:
22
+ # Json config by default should be named asg_scaler.json and should have 2 levels.
23
+ # First level contains: "asg_scaler"
24
+ # Second level contains: "autoscaling_group" and "cooldown_period"
25
+ # example of a valid asg_scaler.json:
26
+ # {
27
+ # "asg_scaler":
28
+ # {
29
+ # "autoscaling_group":"SomeGroupName",
30
+ # "cooldown_period":"36"
31
+ # }
32
+ # }
33
+ #
34
+ # LICENSE:
35
+ # Brian Sizemore <bpsizemore@gmail.com>
36
+ # Released under the same terms as Sensu (the MIT license); see LICENSE
37
+ # for details.
38
+ #
39
+
40
+ require 'aws-sdk'
41
+ require 'json'
42
+ require 'sensu-handler'
43
+
44
+ class AsgScaler < Sensu::Handler
45
+ option :json_config,
46
+ description: 'Name of the json config file',
47
+ short: '-j JSONCONFIG',
48
+ long: '--json JSONCONFIG',
49
+ default: 'asg_scaler'
50
+
51
+ def autoscaling_group
52
+ get_setting('autoscaling_group')
53
+ end
54
+
55
+ def cooldown_period
56
+ get_setting('cooldown_period')
57
+ end
58
+
59
+ def json_config
60
+ cli ||= AsgScaler.new
61
+ cli.config[:json_config]
62
+ end
63
+
64
+ def get_setting(name)
65
+ config_file ||= File.read("#{json_config}.json")
66
+ config ||= JSON.parse(config_file)
67
+ config['asg_scaler'][name]
68
+ end
69
+
70
+ def handle
71
+ @asg = autoscaling_group
72
+ @autoscaling = Aws::AutoScaling::Client.new
73
+ if !out_of_cooldown
74
+ puts "An autoscaling event took place within the past #{cooldown_period} minutes. No action will be taken."
75
+ else
76
+ puts "No event has taken place within the past #{cooldown_period} minutes. Proceeding..."
77
+ begin_scaling
78
+ end
79
+ end
80
+
81
+ def asg_min_instances
82
+ resp = @autoscaling.describe_auto_scaling_groups(auto_scaling_group_names: [@asg],
83
+ max_records: 1)
84
+ resp[0][0][3]
85
+ end
86
+
87
+ def filter_silenced
88
+ # The inhereted filter_silenced method is not working, currently investigating.
89
+ # Handler works properly with this spoofed method.
90
+ end
91
+
92
+ def out_of_cooldown
93
+ resp = @autoscaling.describe_scaling_activities(auto_scaling_group_name: @asg,
94
+ max_records: 1)
95
+ resp = resp[0][0][4].to_s
96
+ resp = resp.sub(' ', 'T')
97
+ resp = resp.sub(' UTC', '+00:00')
98
+
99
+ # Time of last autoscaling event
100
+ aws = DateTime.iso8601(resp)
101
+
102
+ # Current System Time
103
+ now = DateTime.now.new_offset(0)
104
+ diff = (now - aws).to_f # This produces time since last event in days
105
+ diff = diff * 24 * 60 # This produces the time since last event in minutes
106
+ diff > cooldown_period.to_f
107
+ end
108
+
109
+ def current_size
110
+ resp = @autoscaling.describe_auto_scaling_groups(auto_scaling_group_names: [@asg],
111
+ max_records: 1)
112
+ resp[0][0][5]
113
+ end
114
+
115
+ def scale_down
116
+ size = current_size.to_i
117
+ new_size = size - 1
118
+ puts 'scaling down...'
119
+ @autoscaling.set_desired_capacity(auto_scaling_group_name: @asg,
120
+ desired_capacity: new_size)
121
+ end
122
+
123
+ def begin_scaling
124
+ stack_size = current_size
125
+ if stack_size > asg_min_instances
126
+ scale_down
127
+ else
128
+ puts 'The cluster has the minimum amount of instances. No action will be taken.'
129
+ end
130
+ end
131
+ end
@@ -0,0 +1,131 @@
1
+ #! /usr/bin/env ruby
2
+ #
3
+ # handler-scale-up-asg
4
+ #
5
+ # DESCRIPTION:
6
+ # => Increases the desired capacity of an AutoscalingGroup
7
+ #
8
+ # OUTPUT:
9
+ # plain text
10
+ #
11
+ # PLATFORMS:
12
+ # Linux
13
+ #
14
+ # DEPENDENCIES:
15
+ # gem: sensu-plugin
16
+ # gem: aws-sdk
17
+ #
18
+ # USAGE:
19
+ # -j JSONCONFIG - The name of a json config file to be used
20
+ #
21
+ # NOTES:
22
+ # Json config by default should be named asg_scaler.json and should have 2 levels.
23
+ # First level contains: "asg_scaler"
24
+ # Second level contains: "autoscaling_group" and "cooldown_period"
25
+ # example of a valid asg_scaler.json:
26
+ # {
27
+ # "asg_scaler":
28
+ # {
29
+ # "autoscaling_group":"SomeGroupName",
30
+ # "cooldown_period":"36"
31
+ # }
32
+ # }
33
+ #
34
+ # LICENSE:
35
+ # Brian Sizemore <bpsizemore@gmail.com>
36
+ # Released under the same terms as Sensu (the MIT license); see LICENSE
37
+ # for details.
38
+ #
39
+
40
+ require 'aws-sdk'
41
+ require 'json'
42
+ require 'sensu-handler'
43
+
44
+ class AsgScaler < Sensu::Handler
45
+ option :json_config,
46
+ description: 'Name of the json config file',
47
+ short: '-j JSONCONFIG',
48
+ long: '--json JSONCONFIG',
49
+ default: 'asg_scaler'
50
+
51
+ def autoscaling_group
52
+ get_setting('autoscaling_group')
53
+ end
54
+
55
+ def cooldown_period
56
+ get_setting('cooldown_period')
57
+ end
58
+
59
+ def json_config
60
+ cli ||= AsgScaler.new
61
+ cli.config[:json_config]
62
+ end
63
+
64
+ def get_setting(name)
65
+ config_file ||= File.read("#{json_config}.json")
66
+ config ||= JSON.parse(config_file)
67
+ config['asg_scaler'][name]
68
+ end
69
+
70
+ def handle
71
+ @asg = autoscaling_group
72
+ @autoscaling = Aws::AutoScaling::Client.new
73
+ if !out_of_cooldown
74
+ puts "An autoscaling event took place within the past #{cooldown_period} minutes. No action will be taken."
75
+ else
76
+ puts "No event has taken place within the past #{cooldown_period} minutes. Proceeding..."
77
+ begin_scaling
78
+ end
79
+ end
80
+
81
+ def asg_max_instances
82
+ resp = @autoscaling.describe_auto_scaling_groups(auto_scaling_group_names: [@asg],
83
+ max_records: 1)
84
+ resp[0][0][4]
85
+ end
86
+
87
+ def filter_silenced
88
+ # The inhereted filter_silenced method is not working, currently investigating.
89
+ # Handler works properly with this spoofed method.
90
+ end
91
+
92
+ def out_of_cooldown
93
+ resp = @autoscaling.describe_scaling_activities(auto_scaling_group_name: @asg,
94
+ max_records: 1)
95
+ resp = resp[0][0][4].to_s
96
+ resp = resp.sub(' ', 'T')
97
+ resp = resp.sub(' UTC', '+00:00')
98
+
99
+ # Time of last autoscaling event
100
+ aws = DateTime.iso8601(resp)
101
+
102
+ # Current System Time
103
+ now = DateTime.now.new_offset(0)
104
+ diff = (now - aws).to_f # This produces time since last event in days
105
+ diff = diff * 24 * 60 # This produces the time since last event in minutes
106
+ diff > cooldown_period.to_f
107
+ end
108
+
109
+ def current_size
110
+ resp = @autoscaling.describe_auto_scaling_groups(auto_scaling_group_names: [@asg],
111
+ max_records: 1)
112
+ resp[0][0][5]
113
+ end
114
+
115
+ def scale_up
116
+ size = current_size.to_i
117
+ new_size = size + 1
118
+ puts 'scaling down...'
119
+ @autoscaling.set_desired_capacity(auto_scaling_group_name: @asg,
120
+ desired_capacity: new_size)
121
+ end
122
+
123
+ def begin_scaling
124
+ stack_size = current_size
125
+ if stack_size < asg_max_instances
126
+ scale_up
127
+ else
128
+ puts 'The cluster has the maximum amount of instances. No action will be taken.'
129
+ end
130
+ end
131
+ end
@@ -116,6 +116,7 @@ class ElastiCacheMetrics < Sensu::Plugin::Metric::CLI::Graphite
116
116
  statistic_type = {
117
117
  'redis' => {
118
118
  'CPUUtilization' => 'Percent',
119
+ 'BytesUsedForCache' => 'Bytes',
119
120
  'SwapUsage' => 'Bytes',
120
121
  'FreeableMemory' => 'Bytes',
121
122
  'NetworkBytesIn' => 'Bytes',
@@ -74,6 +74,7 @@ class EMRStepMetrics < Sensu::Plugin::Metric::CLI::Graphite
74
74
  STATUS.each_entry { |status| data[status] = 0 }
75
75
  cluster_steps(emr, cluster.id, data)
76
76
  safe_name = config[:cluster_name].tr(' ', '_')
77
+ output config[:scheme] + '.' + safe_name + '.id.' + cluster_id
77
78
  STATUS.each_entry { |status| output config[:scheme] + '.' + safe_name + '.step.' + status, data[status] }
78
79
  end
79
80
  ok
@@ -0,0 +1,62 @@
1
+ #! /usr/bin/env ruby
2
+ #
3
+ # metrics-ses
4
+ #
5
+ # DESCRIPTION:
6
+ # Lists SES send statistics
7
+ #
8
+ # OUTPUT:
9
+ # metric data
10
+ #
11
+ # DEPENDENCIES:
12
+ # gem: aws-sdk
13
+ # gem: sensu-plugin
14
+ #
15
+ # USAGE:
16
+ # metrics-ses.rb -r us-west-2
17
+ #
18
+ # This will list out the statistics for the most recent 15 minutes from SES
19
+ #
20
+ # NOTES:
21
+ #
22
+ # LICENSE:
23
+ # Brandon Smith <freedom@reardencode.com>
24
+ # Released under the same terms as Sensu (the MIT license); see LICENSE
25
+ # for details.
26
+
27
+ require 'sensu-plugins-aws'
28
+ require 'sensu-plugin/metric/cli'
29
+ require 'aws-sdk'
30
+
31
+ class SesMetrics < Sensu::Plugin::Metric::CLI::Graphite
32
+ include Common
33
+
34
+ option :scheme,
35
+ description: 'Metric naming scheme, text to prepend to metric',
36
+ short: '-s SCHEME',
37
+ long: '--scheme SCHEME',
38
+ default: 'sensu.aws.ses'
39
+
40
+ option :aws_region,
41
+ short: '-r AWS_REGION',
42
+ long: '--aws-region REGION',
43
+ description: 'AWS Region (defaults to us-east-1).',
44
+ default: 'us-east-1'
45
+
46
+ def run
47
+ ses = Aws::SES::Client.new(aws_config)
48
+ begin
49
+ response = ses.get_send_statistics
50
+
51
+ unknown 'Empty response from AWS SES API' if response.empty? # Can this happen?
52
+ unknown 'No data points from AWS SES API' if response.send_data_points.empty?
53
+
54
+ data_point = response.send_data_points[-1]
55
+ output config[:scheme] + '.bounces', data_point.bounces
56
+ output config[:scheme] + '.rejects', data_point.rejects
57
+ output config[:scheme] + '.complaints', data_point.complaints
58
+ output config[:scheme] + '.delivery_attempts', data_point.delivery_attempts
59
+ end
60
+ ok
61
+ end
62
+ end
@@ -1,7 +1,7 @@
1
1
  module SensuPluginsAWS
2
2
  module Version
3
3
  MAJOR = 2
4
- MINOR = 3
4
+ MINOR = 4
5
5
  PATCH = 0
6
6
  VER_STRING = [MAJOR, MINOR, PATCH].compact.join('.')
7
7
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sensu-plugins-aws
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.3.0
4
+ version: 2.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sensu-Plugins and contributors
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-03-18 00:00:00.000000000 Z
11
+ date: 2016-04-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: aws-sdk
@@ -232,12 +232,14 @@ executables:
232
232
  - check-certificate-expiry.rb
233
233
  - check-cloudwatch-alarm.rb
234
234
  - check-cloudwatch-metric.rb
235
+ - check-configservice-rules.rb
235
236
  - check-dynamodb-capacity.rb
236
237
  - check-dynamodb-throttle.rb
237
238
  - check-ebs-snapshots.rb
238
239
  - check-ec2-cpu_balance.rb
239
240
  - check-ec2-filter.rb
240
241
  - check-ec2-network.rb
242
+ - check-ecs-service-health.rb
241
243
  - check-eip-allocation.rb
242
244
  - check-elasticache-failover.rb
243
245
  - check-elb-certs.rb
@@ -251,18 +253,24 @@ executables:
251
253
  - check-emr-steps.rb
252
254
  - check-instance-events.rb
253
255
  - check-instance-health.rb
256
+ - check-kms-key.rb
254
257
  - check-rds-events.rb
255
258
  - check-rds.rb
256
259
  - check-redshift-events.rb
260
+ - check-reserved-instances.rb
257
261
  - check-s3-bucket.rb
258
262
  - check-s3-object.rb
259
263
  - check-sensu-client.rb
260
264
  - check-ses-limit.rb
265
+ - check-ses-statistics.rb
266
+ - check-sns-subscriptions.rb
261
267
  - check-sqs-messages.rb
262
268
  - check-trustedadvisor-service-limits.rb
263
269
  - check-vpc-nameservers.rb
264
270
  - check-vpc-vpn.rb
265
271
  - handler-ec2_node.rb
272
+ - handler-scale-asg-down.rb
273
+ - handler-scale-asg-up.rb
266
274
  - handler-ses.rb
267
275
  - handler-sns.rb
268
276
  - metrics-autoscaling-instance-count.rb
@@ -272,6 +280,7 @@ executables:
272
280
  - metrics-elb-full.rb
273
281
  - metrics-elb.rb
274
282
  - metrics-emr-steps.rb
283
+ - metrics-ses.rb
275
284
  - metrics-sqs.rb
276
285
  extensions: []
277
286
  extra_rdoc_files: []
@@ -284,12 +293,14 @@ files:
284
293
  - bin/check-certificate-expiry.rb
285
294
  - bin/check-cloudwatch-alarm.rb
286
295
  - bin/check-cloudwatch-metric.rb
296
+ - bin/check-configservice-rules.rb
287
297
  - bin/check-dynamodb-capacity.rb
288
298
  - bin/check-dynamodb-throttle.rb
289
299
  - bin/check-ebs-snapshots.rb
290
300
  - bin/check-ec2-cpu_balance.rb
291
301
  - bin/check-ec2-filter.rb
292
302
  - bin/check-ec2-network.rb
303
+ - bin/check-ecs-service-health.rb
293
304
  - bin/check-eip-allocation.rb
294
305
  - bin/check-elasticache-failover.rb
295
306
  - bin/check-elb-certs.rb
@@ -303,19 +314,25 @@ files:
303
314
  - bin/check-emr-steps.rb
304
315
  - bin/check-instance-events.rb
305
316
  - bin/check-instance-health.rb
317
+ - bin/check-kms-key.rb
306
318
  - bin/check-rds-events.rb
307
319
  - bin/check-rds.rb
308
320
  - bin/check-redshift-events.rb
321
+ - bin/check-reserved-instances.rb
309
322
  - bin/check-s3-bucket.rb
310
323
  - bin/check-s3-object.rb
311
324
  - bin/check-sensu-client.rb
312
325
  - bin/check-ses-limit.rb
326
+ - bin/check-ses-statistics.rb
327
+ - bin/check-sns-subscriptions.rb
313
328
  - bin/check-sqs-messages.rb
314
329
  - bin/check-trustedadvisor-service-limits.rb
315
330
  - bin/check-vpc-nameservers.rb
316
331
  - bin/check-vpc-vpn.rb
317
332
  - bin/check_vpc_vpn.py
318
333
  - bin/handler-ec2_node.rb
334
+ - bin/handler-scale-asg-down.rb
335
+ - bin/handler-scale-asg-up.rb
319
336
  - bin/handler-ses.rb
320
337
  - bin/handler-sns.rb
321
338
  - bin/metrics-autoscaling-instance-count.rb
@@ -325,6 +342,7 @@ files:
325
342
  - bin/metrics-elb-full.rb
326
343
  - bin/metrics-elb.rb
327
344
  - bin/metrics-emr-steps.rb
345
+ - bin/metrics-ses.rb
328
346
  - bin/metrics-sqs.rb
329
347
  - lib/sensu-plugins-aws.rb
330
348
  - lib/sensu-plugins-aws/cloudwatch-common.rb