sensu-plugins-aws 1.1.0 → 1.2.0
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.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/CHANGELOG.md +10 -1
- data/README.md +6 -0
- data/bin/check-ec2-filter.rb +147 -0
- data/bin/check-vpc-nameservers.rb +87 -0
- data/bin/handler-ec2_node.rb +3 -1
- data/bin/metrics-ec2-filter.rb +3 -25
- data/lib/sensu-plugins-aws.rb +1 -0
- data/lib/sensu-plugins-aws/filter.rb +47 -0
- data/lib/sensu-plugins-aws/version.rb +1 -1
- metadata +8 -3
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d8e18850d95e6ba9318753d772c1e47a27a869ea
|
4
|
+
data.tar.gz: 7183226959ec68b20c3d10b6c389a657ed5673bc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 001e818b18007dd33efbee3c123b04963803dd4d2906065c638107ac5fc6ea73cd533bf680d61c6a946ee9e2f25f9d9f12344683e9c8ad87586c4df60ba7c1f6
|
7
|
+
data.tar.gz: 8c61028e2fe855c90d9c9c6106822e1ae3045ed4f67bc953444cc9ec777f24b5579681d625a27e20877c5dce962792deee88aa538659f7003bf76c3a28939e5b
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data.tar.gz.sig
CHANGED
Binary file
|
data/CHANGELOG.md
CHANGED
@@ -3,7 +3,15 @@ This project adheres to [Semantic Versioning](http://semver.org/).
|
|
3
3
|
|
4
4
|
This CHANGELOG follows the format listed at [Keep A Changelog](http://keepachangelog.com/)
|
5
5
|
|
6
|
-
## [1.
|
6
|
+
## [1.2.0] - 2015-08-04
|
7
|
+
### Added
|
8
|
+
- Added check-ec2-filter to compare filter results to given thresholds
|
9
|
+
- Added check-vpc-nameservers, which given a VPC will validate the name servers in the DHCP option set.
|
10
|
+
|
11
|
+
### Fixed
|
12
|
+
- handler-ec2_node accounts for an empty instances array
|
13
|
+
|
14
|
+
## [1.1.0] - 2015-07-24
|
7
15
|
### Added
|
8
16
|
- Added new AWS SES handler - handler-ses.rb
|
9
17
|
- Add metrics-ec2-filter to store node ids and count matching a given filter
|
@@ -20,6 +28,7 @@ WARNING: This release contains major breaking changes that will impact all user
|
|
20
28
|
- Added support for checking multiple ELB instances at once by passing a comma separated list of ELB instance names in metrics-elb-full.rb
|
21
29
|
- Added check-autoscaling-cpucredits.rb for checking T2 instances in autoscaling groups that are running low on CPU credits
|
22
30
|
- Updated the fog and aws-sdk gems to the latest versions to improve performance, reduce 3rd party gem dependencies, and add support for newer AWS features.
|
31
|
+
- Add metrics-ec2-filter to store node ids and count matching a given filter
|
23
32
|
|
24
33
|
### Fixed
|
25
34
|
- Renamed autoscaling-instance-count-metrics.rb -> metrics-autoscaling-instance-count.rb to match our naming scheme
|
data/README.md
CHANGED
@@ -17,6 +17,8 @@
|
|
17
17
|
|
18
18
|
**check-ebs-snapshots.rb**
|
19
19
|
|
20
|
+
**check-ec2-filter.rb**
|
21
|
+
|
20
22
|
**check-ec2-network.rb**
|
21
23
|
|
22
24
|
**check-eip-allocation.rb**
|
@@ -47,6 +49,8 @@
|
|
47
49
|
|
48
50
|
**check-sqs-messages.rb**
|
49
51
|
|
52
|
+
**check-vpc-nameservers**
|
53
|
+
|
50
54
|
**check_vpc_vpn.py**
|
51
55
|
|
52
56
|
**handler-ec2_node.rb**
|
@@ -76,6 +80,7 @@
|
|
76
80
|
* /bin/check-dynamodb-capacity.rb
|
77
81
|
* /bin/check-dynamodb-throttle.rb
|
78
82
|
* /bin/check-ebs-snapshots.rb
|
83
|
+
* /bin/check-ec2-filter.rb
|
79
84
|
* /bin/check-ec2-network.rb
|
80
85
|
* /bin/check-elb-certs.rb
|
81
86
|
* /bin/check-elb-health-fog.rb
|
@@ -90,6 +95,7 @@
|
|
90
95
|
* /bin/check-redshift-events.rb
|
91
96
|
* /bin/check-ses-limit.rb
|
92
97
|
* /bin/check-sqs-messages.rb
|
98
|
+
* /bin/check-vpc-nameservers.rb
|
93
99
|
* /bin/check_vpc_vpn.py
|
94
100
|
* /bin/handler-ec2_node.rb
|
95
101
|
* /bin/handler-ses.rb
|
@@ -0,0 +1,147 @@
|
|
1
|
+
#! /usr/bin/env ruby
|
2
|
+
#
|
3
|
+
# check-ec2-filter
|
4
|
+
#
|
5
|
+
# DESCRIPTION:
|
6
|
+
# This plugin retrieves EC2 instances matching a given filter and
|
7
|
+
# returns the number matched. Warning and Critical thresholds may be set as needed.
|
8
|
+
# Thresholds may be compared to the count using [equal, not, greater, less] operators.
|
9
|
+
#
|
10
|
+
# OUTPUT:
|
11
|
+
# plain-text
|
12
|
+
#
|
13
|
+
# PLATFORMS:
|
14
|
+
# Linux
|
15
|
+
#
|
16
|
+
# DEPENDENCIES:
|
17
|
+
# gem: aws-sdk
|
18
|
+
# gem: sensu-plugin
|
19
|
+
#
|
20
|
+
# USAGE:
|
21
|
+
# ./check-ec2-filter.rb -w 20 -f "{name:tag-value,values:[infrastructure]}"
|
22
|
+
# ./check-ec2-filter.rb -w 10 -c 5 -o less -f "{name:tag-value,values:[infrastructure]} {name:instance-state-name,values:[running]}"
|
23
|
+
#
|
24
|
+
# NOTES:
|
25
|
+
#
|
26
|
+
# LICENSE:
|
27
|
+
# Justin McCarty
|
28
|
+
# Released under the same terms as Sensu (the MIT license); see LICENSE
|
29
|
+
# for details.
|
30
|
+
#
|
31
|
+
|
32
|
+
require 'sensu-plugin/check/cli'
|
33
|
+
require 'aws-sdk'
|
34
|
+
require 'sensu-plugins-aws/filter'
|
35
|
+
|
36
|
+
class EC2Filter < Sensu::Plugin::Check::CLI
|
37
|
+
include Filter
|
38
|
+
option :aws_access_key,
|
39
|
+
short: '-a AWS_ACCESS_KEY',
|
40
|
+
long: '--aws-access-key AWS_ACCESS_KEY',
|
41
|
+
description: "AWS Access Key. Either set ENV['AWS_ACCESS_KEY'] or provide it as an option",
|
42
|
+
default: ENV['AWS_ACCESS_KEY']
|
43
|
+
|
44
|
+
option :aws_secret_access_key,
|
45
|
+
short: '-k AWS_SECRET_KEY',
|
46
|
+
long: '--aws-secret-access-key AWS_SECRET_KEY',
|
47
|
+
description: "AWS Secret Access Key. Either set ENV['AWS_SECRET_KEY'] or provide it as an option",
|
48
|
+
default: ENV['AWS_SECRET_KEY']
|
49
|
+
|
50
|
+
option :aws_region,
|
51
|
+
short: '-r AWS_REGION',
|
52
|
+
long: '--aws-region REGION',
|
53
|
+
description: 'AWS Region (defaults to us-east-1).',
|
54
|
+
default: 'us-east-1'
|
55
|
+
|
56
|
+
option :name,
|
57
|
+
description: 'Filter naming scheme, text to prepend to metric',
|
58
|
+
short: '-n NAME',
|
59
|
+
long: '--name NAME',
|
60
|
+
default: ''
|
61
|
+
|
62
|
+
option :filter,
|
63
|
+
short: '-f FILTER',
|
64
|
+
long: '--filter FILTER',
|
65
|
+
description: 'String representation of the filter to apply',
|
66
|
+
default: '{}'
|
67
|
+
|
68
|
+
option :warning,
|
69
|
+
description: 'Warning threshold for filter',
|
70
|
+
short: '-w COUNT',
|
71
|
+
long: '--warning COUNT'
|
72
|
+
|
73
|
+
option :critical,
|
74
|
+
description: 'Critical threshold for filter',
|
75
|
+
short: '-c COUNT',
|
76
|
+
long: '--critical COUNT'
|
77
|
+
|
78
|
+
option :compare,
|
79
|
+
description: 'Comparision operator for threshold: equal, not, greater, less',
|
80
|
+
short: '-o OPERATION',
|
81
|
+
long: '--opertor OPERATION',
|
82
|
+
default: 'equal'
|
83
|
+
|
84
|
+
def aws_config
|
85
|
+
{ access_key_id: config[:aws_access_key],
|
86
|
+
secret_access_key: config[:aws_secret_access_key],
|
87
|
+
region: config[:aws_region]
|
88
|
+
}
|
89
|
+
end
|
90
|
+
|
91
|
+
def convert_operator
|
92
|
+
op = ->(c, t) { c == t }
|
93
|
+
|
94
|
+
if config[:compare] == 'greater'
|
95
|
+
op = ->(c, t) { c > t }
|
96
|
+
elsif config[:compare] == 'less'
|
97
|
+
op = ->(c, t) { c < t }
|
98
|
+
elsif config[:compare] == 'not'
|
99
|
+
op = ->(c, t) { c != t }
|
100
|
+
end
|
101
|
+
|
102
|
+
op
|
103
|
+
end
|
104
|
+
|
105
|
+
def run
|
106
|
+
client = Aws::EC2::Client.new aws_config
|
107
|
+
|
108
|
+
filter = Filter.parse(config[:filter])
|
109
|
+
|
110
|
+
if filter.empty?
|
111
|
+
options = {}
|
112
|
+
else
|
113
|
+
options = { filters: filter }
|
114
|
+
end
|
115
|
+
|
116
|
+
data = client.describe_instances(options)
|
117
|
+
|
118
|
+
instance_ids = Set.new
|
119
|
+
|
120
|
+
data[:reservations].each do |res|
|
121
|
+
res[:instances].each do |i|
|
122
|
+
instance_ids << i[:instance_id]
|
123
|
+
end
|
124
|
+
end
|
125
|
+
|
126
|
+
count = instance_ids.count
|
127
|
+
op = convert_operator
|
128
|
+
message = "Current count: #{count}"
|
129
|
+
|
130
|
+
unless config[:critical].nil?
|
131
|
+
if op.call count, config[:critical].to_i
|
132
|
+
critical message
|
133
|
+
end
|
134
|
+
end
|
135
|
+
|
136
|
+
unless config[:warning].nil?
|
137
|
+
if op.call count, config[:warning].to_i
|
138
|
+
warning message
|
139
|
+
end
|
140
|
+
end
|
141
|
+
|
142
|
+
ok message
|
143
|
+
rescue => e
|
144
|
+
puts "Error: exception: #{e}"
|
145
|
+
critical
|
146
|
+
end
|
147
|
+
end
|
@@ -0,0 +1,87 @@
|
|
1
|
+
#! /usr/bin/env ruby
|
2
|
+
#
|
3
|
+
# check-vpc-nameservers
|
4
|
+
#
|
5
|
+
# DESCRIPTION:
|
6
|
+
# Checks the VPCs nameservers are functional
|
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-vpc-nameservers.rb -v vpc-12345678
|
20
|
+
# ./check-vpc-nameservers.rb -v vpc-12345678 -r us-east-1
|
21
|
+
# ./check-vpc-nameservers.rb -v vpc-12345678 -r us-east-1 -q google.com,internal.private.servers
|
22
|
+
#
|
23
|
+
# NOTES:
|
24
|
+
#
|
25
|
+
# LICENSE:
|
26
|
+
# Shane Starcher <shane.starcher@gmail.com>
|
27
|
+
# Released under the same terms as Sensu (the MIT license); see LICENSE
|
28
|
+
# for details.
|
29
|
+
#
|
30
|
+
|
31
|
+
require 'sensu-plugin/check/cli'
|
32
|
+
require 'sensu-plugins-aws'
|
33
|
+
require 'aws-sdk'
|
34
|
+
require 'resolv'
|
35
|
+
|
36
|
+
class CheckVpcNameservers < Sensu::Plugin::Check::CLI
|
37
|
+
include Common
|
38
|
+
option :queries,
|
39
|
+
short: '-q queries',
|
40
|
+
long: '--queries google.com,example1.com',
|
41
|
+
proc: proc { |a| a.split(',') },
|
42
|
+
default: ['google.com'],
|
43
|
+
description: 'Comma seperated dns queries to test'
|
44
|
+
|
45
|
+
option :vpc_id,
|
46
|
+
short: '-v vpc_id',
|
47
|
+
long: '--vpc_id vpc-12345678',
|
48
|
+
required: true,
|
49
|
+
description: 'The vpc_id of the dhcp option set'
|
50
|
+
|
51
|
+
option :aws_region,
|
52
|
+
short: '-r R',
|
53
|
+
long: '--region REGION',
|
54
|
+
description: 'AWS region',
|
55
|
+
default: 'us-east-1'
|
56
|
+
|
57
|
+
def run
|
58
|
+
errors = []
|
59
|
+
ec2 = Aws::EC2::Client.new
|
60
|
+
|
61
|
+
dhcp_option_id = ec2.describe_vpcs(vpc_ids: [config[:vpc_id]]).vpcs[0].dhcp_options_id
|
62
|
+
|
63
|
+
options = ec2.describe_dhcp_options(dhcp_options_ids: [dhcp_option_id])
|
64
|
+
|
65
|
+
options.dhcp_options.each do |option|
|
66
|
+
option.dhcp_configurations.each do |map|
|
67
|
+
next if map.key != 'domain-name-servers'
|
68
|
+
map.values.each do |value|
|
69
|
+
ip = value.value
|
70
|
+
config[:queries].each do |query|
|
71
|
+
begin
|
72
|
+
Resolv::DNS.open(nameserver: [ip]).getaddress(query)
|
73
|
+
rescue Resolv::ResolvError => res_err
|
74
|
+
errors << "[#{ip}] #{res_err} "
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
if errors.empty?
|
82
|
+
ok
|
83
|
+
else
|
84
|
+
warning errors.join("\n")
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
data/bin/handler-ec2_node.rb
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
#
|
3
3
|
# CHANGELOG:
|
4
|
+
# * 0.6.0:
|
5
|
+
# - Fixed ec2_node_should_be_deleted to account for an empty insances array
|
4
6
|
# * 0.5.0:
|
5
7
|
# - Adds configuration to filter by state reason
|
6
8
|
# * 0.4.0:
|
@@ -130,7 +132,7 @@ class Ec2Node < Sensu::Handler
|
|
130
132
|
states = @event['client']['ec2_states'] || settings['ec2_node']['ec2_states'] || ['shutting-down', 'terminated', 'stopping', 'stopped']
|
131
133
|
begin
|
132
134
|
instances = ec2.describe_instances(instance_ids: [@event['client']['name']]).reservations[0]
|
133
|
-
if instances.nil?
|
135
|
+
if instances.nil? || instances.empty?
|
134
136
|
true
|
135
137
|
else
|
136
138
|
instance = instances.instances[0]
|
data/bin/metrics-ec2-filter.rb
CHANGED
@@ -29,8 +29,10 @@
|
|
29
29
|
|
30
30
|
require 'sensu-plugin/metric/cli'
|
31
31
|
require 'aws-sdk'
|
32
|
+
require 'sensu-plugins-aws/filter'
|
32
33
|
|
33
34
|
class EC2Filter < Sensu::Plugin::Metric::CLI::Graphite
|
35
|
+
include Filter
|
34
36
|
option :aws_access_key,
|
35
37
|
short: '-a AWS_ACCESS_KEY',
|
36
38
|
long: '--aws-access-key AWS_ACCESS_KEY',
|
@@ -74,35 +76,11 @@ class EC2Filter < Sensu::Plugin::Metric::CLI::Graphite
|
|
74
76
|
}
|
75
77
|
end
|
76
78
|
|
77
|
-
def convert_filter(input)
|
78
|
-
filter = []
|
79
|
-
items = input.scan(/{.*?}/)
|
80
|
-
|
81
|
-
items.each do |item|
|
82
|
-
if item.strip.empty?
|
83
|
-
fail 'Invalid filter syntax'
|
84
|
-
end
|
85
|
-
|
86
|
-
entry = {}
|
87
|
-
name = item.scan(/name:(.*?),/)
|
88
|
-
value = item.scan(/values:\[(.*?)\]/)
|
89
|
-
|
90
|
-
if name.nil? || name.empty? || value.nil? || value.empty?
|
91
|
-
fail 'Unable to parse filter entry'
|
92
|
-
end
|
93
|
-
|
94
|
-
entry[:name] = name[0][0].strip
|
95
|
-
entry[:values] = value[0][0].split(',')
|
96
|
-
filter << entry
|
97
|
-
end
|
98
|
-
filter
|
99
|
-
end
|
100
|
-
|
101
79
|
def run
|
102
80
|
begin
|
103
81
|
client = Aws::EC2::Client.new aws_config
|
104
82
|
|
105
|
-
filter =
|
83
|
+
filter = Filter.parse(config[:filter])
|
106
84
|
|
107
85
|
options = { filters: filter }
|
108
86
|
|
data/lib/sensu-plugins-aws.rb
CHANGED
@@ -0,0 +1,47 @@
|
|
1
|
+
#
|
2
|
+
# DESCRIPTION:
|
3
|
+
# Filter methods for aws quieries
|
4
|
+
#
|
5
|
+
# DEPENDENCIES:
|
6
|
+
#
|
7
|
+
# USAGE:
|
8
|
+
# Filter.parse(string)
|
9
|
+
#
|
10
|
+
# NOTES:
|
11
|
+
#
|
12
|
+
# LICENSE:
|
13
|
+
# Justin McCarty (jmccarty3@gmail.com)
|
14
|
+
# Released under the same terms as Sensu (the MIT license); see LICENSE
|
15
|
+
# for details.
|
16
|
+
#
|
17
|
+
|
18
|
+
module Filter
|
19
|
+
def self.parse(input)
|
20
|
+
filter = []
|
21
|
+
|
22
|
+
if input == '{}'
|
23
|
+
return filter
|
24
|
+
end
|
25
|
+
|
26
|
+
items = input.scan(/{.*?}/)
|
27
|
+
|
28
|
+
items.each do |item|
|
29
|
+
if item.strip.empty?
|
30
|
+
fail 'Invalid filter syntax'
|
31
|
+
end
|
32
|
+
|
33
|
+
entry = {}
|
34
|
+
name = item.scan(/name:(.*?),/)
|
35
|
+
value = item.scan(/values:\[(.*?)\]/)
|
36
|
+
|
37
|
+
if name.nil? || name.empty? || value.nil? || value.empty?
|
38
|
+
fail 'Unable to parse filter entry'
|
39
|
+
end
|
40
|
+
|
41
|
+
entry[:name] = name[0][0].strip
|
42
|
+
entry[:values] = value[0][0].split(',')
|
43
|
+
filter << entry
|
44
|
+
end
|
45
|
+
filter
|
46
|
+
end
|
47
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sensu-plugins-aws
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sensu-Plugins and contributors
|
@@ -30,7 +30,7 @@ cert_chain:
|
|
30
30
|
8sHuVruarogxxKPBzlL2is4EUb6oN/RdpGx2l4254+nyR+abg//Ed27Ym0PkB4lk
|
31
31
|
HP0m8WSjZmFr109pE/sVsM5jtOCvogyujQOjNVGN4gz1wwPr
|
32
32
|
-----END CERTIFICATE-----
|
33
|
-
date: 2015-
|
33
|
+
date: 2015-08-04 00:00:00.000000000 Z
|
34
34
|
dependencies:
|
35
35
|
- !ruby/object:Gem::Dependency
|
36
36
|
name: sensu-plugin
|
@@ -242,6 +242,7 @@ executables:
|
|
242
242
|
- handler-ses.rb
|
243
243
|
- handler-ec2_node.rb
|
244
244
|
- check_vpc_vpn.py
|
245
|
+
- check-vpc-nameservers.rb
|
245
246
|
- check-sqs-messages.rb
|
246
247
|
- check-ses-limit.rb
|
247
248
|
- check-redshift-events.rb
|
@@ -257,6 +258,7 @@ executables:
|
|
257
258
|
- check-elb-certs.rb
|
258
259
|
- check-eip-allocation.rb
|
259
260
|
- check-ec2-network.rb
|
261
|
+
- check-ec2-filter.rb
|
260
262
|
- check-ebs-snapshots.rb
|
261
263
|
- check-dynamodb-throttle.rb
|
262
264
|
- check-dynamodb-capacity.rb
|
@@ -271,6 +273,7 @@ files:
|
|
271
273
|
- bin/check-dynamodb-capacity.rb
|
272
274
|
- bin/check-dynamodb-throttle.rb
|
273
275
|
- bin/check-ebs-snapshots.rb
|
276
|
+
- bin/check-ec2-filter.rb
|
274
277
|
- bin/check-ec2-network.rb
|
275
278
|
- bin/check-eip-allocation.rb
|
276
279
|
- bin/check-elb-certs.rb
|
@@ -286,6 +289,7 @@ files:
|
|
286
289
|
- bin/check-redshift-events.rb
|
287
290
|
- bin/check-ses-limit.rb
|
288
291
|
- bin/check-sqs-messages.rb
|
292
|
+
- bin/check-vpc-nameservers.rb
|
289
293
|
- bin/check_vpc_vpn.py
|
290
294
|
- bin/handler-ec2_node.rb
|
291
295
|
- bin/handler-ses.rb
|
@@ -299,6 +303,7 @@ files:
|
|
299
303
|
- bin/metrics-sqs.rb
|
300
304
|
- lib/sensu-plugins-aws.rb
|
301
305
|
- lib/sensu-plugins-aws/common.rb
|
306
|
+
- lib/sensu-plugins-aws/filter.rb
|
302
307
|
- lib/sensu-plugins-aws/version.rb
|
303
308
|
homepage: https://github.com/sensu-plugins/sensu-plugins-aws
|
304
309
|
licenses:
|
@@ -326,7 +331,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
326
331
|
version: '0'
|
327
332
|
requirements: []
|
328
333
|
rubyforge_project:
|
329
|
-
rubygems_version: 2.4.
|
334
|
+
rubygems_version: 2.4.8
|
330
335
|
signing_key:
|
331
336
|
specification_version: 4
|
332
337
|
summary: Sensu plugins for working with an AWS environment
|
metadata.gz.sig
CHANGED
Binary file
|