sensu-plugins-network-checks 0.0.5 → 0.0.6
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 +11 -0
- data/README.md +20 -0
- data/bin/check-netstat-tcp.rb +1 -1
- data/bin/check-ports-nmap.rb +89 -0
- data/bin/check-ports.rb +49 -54
- data/bin/check-rbl.rb +1 -1
- data/bin/metrics-netif.rb +1 -1
- data/bin/metrics-netstat-tcp.rb +2 -2
- data/lib/sensu-plugins-network-checks/version.rb +1 -1
- metadata +4 -2
- 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: b91c2cab0f43f5200c2dc825c026040771355009
|
4
|
+
data.tar.gz: 48c3b6298d8d6b8771e9580e2cc120692cd236d3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 629b7ed21e7ee2f22f852ae5f6f0724fbf21e576238b9e53f8cb4aafbc40784eed7f9dfd6d42053af73d6e78cc40b8550ff56cb763e182ebb483dabb7db0da17
|
7
|
+
data.tar.gz: ba7c01d145a66fad0ed4aa3d9a7efc538a2a19974afd6e8d52a3009b9f460964047593050bc1aae8a5023f1462a5afb7a825627f0b04f3d7942449ec3026961e
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data.tar.gz.sig
CHANGED
Binary file
|
data/CHANGELOG.md
CHANGED
@@ -5,6 +5,13 @@ This CHANGELOG follows the format listed at [Keep A Changelog](http://keepachang
|
|
5
5
|
|
6
6
|
## [Unreleased][unreleased]
|
7
7
|
|
8
|
+
## [0.0.6] - 2015-10-01
|
9
|
+
### Added
|
10
|
+
- Added new port check
|
11
|
+
|
12
|
+
### Changed
|
13
|
+
- Changed name of check-ports to check-ports-nmap
|
14
|
+
|
8
15
|
## [0.0.5] - 2015-08-05
|
9
16
|
### Added
|
10
17
|
- Added new metrics-ping.rb plugin
|
@@ -27,6 +34,10 @@ This CHANGELOG follows the format listed at [Keep A Changelog](http://keepachang
|
|
27
34
|
- cleaned up Rakefile
|
28
35
|
- updated documentation links
|
29
36
|
|
37
|
+
### Refactored
|
38
|
+
- renamed check-ports.rb to check-ports-nmap.rb
|
39
|
+
- added check-ports.rb based in TCPSocket instead of nmap
|
40
|
+
|
30
41
|
## [0.0.2] - 2015-06-03
|
31
42
|
|
32
43
|
### Fixed
|
data/README.md
CHANGED
@@ -13,6 +13,7 @@
|
|
13
13
|
* bin/check-multicast-groups.rb
|
14
14
|
* bin/check-netstat-tcp.rb
|
15
15
|
* bin/check-ping.rb
|
16
|
+
* bin/check-ports-nmap.rb
|
16
17
|
* bin/check-ports.rb
|
17
18
|
* bin/check-rbl.rb
|
18
19
|
* bin/check-whois-domain-expiration-multi.rb
|
@@ -24,6 +25,25 @@
|
|
24
25
|
|
25
26
|
## Usage
|
26
27
|
|
28
|
+
**check-ports**
|
29
|
+
This check now uses a TCPSocket, not nmap (see next below)
|
30
|
+
```
|
31
|
+
check-ports.rb -h 0.0.0.0 -p 22,25,3030 -t 30
|
32
|
+
|
33
|
+
Usage: bin/check-ports.rb (options)
|
34
|
+
-H, --hostnames HOSTNAME Host to connect to
|
35
|
+
-p, --ports PORTS Ports to check, comma separated
|
36
|
+
-t, --timeout SECS Connection timeout
|
37
|
+
```
|
38
|
+
|
39
|
+
**check-ports-nmap**
|
40
|
+
```
|
41
|
+
Usage: bin/check-ports-nmap.rb (options)
|
42
|
+
-h, --host HOST Resolving name or IP address of target host
|
43
|
+
-l, --level crit|warn Alert level crit(critical) or warn(warning)
|
44
|
+
-t, --ports PORT,PORT... TCP port(s) you wish to get status for
|
45
|
+
```
|
46
|
+
|
27
47
|
**check-multicast-groups**
|
28
48
|
```
|
29
49
|
{
|
data/bin/check-netstat-tcp.rb
CHANGED
@@ -83,7 +83,7 @@ class CheckNetstatTCP < Sensu::Plugin::Check::CLI
|
|
83
83
|
TCP_STATES.each_pair { |_hex, name| state_counts[name] = 0 }
|
84
84
|
|
85
85
|
protocols.select { |p| File.exist?('/proc/net/' + p) }.each do |protocol|
|
86
|
-
File.open('/proc/net/' + protocol).each do |line|
|
86
|
+
File.open('/proc/net/' + protocol).each do |line|
|
87
87
|
line.strip!
|
88
88
|
if m = line.match(/^\s*\d+:\s+(.{8}|.{32}):(.{4})\s+(.{8}|.{32}):(.{4})\s+(.{2})/) # rubocop:disable AssignmentInCondition
|
89
89
|
connection_state = m[5]
|
@@ -0,0 +1,89 @@
|
|
1
|
+
#! /usr/bin/env ruby
|
2
|
+
#
|
3
|
+
# check-ports-nmap
|
4
|
+
#
|
5
|
+
# DESCRIPTION:
|
6
|
+
# Fetch port status using nmap. This check is good for catching bad network ACLs
|
7
|
+
# or service down events for network resources.
|
8
|
+
#
|
9
|
+
# OUTPUT:
|
10
|
+
# plain text
|
11
|
+
#
|
12
|
+
# PLATFORMS:
|
13
|
+
# Linux, Windows, BSD, Solaris, etc
|
14
|
+
#
|
15
|
+
# DEPENDENCIES:
|
16
|
+
# gem: sensu-plugin
|
17
|
+
# nmap package
|
18
|
+
#
|
19
|
+
# USAGE:
|
20
|
+
# $ ./check-ports-nmap.rb --host some_server --ports 5671,5672 --level crit
|
21
|
+
#
|
22
|
+
# NOTES:
|
23
|
+
# #YELLOW
|
24
|
+
# Look at rewriting this using the namp library to not depend on external tools
|
25
|
+
#
|
26
|
+
# LICENSE:
|
27
|
+
# Copyright 2013 GoDaddy.com, LLC <jjmanzer@godaddy.com>
|
28
|
+
# Released under the same terms as Sensu (the MIT license); see LICENSE
|
29
|
+
# for details.
|
30
|
+
#
|
31
|
+
|
32
|
+
require 'open3'
|
33
|
+
require 'sensu-plugin/check/cli'
|
34
|
+
require 'json'
|
35
|
+
|
36
|
+
# CheckPorts
|
37
|
+
class CheckPorts < Sensu::Plugin::Check::CLI
|
38
|
+
option :host,
|
39
|
+
description: 'Resolving name or IP address of target host',
|
40
|
+
short: '-h HOST',
|
41
|
+
long: '--host HOST',
|
42
|
+
default: 'localhost'
|
43
|
+
|
44
|
+
option :ports,
|
45
|
+
description: 'TCP port(s) you wish to get status for',
|
46
|
+
short: '-t PORT,PORT...',
|
47
|
+
long: '--ports PORT,PORT...'
|
48
|
+
|
49
|
+
option :level,
|
50
|
+
description: 'Alert level crit(critical) or warn(warning)',
|
51
|
+
short: '-l crit|warn',
|
52
|
+
long: '--level crit|warn',
|
53
|
+
default: 'WARN'
|
54
|
+
|
55
|
+
def run
|
56
|
+
stdout, stderr = Open3.capture3(
|
57
|
+
ENV,
|
58
|
+
"nmap -P0 -p #{config[:ports]} #{config[:host]}"
|
59
|
+
)
|
60
|
+
|
61
|
+
case stderr
|
62
|
+
when /Failed to resolve/
|
63
|
+
critical 'cannot resolve the target hostname'
|
64
|
+
end
|
65
|
+
|
66
|
+
port_checks = {}
|
67
|
+
check_pass = true
|
68
|
+
|
69
|
+
stdout.split("\n").each do |line|
|
70
|
+
line.scan(/(\d+).tcp\s+(\w+)\s+(\w+)/).each do |status|
|
71
|
+
port_checks[status[1]] ||= []
|
72
|
+
port_checks[status[1]].push status[0]
|
73
|
+
check_pass = false unless status[1]['open']
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
result = port_checks.map { |state, ports| "#{state}:#{ports.join(',')}" }.join(' ')
|
78
|
+
|
79
|
+
if check_pass
|
80
|
+
ok result
|
81
|
+
elsif config[:level].upcase == 'WARN'
|
82
|
+
warning result
|
83
|
+
elsif config[:level].upcase == 'CRIT'
|
84
|
+
critical result
|
85
|
+
else
|
86
|
+
unknown "Unknown alert level #{config[:level]}"
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
data/bin/check-ports.rb
CHANGED
@@ -1,89 +1,84 @@
|
|
1
1
|
#! /usr/bin/env ruby
|
2
2
|
#
|
3
|
-
#
|
3
|
+
# encoding: UTF-8
|
4
|
+
# check-ports-socket
|
4
5
|
#
|
5
6
|
# DESCRIPTION:
|
6
|
-
#
|
7
|
-
# or service down events for network resources.
|
7
|
+
# Connect to a TCP port on one or more ports, to see if open. Don't use nmap since it's overkill.
|
8
8
|
#
|
9
9
|
# OUTPUT:
|
10
10
|
# plain text
|
11
11
|
#
|
12
12
|
# PLATFORMS:
|
13
|
-
# Linux
|
13
|
+
# Linux
|
14
14
|
#
|
15
15
|
# DEPENDENCIES:
|
16
16
|
# gem: sensu-plugin
|
17
|
-
# nmap package
|
18
17
|
#
|
19
18
|
# USAGE:
|
20
|
-
#
|
19
|
+
#
|
20
|
+
# To check there is only one zk leader
|
21
|
+
# ./check-ports-socket.rb -h localhost -p 22,25,80
|
21
22
|
#
|
22
23
|
# NOTES:
|
23
|
-
#
|
24
|
-
#
|
24
|
+
# By default, checks for openssh on localhost port 22
|
25
|
+
#
|
25
26
|
#
|
26
27
|
# LICENSE:
|
27
|
-
# Copyright 2013 GoDaddy.com, LLC <jjmanzer@godaddy.com>
|
28
28
|
# Released under the same terms as Sensu (the MIT license); see LICENSE
|
29
29
|
# for details.
|
30
|
-
#
|
31
30
|
|
32
|
-
require 'open3'
|
33
31
|
require 'sensu-plugin/check/cli'
|
34
|
-
require '
|
32
|
+
require 'socket'
|
33
|
+
require 'timeout'
|
35
34
|
|
36
|
-
#
|
37
|
-
|
35
|
+
#
|
36
|
+
# Check Banner
|
37
|
+
#
|
38
|
+
class CheckPort < Sensu::Plugin::Check::CLI
|
38
39
|
option :host,
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
default: '
|
40
|
+
short: '-H HOSTNAME',
|
41
|
+
long: '--hostname HOSTNAME',
|
42
|
+
description: 'Host to connect to',
|
43
|
+
default: '0.0.0.0'
|
43
44
|
|
44
45
|
option :ports,
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
option :level,
|
50
|
-
description: 'Alert level crit(critical) or warn(warning)',
|
51
|
-
short: '-l crit|warn',
|
52
|
-
long: '--level crit|warn',
|
53
|
-
default: 'WARN'
|
46
|
+
short: '-p PORTS',
|
47
|
+
long: '--ports PORTS',
|
48
|
+
description: 'Ports to check, comma separated (22,25,3030)',
|
49
|
+
default: '22'
|
54
50
|
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
51
|
+
option :timeout,
|
52
|
+
short: '-t SECS',
|
53
|
+
long: '--timeout SECS',
|
54
|
+
description: 'Connection timeout',
|
55
|
+
proc: proc(&:to_i),
|
56
|
+
default: 30
|
60
57
|
|
61
|
-
|
62
|
-
|
63
|
-
|
58
|
+
def check_port(port)
|
59
|
+
timeout(config[:timeout]) do
|
60
|
+
TCPSocket.new(config[:host], port.to_i)
|
64
61
|
end
|
62
|
+
rescue Errno::ECONNREFUSED
|
63
|
+
critical "Connection refused by #{config[:host]}:#{port}"
|
64
|
+
rescue Timeout::Error
|
65
|
+
critical "Connection or read timed out (#{config[:host]}:#{port})"
|
66
|
+
rescue Errno::EHOSTUNREACH
|
67
|
+
critical "Check failed to run: No route to host (#{config[:host]}:#{port})"
|
68
|
+
rescue EOFError
|
69
|
+
critical "Connection closed unexpectedly (#{config[:host]}:#{port})"
|
70
|
+
end
|
65
71
|
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
port_checks[status[1]] ||= []
|
72
|
-
port_checks[status[1]].push status[0]
|
73
|
-
check_pass = false unless status[1]['open']
|
74
|
-
end
|
72
|
+
def run
|
73
|
+
ports = config[:ports].split(',')
|
74
|
+
okarray = []
|
75
|
+
ports.each do |port|
|
76
|
+
okarray << 'ok' if check_port port
|
75
77
|
end
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
if check_pass
|
80
|
-
ok result
|
81
|
-
elsif config[:level].upcase == 'WARN'
|
82
|
-
warning result
|
83
|
-
elsif config[:level].upcase == 'CRIT'
|
84
|
-
critical result
|
78
|
+
if okarray.size == ports.size
|
79
|
+
ok "All ports (#{config[:ports]}) are accessible for host #{config[:host]}"
|
85
80
|
else
|
86
|
-
|
81
|
+
critical "port count or pattern #{config[:pattern]} does not match" unless config[:crit_message]
|
87
82
|
end
|
88
83
|
end
|
89
84
|
end
|
data/bin/check-rbl.rb
CHANGED
@@ -77,7 +77,7 @@ class RblCheck < Sensu::Plugin::Check::CLI
|
|
77
77
|
criticality = 0
|
78
78
|
|
79
79
|
# #YELLOW
|
80
|
-
dnsbl_ret.each do |dnsbl_result|
|
80
|
+
dnsbl_ret.each do |dnsbl_result|
|
81
81
|
if dnsbl_result.meaning =~ /spam/i || dnsbl_result.meaning =~ /blacklist/i
|
82
82
|
unless ignored_bls_set.member?(dnsbl_result.dnsbl)
|
83
83
|
msg_string = "#{msg_string} #{dnsbl_result.dnsbl}"
|
data/bin/metrics-netif.rb
CHANGED
@@ -38,7 +38,7 @@ class NetIFMetrics < Sensu::Plugin::Metric::CLI::Graphite
|
|
38
38
|
default: "#{Socket.gethostname}"
|
39
39
|
|
40
40
|
def run
|
41
|
-
`sar -n DEV 1 1 | grep Average | grep -v IFACE`.each_line do |line|
|
41
|
+
`sar -n DEV 1 1 | grep Average | grep -v IFACE`.each_line do |line|
|
42
42
|
stats = line.split(/\s+/)
|
43
43
|
unless stats.empty?
|
44
44
|
stats.shift
|
data/bin/metrics-netstat-tcp.rb
CHANGED
@@ -80,7 +80,7 @@ class NetstatTCPMetrics < Sensu::Plugin::Metric::CLI::Graphite
|
|
80
80
|
state_counts = Hash.new(0)
|
81
81
|
TCP_STATES.each_pair { |_hex, name| state_counts[name] = 0 }
|
82
82
|
|
83
|
-
File.open('/proc/net/' + protocol).each do |line|
|
83
|
+
File.open('/proc/net/' + protocol).each do |line|
|
84
84
|
line.strip!
|
85
85
|
if m = line.match(/^\s*\d+:\s+(.{8}):(.{4})\s+(.{8}):(.{4})\s+(.{2})/) # rubocop:disable AssignmentInCondition
|
86
86
|
connection_state = m[5]
|
@@ -99,7 +99,7 @@ class NetstatTCPMetrics < Sensu::Plugin::Metric::CLI::Graphite
|
|
99
99
|
def run
|
100
100
|
timestamp = Time.now.to_i
|
101
101
|
netstat('tcp').each do |state, count|
|
102
|
-
graphite_name = config[:port] ? "#{config[:scheme]}.#{config[:port]}.#{state}" :
|
102
|
+
graphite_name = config[:port] ? "#{config[:scheme]}.#{config[:port]}.#{state}" :
|
103
103
|
"#{config[:scheme]}.#{state}"
|
104
104
|
output "#{graphite_name}", count, timestamp
|
105
105
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sensu-plugins-network-checks
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.6
|
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-10-01 00:00:00.000000000 Z
|
34
34
|
dependencies:
|
35
35
|
- !ruby/object:Gem::Dependency
|
36
36
|
name: dnsbl-client
|
@@ -230,6 +230,7 @@ executables:
|
|
230
230
|
- check-whois-domain-expiration-multi.rb
|
231
231
|
- check-rbl.rb
|
232
232
|
- check-ports.rb
|
233
|
+
- check-ports-nmap.rb
|
233
234
|
- check-ping.rb
|
234
235
|
- check-netstat-tcp.rb
|
235
236
|
- check-multicast-groups.rb
|
@@ -246,6 +247,7 @@ files:
|
|
246
247
|
- bin/check-multicast-groups.rb
|
247
248
|
- bin/check-netstat-tcp.rb
|
248
249
|
- bin/check-ping.rb
|
250
|
+
- bin/check-ports-nmap.rb
|
249
251
|
- bin/check-ports.rb
|
250
252
|
- bin/check-rbl.rb
|
251
253
|
- bin/check-whois-domain-expiration-multi.rb
|
metadata.gz.sig
CHANGED
Binary file
|