sensu-plugins-aws 2.1.0 → 2.1.1

Sign up to get free protection for your applications and to get access to all the features.
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