sensu-plugins-aws 2.1.0 → 2.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. checksums.yaml +13 -5
  2. checksums.yaml.gz.sig +0 -0
  3. data/CHANGELOG.md +26 -1
  4. data/README.md +4 -1
  5. data/bin/check-autoscaling-cpucredits.rb +21 -21
  6. data/bin/check-beanstalk-elb-metric.rb +3 -3
  7. data/bin/check-certificate-expiry.rb +5 -5
  8. data/bin/check-cloudwatch-metric.rb +2 -2
  9. data/bin/check-dynamodb-capacity.rb +29 -18
  10. data/bin/check-dynamodb-throttle.rb +28 -17
  11. data/bin/check-ec2-cpu_balance.rb +107 -0
  12. data/bin/check-ec2-filter.rb +5 -5
  13. data/bin/check-ec2-network.rb +19 -15
  14. data/bin/check-elb-certs.rb +2 -2
  15. data/bin/check-elb-health-fog.rb +3 -5
  16. data/bin/check-elb-health-sdk.rb +5 -5
  17. data/bin/check-elb-latency.rb +1 -1
  18. data/bin/check-elb-sum-requests.rb +1 -1
  19. data/bin/check-emr-cluster.rb +3 -5
  20. data/bin/check-instance-events.rb +2 -4
  21. data/bin/check-instance-health.rb +80 -0
  22. data/bin/check-rds-events.rb +18 -7
  23. data/bin/check-rds.rb +30 -27
  24. data/bin/check-s3-bucket.rb +2 -4
  25. data/bin/check-s3-object.rb +2 -4
  26. data/bin/check-vpc-vpn.rb +4 -6
  27. data/bin/handler-ec2_node.rb +6 -15
  28. data/bin/handler-ses.rb +5 -5
  29. data/bin/handler-sns.rb +12 -14
  30. data/bin/metrics-autoscaling-instance-count.rb +5 -5
  31. data/bin/metrics-ec2-count.rb +10 -10
  32. data/bin/metrics-elasticache.rb +5 -5
  33. data/bin/metrics-elb-full.rb +5 -5
  34. data/bin/metrics-sqs.rb +5 -5
  35. data/lib/sensu-plugins-aws/cloudwatch-common.rb +9 -8
  36. data/lib/sensu-plugins-aws/common.rb +1 -3
  37. data/lib/sensu-plugins-aws/filter.rb +2 -2
  38. data/lib/sensu-plugins-aws/version.rb +1 -1
  39. data.tar.gz.sig +0 -0
  40. metadata +139 -125
  41. metadata.gz.sig +0 -0
checksums.yaml CHANGED
@@ -1,7 +1,15 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 2efbcaa411b6ef7da6f0c0217d3949b8a94ecce0
4
- data.tar.gz: 908abecb23899de8f95741c7fbc515031ec9d149
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ YjA0M2U4MDE1M2U4N2Y3NGY0ODVjZDM3M2RlODNhYmY3MTFkZDI3YQ==
5
+ data.tar.gz: !binary |-
6
+ Mjc2NDdjYzliYjNlMzM0NzMwZWM3OTVmZTc4MjdhMDY3MjJiYWQ2Yw==
5
7
  SHA512:
6
- metadata.gz: 9735551c5d5a0117dcfab9709ddf7a572cb0ebef73bb079bf0f1e450c81d805dd744a4dbb3454ba51b21e6f7b24d8dc5172452b4ee67b49deb343218c4966ba0
7
- data.tar.gz: 69fe7444c11198923d7d4ec4f63f03ba3109997eccc62c0a8ed132183a8d8badaac129864cf83f7c973bb59e92409f786a5de754c1036aafdd6b0a5ed63a1493
8
+ metadata.gz: !binary |-
9
+ ODU0NzhhNjQwODg2ZTdmMmRhYWFhNDIxZTFlNTQ1OTcxYmZlMTlhNjMxZTFl
10
+ NzU2YjMyNmY3OGMzNTgyZjcwMmQzN2IzNzM1YTk0YTQxOTI4MjU0ZGY4OTcx
11
+ YTBjMTU2NjE3MzIyZWNiZDIxZTEzZDA1ZDk1NjZkNGE4YjE5Mzg=
12
+ data.tar.gz: !binary |-
13
+ M2MwMGNmZTBiYWUyYzAxMTkwMWI0ZGNjNmUzNDkxNTBjOTI1OGMzMjUxMzc0
14
+ OTUwNTM2NDhhMzAxN2I1YTgyNTUzODEwNDUzMzIzYjMyM2UyM2NjZWExMDJl
15
+ YzcyZTFjMWE4ODhkYTUzZTRmYzE2MmRlZjJiMjFkZDEyZDZkMWY=
checksums.yaml.gz.sig CHANGED
Binary file
data/CHANGELOG.md CHANGED
@@ -5,6 +5,19 @@ This CHANGELOG follows the format listed at [Keep A Changelog](http://keepachang
5
5
 
6
6
  ## Unreleased
7
7
 
8
+ ## [2.1.1] - 2016-02-05
9
+ ### Added
10
+ - check-ec2-cpu_balance.rb: scans for any t2 instances that are below a certain threshold of cpu credits
11
+ - check-instance-health.rb: adding ec2 instance health and event data
12
+
13
+ ### Changed
14
+ - Update to aws-sdk 2.2.11 and aws-sdk-v1 1.66.0
15
+
16
+ ### Fixed
17
+ - check-vpc-vpn.rb: fix execution error by running with aws-sdk-v1
18
+ - handler-ec2_node.rb: default values for ec2_states were ignored
19
+ - added new certs
20
+
8
21
  ## [2.1.0] - 2016-01-15
9
22
  ### Added
10
23
  - check-elb-health-sdk.rb: add option for warning instead of critical when unhealthy instances are found
@@ -107,6 +120,18 @@ WARNING: This release contains major breaking changes that will impact all user
107
120
  ### Changed
108
121
  - removed cruft from /lib
109
122
 
110
- ## [0.0.1] - 2015-05-21
123
+ ## 0.0.1 - 2015-05-21
111
124
  ### Added
112
125
  - initial release
126
+
127
+ [unreleased]: https://github.com/sensu-plugins/sensu-plugins-aws/compare/2.1.1...HEAD
128
+ [2.1.1]: https://github.com/sensu-plugins/sensu-plugins-aws/compare/2.1.0...2.1.1
129
+ [2.1.0]: https://github.com/sensu-plugins/sensu-plugins-aws/compare/2.0.1...2.1.0
130
+ [2.0.1]: https://github.com/sensu-plugins/sensu-plugins-aws/compare/2.0.0...2.0.1
131
+ [2.0.0]: https://github.com/sensu-plugins/sensu-plugins-aws/compare/1.2.0...2.0.0
132
+ [1.2.0]: https://github.com/sensu-plugins/sensu-plugins-aws/compare/1.1.0...1.2.0
133
+ [1.1.0]: https://github.com/sensu-plugins/sensu-plugins-aws/compare/1.0.0...1.1.0
134
+ [1.0.0]: https://github.com/sensu-plugins/sensu-plugins-aws/compare/0.0.4...1.0.0
135
+ [0.0.4]: https://github.com/sensu-plugins/sensu-plugins-aws/compare/0.0.3...0.0.4
136
+ [0.0.3]: https://github.com/sensu-plugins/sensu-plugins-aws/compare/0.0.2...0.0.3
137
+ [0.0.2]: https://github.com/sensu-plugins/sensu-plugins-aws/compare/0.0.1...0.0.2
data/README.md CHANGED
@@ -5,7 +5,6 @@
5
5
  [![Code Climate](https://codeclimate.com/github/sensu-plugins/sensu-plugins-aws/badges/gpa.svg)](https://codeclimate.com/github/sensu-plugins/sensu-plugins-aws)
6
6
  [![Test Coverage](https://codeclimate.com/github/sensu-plugins/sensu-plugins-aws/badges/coverage.svg)](https://codeclimate.com/github/sensu-plugins/sensu-plugins-aws)
7
7
  [![Dependency Status](https://gemnasium.com/sensu-plugins/sensu-plugins-aws.svg)](https://gemnasium.com/sensu-plugins/sensu-plugins-aws)
8
- [![Codeship Status for sensu-plugins/sensu-plugins-aws](https://codeship.com/projects/2a9c6e70-d4b4-0132-67ee-4e043b6b23b5/status?branch=master)](https://codeship.com/projects/77866)
9
8
 
10
9
  ## Functionality
11
10
 
@@ -23,6 +22,8 @@
23
22
 
24
23
  **check-ebs-snapshots.rb**
25
24
 
25
+ **check-ec2-cpu_balance.rb**
26
+
26
27
  **check-ec2-filter.rb**
27
28
 
28
29
  **check-ec2-network.rb**
@@ -47,6 +48,8 @@
47
48
 
48
49
  **check-instance-events.rb**
49
50
 
51
+ **check-instance-health.rb**
52
+
50
53
  **check-rds-events.rb**
51
54
 
52
55
  **check-rds.rb**
@@ -12,7 +12,7 @@
12
12
  # Linux
13
13
  #
14
14
  # DEPENDENCIES:
15
- # gem: aws-sdk-v1
15
+ # gem: aws-sdk
16
16
  # gem: sensu-plugin
17
17
  #
18
18
  # USAGE:
@@ -28,7 +28,7 @@
28
28
  #
29
29
 
30
30
  require 'sensu-plugin/check/cli'
31
- require 'aws-sdk-v1'
31
+ require 'aws-sdk'
32
32
 
33
33
  class CheckEc2CpuCredits < Sensu::Plugin::Check::CLI
34
34
  option :aws_access_key,
@@ -90,38 +90,38 @@ class CheckEc2CpuCredits < Sensu::Plugin::Check::CLI
90
90
  end
91
91
 
92
92
  def asg
93
- @asg ||= AWS::AutoScaling.new aws_config
93
+ @asg ||= Aws::AutoScaling::Client.new aws_config
94
94
  end
95
95
 
96
96
  def cloud_watch
97
- @cloud_watch ||= AWS::CloudWatch.new aws_config
97
+ @cloud_watch ||= Aws::CloudWatch::Client.new aws_config
98
98
  end
99
99
 
100
100
  def get_count_metric(group)
101
- cloud_watch.metrics
102
- .with_namespace('AWS/EC2')
103
- .with_metric_name("#{config[:countmetric]}")
104
- .with_dimensions(name: 'AutoScalingGroupName', value: group)
105
- .first
106
- end
107
-
108
- def statistics_options
109
- {
101
+ cloud_watch.get_metric_statistics(
102
+ namespace: 'AWS/EC2',
103
+ metric_name: config[:countmetric].to_s,
104
+ dimensions: [
105
+ {
106
+ name: 'AutoScalingGroupName',
107
+ value: group
108
+ }
109
+ ],
110
110
  start_time: config[:end_time] - 600,
111
- end_time: config[:end_time],
111
+ end_time: config[:end_time],
112
112
  statistics: ['Average'],
113
- period: config[:period]
114
- }
113
+ period: config[:period],
114
+ unit: 'Count'
115
+ )
115
116
  end
116
117
 
117
- def latest_value(metric)
118
- value = metric.statistics(statistics_options.merge unit: 'Count')
118
+ def latest_value(value)
119
119
  value.datapoints[0][:average].to_f unless value.datapoints[0].nil?
120
120
  end
121
121
 
122
122
  def check_metric(group)
123
123
  metric = get_count_metric group
124
- latest_value metric
124
+ latest_value metric unless metric.nil?
125
125
  end
126
126
 
127
127
  def check_group(group, reportstring, warnflag, critflag)
@@ -141,9 +141,9 @@ class CheckEc2CpuCredits < Sensu::Plugin::Check::CLI
141
141
  critflag = 0
142
142
  reportstring = ''
143
143
  if config[:group].nil?
144
- asg.groups.each do |group|
144
+ asg.describe_auto_scaling_groups.auto_scaling_groups.each do |group|
145
145
  if group.desired_capacity > 0
146
- reportstring, warnflag, critflag = check_group(group.name, reportstring, warnflag, critflag)
146
+ reportstring, warnflag, critflag = check_group(group.auto_scaling_group_name, reportstring, warnflag, critflag)
147
147
  end
148
148
  end
149
149
  else
@@ -103,9 +103,9 @@ class BeanstalkELBCheck < Sensu::Plugin::Check::CLI
103
103
 
104
104
  def elb_name
105
105
  @elb_name ||= Aws::ElasticBeanstalk::Client.new
106
- .describe_environment_resources(environment_name: config[:environment])
107
- .environment_resources
108
- .load_balancers[config[:elb_idx]]
106
+ .describe_environment_resources(environment_name: config[:environment])
107
+ .environment_resources
108
+ .load_balancers[config[:elb_idx]]
109
109
  .name
110
110
  end
111
111
 
@@ -89,11 +89,11 @@ class CheckCertificateExpiry < Sensu::Plugin::Check::CLI
89
89
 
90
90
  if time_to_expiry <= config[:critical].to_i
91
91
  critflag = true
92
- if time_to_expiry < 1
93
- reportstring += " #{cert.server_certificate_name} certificate is expired!"
94
- else
95
- reportstring += " #{cert.server_certificate_name} certificate expires in #{time_to_expiry} days;"
96
- end
92
+ reportstring += if time_to_expiry < 1
93
+ " #{cert.server_certificate_name} certificate is expired!"
94
+ else
95
+ " #{cert.server_certificate_name} certificate expires in #{time_to_expiry} days;"
96
+ end
97
97
  elsif time_to_expiry <= config[:warning].to_i
98
98
  warnflag = true
99
99
  reportstring += " #{cert.server_certificate_name} certificate expires in #{time_to_expiry} days;"
@@ -99,8 +99,8 @@ class CloudWatchMetricCheck < Sensu::Plugin::Check::CLI
99
99
 
100
100
  def self.parse_dimensions(dimension_string)
101
101
  dimension_string.split(',')
102
- .collect { |d| d.split '=' }
103
- .collect { |a| { name: a[0], value: a[1] } }
102
+ .collect { |d| d.split '=' }
103
+ .collect { |a| { name: a[0], value: a[1] } }
104
104
  end
105
105
 
106
106
  def dimension_string
@@ -12,7 +12,7 @@
12
12
  # Linux
13
13
  #
14
14
  # DEPENDENCIES:
15
- # gem: aws-sdk-v1
15
+ # gem: aws-sdk
16
16
  # gem: sensu-plugin
17
17
  #
18
18
  # USAGE:
@@ -31,7 +31,7 @@
31
31
  #
32
32
 
33
33
  require 'sensu-plugin/check/cli'
34
- require 'aws-sdk-v1'
34
+ require 'aws-sdk'
35
35
  require 'time'
36
36
 
37
37
  class CheckDynamoDB < Sensu::Plugin::Check::CLI
@@ -104,35 +104,46 @@ class CheckDynamoDB < Sensu::Plugin::Check::CLI
104
104
  end
105
105
 
106
106
  def dynamo_db
107
- @dynamo_db ||= AWS::DynamoDB.new aws_config
107
+ @dynamo_db ||= Aws::DynamoDB::Client.new aws_config
108
108
  end
109
109
 
110
110
  def cloud_watch
111
- @cloud_watch ||= AWS::CloudWatch.new aws_config
111
+ @cloud_watch ||= Aws::CloudWatch::Client.new aws_config
112
112
  end
113
113
 
114
114
  def tables
115
115
  return @tables if @tables
116
- @tables = dynamo_db.tables.to_a
117
- @tables.select! { |table| config[:table_names].include? table.name } if config[:table_names]
116
+ table_names = dynamo_db.list_tables.table_names.to_a
117
+ table_names.select! { |table_name| config[:table_names].include? table_name } if config[:table_names]
118
+ @tables = []
119
+ table_names.each do |table_name|
120
+ @tables.push(dynamo_db.describe_table(
121
+ table_name: table_name
122
+ ).table)
123
+ end
118
124
  @tables
119
125
  end
120
126
 
121
127
  def cloud_watch_metric(metric_name, table_name)
122
- cloud_watch.metrics.with_namespace('AWS/DynamoDB').with_metric_name(metric_name).with_dimensions(name: 'TableName', value: table_name).first
123
- end
124
-
125
- def statistics_options
126
- {
128
+ cloud_watch.get_metric_statistics(
129
+ namespace: 'AWS/DynamoDB',
130
+ metric_name: metric_name,
131
+ dimensions: [
132
+ {
133
+ name: 'TableName',
134
+ value: table_name
135
+ }
136
+ ],
127
137
  start_time: config[:end_time] - config[:period],
128
- end_time: config[:end_time],
138
+ end_time: config[:end_time],
129
139
  statistics: [config[:statistics].to_s.capitalize],
130
- period: config[:period]
131
- }
140
+ period: config[:period],
141
+ unit: 'Count'
142
+ )
132
143
  end
133
144
 
134
145
  def latest_value(metric)
135
- metric.statistics(statistics_options.merge unit: 'Count').datapoints.sort_by { |datapoint| datapoint[:timestamp] }.last[config[:statistics]]
146
+ metric.datapoints.sort_by { |datapoint| datapoint[:timestamp] }.last[config[:statistics]]
136
147
  end
137
148
 
138
149
  def flag_alert(severity, message)
@@ -143,19 +154,19 @@ class CheckDynamoDB < Sensu::Plugin::Check::CLI
143
154
  def check_capacity(table)
144
155
  config[:capacity_for].each do |r_or_w|
145
156
  metric_name = "Consumed#{r_or_w.to_s.capitalize}CapacityUnits"
146
- metric = cloud_watch_metric metric_name, table.name
157
+ metric = cloud_watch_metric metric_name, table.table_name
147
158
  metric_value = begin
148
159
  latest_value(metric)
149
160
  rescue
150
161
  0
151
162
  end
152
- percentage = metric_value / table.send("#{r_or_w}_capacity_units").to_f * 100
163
+ percentage = metric_value / table.provisioned_throughput.send("#{r_or_w}_capacity_units").to_f * 100
153
164
 
154
165
  @severities.keys.each do |severity|
155
166
  threshold = config[:"#{severity}_over"]
156
167
  next unless threshold
157
168
  next if percentage < threshold
158
- flag_alert severity, "; On table #{table.name} consumed #{r_or_w} capacity is #{sprintf '%.2f', percentage}% (expected_lower_than #{threshold})"
169
+ flag_alert severity, "; On table #{table.table_name} consumed #{r_or_w} capacity is #{sprintf '%.2f', percentage}% (expected_lower_than #{threshold})"
159
170
  break
160
171
  end
161
172
  end
@@ -12,7 +12,7 @@
12
12
  # Linux
13
13
  #
14
14
  # DEPENDENCIES:
15
- # gem: aws-sdk-v1
15
+ # gem: aws-sdk
16
16
  # gem: sensu-plugin
17
17
  #
18
18
  # USAGE:
@@ -28,7 +28,7 @@
28
28
  #
29
29
 
30
30
  require 'sensu-plugin/check/cli'
31
- require 'aws-sdk-v1'
31
+ require 'aws-sdk'
32
32
  require 'time'
33
33
 
34
34
  class CheckDynamoDB < Sensu::Plugin::Check::CLI
@@ -99,35 +99,46 @@ class CheckDynamoDB < Sensu::Plugin::Check::CLI
99
99
  end
100
100
 
101
101
  def dynamo_db
102
- @dynamo_db ||= AWS::DynamoDB.new aws_config
102
+ @dynamo_db ||= Aws::DynamoDB::Client.new aws_config
103
103
  end
104
104
 
105
105
  def cloud_watch
106
- @cloud_watch ||= AWS::CloudWatch.new aws_config
106
+ @cloud_watch ||= Aws::CloudWatch::Client.new aws_config
107
107
  end
108
108
 
109
109
  def tables
110
110
  return @tables if @tables
111
- @tables = dynamo_db.tables.to_a
112
- @tables.select! { |table| config[:table_names].include? table.name } if config[:table_names]
111
+ table_names = dynamo_db.list_tables.table_names.to_a
112
+ table_names.select! { |table_name| config[:table_names].include? table_name } if config[:table_names]
113
+ @tables = []
114
+ table_names.each do |table_name|
115
+ @tables.push(dynamo_db.describe_table(
116
+ table_name: table_name
117
+ ).table)
118
+ end
113
119
  @tables
114
120
  end
115
121
 
116
122
  def cloud_watch_metric(metric_name, table_name)
117
- cloud_watch.metrics.with_namespace('AWS/DynamoDB').with_metric_name(metric_name).with_dimensions(name: 'TableName', value: table_name).first
118
- end
119
-
120
- def statistics_options
121
- {
123
+ cloud_watch.get_metric_statistics(
124
+ namespace: 'AWS/DynamoDB',
125
+ metric_name: metric_name,
126
+ dimensions: [
127
+ {
128
+ name: 'TableName',
129
+ value: table_name
130
+ }
131
+ ],
122
132
  start_time: config[:end_time] - config[:period],
123
- end_time: config[:end_time],
133
+ end_time: config[:end_time],
124
134
  statistics: [config[:statistics].to_s.capitalize],
125
- period: config[:period]
126
- }
135
+ period: config[:period],
136
+ unit: 'Count'
137
+ )
127
138
  end
128
139
 
129
140
  def latest_value(metric)
130
- metric.statistics(statistics_options.merge unit: 'Count').datapoints.sort_by { |datapoint| datapoint[:timestamp] }.last[config[:statistics]]
141
+ metric.datapoints.sort_by { |datapoint| datapoint[:timestamp] }.last[config[:statistics]]
131
142
  end
132
143
 
133
144
  def flag_alert(severity, message)
@@ -138,7 +149,7 @@ class CheckDynamoDB < Sensu::Plugin::Check::CLI
138
149
  def check_throttle(table)
139
150
  config[:throttle_for].each do |r_or_w|
140
151
  metric_name = "#{r_or_w.to_s.capitalize}ThrottleEvents"
141
- metric = cloud_watch_metric metric_name, table.name
152
+ metric = cloud_watch_metric metric_name, table.table_name
142
153
  metric_value = begin
143
154
  latest_value(metric)
144
155
  rescue
@@ -149,7 +160,7 @@ class CheckDynamoDB < Sensu::Plugin::Check::CLI
149
160
  threshold = config[:"#{severity}_over"]
150
161
  next unless threshold
151
162
  next if metric_value < threshold
152
- flag_alert severity, "; On table #{table.name} #{r_or_w.to_s.capitalize}ThrottleEvents is #{metric_value} (higher_than #{threshold})"
163
+ flag_alert severity, "; On table #{table.table_name} #{r_or_w.to_s.capitalize}ThrottleEvents is #{metric_value} (higher_than #{threshold})"
153
164
  break
154
165
  end
155
166
  end
@@ -0,0 +1,107 @@
1
+ #! /usr/bin/env ruby
2
+ #
3
+ # check-ec2-cpu_balance
4
+ #
5
+ # DESCRIPTION:
6
+ # This plugin retrieves the value of the cpu balance for all servers
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-ec2-cpu_balance -c 20
20
+ #
21
+ # NOTES:
22
+ #
23
+ # LICENSE:
24
+ # Shane Starcher
25
+ # Released under the same terms as Sensu (the MIT license); see LICENSE
26
+ # for details.
27
+ #
28
+
29
+ require 'sensu-plugins-aws'
30
+ require 'sensu-plugin/check/cli'
31
+ require 'aws-sdk'
32
+
33
+ class EC2CpuBalance < Sensu::Plugin::Check::CLI
34
+ include Common
35
+
36
+ option :critical,
37
+ description: 'Trigger a critical when value is below VALUE',
38
+ short: '-c VALUE',
39
+ long: '--critical VALUE',
40
+ proc: proc(&:to_f),
41
+ required: true
42
+
43
+ option :warning,
44
+ description: 'Trigger a warning when value is below VALUE',
45
+ short: '-w VALUE',
46
+ long: '--warning VALUE',
47
+ proc: proc(&:to_f)
48
+
49
+ option :aws_region,
50
+ short: '-r R',
51
+ long: '--region REGION',
52
+ description: 'AWS region',
53
+ default: 'us-east-1'
54
+
55
+ def data(instance)
56
+ client = Aws::CloudWatch::Client.new
57
+ stats = 'Average'
58
+ period = 60
59
+ resp = client.get_metric_statistics(
60
+ namespace: 'AWS/EC2',
61
+ metric_name: 'CPUCreditBalance',
62
+ dimensions: [{
63
+ name: 'InstanceId',
64
+ value: instance
65
+ }],
66
+ start_time: Time.now - period * 10,
67
+ end_time: Time.now,
68
+ period: period,
69
+ statistics: [stats]
70
+ )
71
+
72
+ return resp.datapoints.first.send(stats.downcase) unless resp.datapoints.first.nil?
73
+ end
74
+
75
+ def run
76
+ ec2 = Aws::EC2::Client.new
77
+ instances = ec2.describe_instances(
78
+ filters: [
79
+ {
80
+ name: 'instance-state-name',
81
+ values: ['running']
82
+ }
83
+ ])
84
+
85
+ messages = "\n"
86
+ level = 0
87
+ instances.reservations.each do |reservation|
88
+ reservation.instances.each do |instance|
89
+ next unless instance.instance_type.start_with? 't2.'
90
+ id = instance.instance_id
91
+ result = data id
92
+ unless result.nil?
93
+ if result < config[:critical]
94
+ level = 2
95
+ messages << "#{id} is below critical threshold [#{config[:critical]} < #{result}]\n"
96
+ elsif config[:warning] && result < config[:warning]
97
+ level = 1 if level == 0
98
+ messages << "#{id} is below warning threshold [#{config[:warning]} < #{result}]\n"
99
+ end
100
+ end
101
+ end
102
+ end
103
+ ok messages if level == 0
104
+ warning messages if level == 1
105
+ critical messages if level == 2
106
+ end
107
+ end