sensu-plugins-zookeeper 1.4.0 → 1.5.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 +5 -5
- data/CHANGELOG.md +6 -1
- data/README.md +1 -0
- data/bin/check-netty-zookeeper-cluster.rb +127 -0
- data/lib/sensu-plugins-zookeeper/version.rb +1 -1
- metadata +5 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 730c88c962b31d3b0ca1ef65508e183a42ae62a4b08f237621af5e652decc9e8
|
4
|
+
data.tar.gz: 53eedd6d5defea10428b8c68bf28896578bb7b0e81545b3ed4e4f13a8ff56b7b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0042a27fd7df1d534ff063ed92f0b9c55248b3bc63332d0d4f1c85fd382801b97c4b79229916392a31fb59151b5549e34eebf478bee200348e2cf8c9fe3ab369
|
7
|
+
data.tar.gz: 9b3ec12a7481a6e2c203bc46154f523749290ab5da6f67c25bd7a5d182b92608a3ba5ac85ae74553df0f46e015fb281d8a2699d74c8758c22da701cd679e1763
|
data/CHANGELOG.md
CHANGED
@@ -6,6 +6,10 @@ Which is based on [Keep A Changelog](http://keepachangelog.com/)
|
|
6
6
|
|
7
7
|
## [Unreleased]
|
8
8
|
|
9
|
+
## [1.5.0] - 2017-12-06
|
10
|
+
### Added
|
11
|
+
- check-netty-zookeeper-cluster.rb: new script to check if a zookeeper v. 3.5 cluster is OK (@duncaan)
|
12
|
+
|
9
13
|
## [1.4.0] - 2017-10-31
|
10
14
|
### Added
|
11
15
|
- Added zookeeper port option to metrics-zookeeper-cluster.rb
|
@@ -67,7 +71,8 @@ Which is based on [Keep A Changelog](http://keepachangelog.com/)
|
|
67
71
|
### Added
|
68
72
|
- initial release
|
69
73
|
|
70
|
-
[Unreleased]: https://github.com/sensu-plugins/sensu-plugins-zookeeper/compare/1.
|
74
|
+
[Unreleased]: https://github.com/sensu-plugins/sensu-plugins-zookeeper/compare/1.5.0...HEAD
|
75
|
+
[1.5.0]: https://github.com/sensu-plugins/sensu-plugins-zookeeper/compare/1.4.0...1.5.0
|
71
76
|
[1.4.0]: https://github.com/sensu-plugins/sensu-plugins-zookeeper/compare/1.3.0...1.4.0
|
72
77
|
[1.3.0]: https://github.com/sensu-plugins/sensu-plugins-zookeeper/compare/1.2.0...1.3.0
|
73
78
|
[1.2.0]: https://github.com/sensu-plugins/sensu-plugins-zookeeper/compare/1.1.0...1.2.0
|
data/README.md
CHANGED
@@ -17,6 +17,7 @@
|
|
17
17
|
* check-zookeeper-ruok.rb - Check if Zookeeper node responds to 'ruok' query succesfully
|
18
18
|
* check-zookeeper-mode.rb - Check if Zookeeper node is in standalone or cluster(leader or follower) mode
|
19
19
|
* check-zookeeper-cluster.rb - Check if a exhibitor managed Zookeeper cluster is OK.
|
20
|
+
* check-netty-zookeeper-cluster.rb - Check if a zookeeper 3.5 cluster is OK.
|
20
21
|
* metrics-zookeeper.rb - Gather metrics from Zookeeper
|
21
22
|
* metrics-zookeeper-cluster.rb - Gather metrics from An Exhibitor run Zookeeper cluster
|
22
23
|
|
@@ -0,0 +1,127 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# encoding: UTF-8
|
3
|
+
|
4
|
+
#
|
5
|
+
# netty-check-zookeeper-cluster
|
6
|
+
#
|
7
|
+
# DESCRIPTION:
|
8
|
+
# Check if a Zookeeper 3.5 cluster is OK.
|
9
|
+
#
|
10
|
+
# This check will each verify each node for errors,
|
11
|
+
# check averag latency for a threshold value,
|
12
|
+
# and if the cluster has a leader, make sure it has the right number of followers.
|
13
|
+
#
|
14
|
+
# PLATFORMS:
|
15
|
+
# All
|
16
|
+
#
|
17
|
+
# DEPENDENCIES:
|
18
|
+
# gem: sensu-plugin
|
19
|
+
#
|
20
|
+
# USAGE:
|
21
|
+
# Check if a node has Zookeeper running and responds with imok.
|
22
|
+
#
|
23
|
+
# Cluster should have 3 (n+1) nodes and average latency threshold should be 10
|
24
|
+
# ./netty-check-zookeeeper-cluster.rb -c 2 -l 10
|
25
|
+
#
|
26
|
+
# LICENCE:
|
27
|
+
# Duncan Schulze <duschulze@gmail.com>
|
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 'net/http'
|
34
|
+
require 'json'
|
35
|
+
|
36
|
+
class CheckZookeeperCluster < Sensu::Plugin::Check::CLI
|
37
|
+
option :netty_port,
|
38
|
+
description: 'Zookeeper nodes\' listen port',
|
39
|
+
short: '-p port',
|
40
|
+
long: '--port port',
|
41
|
+
default: 8080,
|
42
|
+
proc: proc(&:to_i)
|
43
|
+
|
44
|
+
option :followers,
|
45
|
+
description: 'Zookeeper cluster follower count',
|
46
|
+
short: '-c count',
|
47
|
+
long: '--count count',
|
48
|
+
default: 2,
|
49
|
+
proc: proc(&:to_i)
|
50
|
+
|
51
|
+
option :latency,
|
52
|
+
description: 'Critical threshold for Zookeeper average latency',
|
53
|
+
short: '-l TICKS',
|
54
|
+
long: '--latency TICKS',
|
55
|
+
proc: proc(&:to_i),
|
56
|
+
default: 10
|
57
|
+
|
58
|
+
def get_monitoring_output(port)
|
59
|
+
uri = URI.parse("http://localhost:#{port}/commands/monitor")
|
60
|
+
http = Net::HTTP.new(uri.host, uri.port, read_timeout: 45)
|
61
|
+
http.read_timeout = 30
|
62
|
+
request = Net::HTTP::Get.new(uri.request_uri)
|
63
|
+
response = http.request(request)
|
64
|
+
JSON.parse(response.body)
|
65
|
+
rescue Errno::ECONNREFUSED
|
66
|
+
warning 'Connection refused'
|
67
|
+
rescue Timeout::Error
|
68
|
+
warning 'Connection timed out'
|
69
|
+
end
|
70
|
+
|
71
|
+
def are_you_ok
|
72
|
+
response = get_monitoring_output(config[:netty_port])
|
73
|
+
if response['error'].nil?
|
74
|
+
return { success: true,
|
75
|
+
message: 'Zookeeper is ok' }
|
76
|
+
else
|
77
|
+
return { success: false,
|
78
|
+
message: 'Zookeeper is not ok, look into the logs' }
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
def zookeeper_latency
|
83
|
+
response = get_monitoring_output(config[:netty_port])
|
84
|
+
if response['avg_latency'].to_i > config[:latecy].to_i
|
85
|
+
return { success: false,
|
86
|
+
message: %(Zookeeper latency is greater than #{config['latency']} seconds) }
|
87
|
+
else
|
88
|
+
return { success: true,
|
89
|
+
message: 'Zookeeper latency is ok' }
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
def follower_count
|
94
|
+
response = get_monitoring_output(config[:netty_port])
|
95
|
+
if response['server_state'].to_s == 'leader'
|
96
|
+
if response['synced_followers'].to_i == config[:followers].to_i
|
97
|
+
return { success: true,
|
98
|
+
message: 'Zookeeper follower count is correct' }
|
99
|
+
else
|
100
|
+
return { success: false,
|
101
|
+
message: %(Zookeeper follower count is not equal to #{config[:followers]}!) }
|
102
|
+
end
|
103
|
+
else
|
104
|
+
return { success: true,
|
105
|
+
message: 'Not the leader, follower check does not apply' }
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
def run
|
110
|
+
results = []
|
111
|
+
are_you_ok_result = are_you_ok
|
112
|
+
zookeeper_latency_result = zookeeper_latency
|
113
|
+
follower_count_result = follower_count
|
114
|
+
|
115
|
+
results.push(are_you_ok_result)
|
116
|
+
results.push(zookeeper_latency_result)
|
117
|
+
results.push(follower_count_result)
|
118
|
+
|
119
|
+
output = "SUCCESS: #{results.select { |h| h[:success] }.map { |h| h[:message] }}\n FAIL: #{results.reject { |h| h[:success] }.map { |h| h[:message] }}"
|
120
|
+
|
121
|
+
if results.any? { |h| !h[:success] }
|
122
|
+
warning output
|
123
|
+
else
|
124
|
+
ok output
|
125
|
+
end
|
126
|
+
end
|
127
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sensu-plugins-zookeeper
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.5.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: 2017-
|
11
|
+
date: 2017-12-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: sensu-plugin
|
@@ -167,6 +167,7 @@ dependencies:
|
|
167
167
|
description: Zookeeper plugins for checks and metrics
|
168
168
|
email: "<sensu-users@googlegroups.com>"
|
169
169
|
executables:
|
170
|
+
- check-netty-zookeeper-cluster.rb
|
170
171
|
- check-znode.rb
|
171
172
|
- check-zookeeper-cluster.rb
|
172
173
|
- check-zookeeper-file-descriptors.rb
|
@@ -182,6 +183,7 @@ files:
|
|
182
183
|
- CHANGELOG.md
|
183
184
|
- LICENSE
|
184
185
|
- README.md
|
186
|
+
- bin/check-netty-zookeeper-cluster.rb
|
185
187
|
- bin/check-znode.rb
|
186
188
|
- bin/check-zookeeper-cluster.rb
|
187
189
|
- bin/check-zookeeper-file-descriptors.rb
|
@@ -217,7 +219,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
217
219
|
version: '0'
|
218
220
|
requirements: []
|
219
221
|
rubyforge_project:
|
220
|
-
rubygems_version: 2.
|
222
|
+
rubygems_version: 2.7.3
|
221
223
|
signing_key:
|
222
224
|
specification_version: 4
|
223
225
|
summary: Sensu plugins for zookeeper
|