sensu-plugins-rabbitmq 2.2.0 → 2.3.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
- data/CHANGELOG.md +6 -1
- data/README.md +1 -0
- data/bin/check-rabbitmq-node-usage.rb +304 -0
- data/lib/sensu-plugins-rabbitmq/version.rb +1 -1
- metadata +3 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4ffa72e143a7268373707912633c755281f22509
|
4
|
+
data.tar.gz: b8f03aa9b79d13d2cba68e43c1682bf39aa79bee
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e11e6b6cf34a8c0af5af7831250f07f29d662484fd598a525159a6aa01b24aa70202883121cfa7d5e752442c07172d3664ee0d6e974ec94d531760f8abf04003
|
7
|
+
data.tar.gz: 6824effe3ac2cff5c8e67867df1a0ddf850da3a749ec5ab872ccc7ee4440a16034a3b515c245a4d976f6a5594e813e62c4b4d68309de89bab54f736a2aae0233
|
data/CHANGELOG.md
CHANGED
@@ -4,6 +4,10 @@ This project adheres to [Semantic Versioning](http://semver.org/).
|
|
4
4
|
This CHANGELOG follows the format listed at [Keep A Changelog](http://keepachangelog.com/)
|
5
5
|
|
6
6
|
## [Unreleased]
|
7
|
+
### [2.3.0] - 2017-05-09
|
8
|
+
### Added
|
9
|
+
- check-rabbitmq-node-usage.rb: added new check to look at rmq node resource useage. (@DvaBearqLoza)
|
10
|
+
|
7
11
|
### [2.2.0] - 2017-05-08
|
8
12
|
### Added
|
9
13
|
- check-rabbitmq-queue.rb: Added --below feature to specify if value below threshold should generate alert (@alexpekurovsky)
|
@@ -118,7 +122,8 @@ NOTE: this release changes the option flags in check-rabbitmq-node-health.rb to
|
|
118
122
|
- Remove copy paste errors in the Readme
|
119
123
|
- Removed Rubygems require Ruby 1.8.7 backwards compatibility from all plugins
|
120
124
|
|
121
|
-
[Unreleased]: https://github.com/sensu-plugins/sensu-plugins-rabbitmq/compare/2.
|
125
|
+
[Unreleased]: https://github.com/sensu-plugins/sensu-plugins-rabbitmq/compare/2.3.0...HEAD
|
126
|
+
[2.3.0]: https://github.com/sensu-plugins/sensu-plugins-rabbitmq/compare/2.2.0...2.3.0
|
122
127
|
[2.2.0]: https://github.com/sensu-plugins/sensu-plugins-rabbitmq/compare/2.1.0...2.2.0
|
123
128
|
[2.1.0]: https://github.com/sensu-plugins/sensu-plugins-rabbitmq/compare/2.0.0...2.1.0
|
124
129
|
[2.0.0]: https://github.com/sensu-plugins/sensu-plugins-rabbitmq/compare/1.3.0...2.0.0
|
data/README.md
CHANGED
@@ -16,6 +16,7 @@
|
|
16
16
|
* bin/check-rabbitmq-messages.rb
|
17
17
|
* bin/check-rabbitmq-network-partitions.rb
|
18
18
|
* bin/check-rabbitmq-node-health.rb
|
19
|
+
* bin/check-rabbitmq-node-usage.rb
|
19
20
|
* bin/check-rabbitmq-queue-drain-time.rb
|
20
21
|
* bin/check-rabbitmq-queue.rb
|
21
22
|
* bin/check-rabbitmq-stomp-alive.rb
|
@@ -0,0 +1,304 @@
|
|
1
|
+
#!/usr/bin/env ruby -W0
|
2
|
+
# encoding: UTF-8
|
3
|
+
#
|
4
|
+
# RabbitMQ check node health plugin
|
5
|
+
# ===
|
6
|
+
#
|
7
|
+
# DESCRIPTION:
|
8
|
+
# This plugin checks if RabbitMQ server node is in a running state.
|
9
|
+
#
|
10
|
+
# The plugin is based on the RabbitMQ cluster node health plugin by Tim Smith
|
11
|
+
# Edited my Milos Dodic and Milos Buncic (2016/10/27)
|
12
|
+
#
|
13
|
+
# USAGE:
|
14
|
+
# "check-rabbitmq-node-usage.rb -w host --username user --password pass --type mem -m 50 -c 90"
|
15
|
+
#
|
16
|
+
# NOTES:
|
17
|
+
# Use of "type" is mandatory. The script will check only the specified type.
|
18
|
+
#
|
19
|
+
# PLATFORMS:
|
20
|
+
# Linux, Windows, BSD, Solaris
|
21
|
+
#
|
22
|
+
# DEPENDENCIES:
|
23
|
+
# RabbitMQ rabbitmq_management plugin
|
24
|
+
# gem: sensu-plugin
|
25
|
+
# gem: carrot-top
|
26
|
+
#
|
27
|
+
# LICENSE:
|
28
|
+
# Copyright 2012 Abhijith G <abhi@runa.com> and Runa Inc.
|
29
|
+
# Copyright 2014 Tim Smith <tim@cozy.co> and Cozy Services Ltd.
|
30
|
+
# Copyright 2015 Edward McLain <ed@edmclain.com> and Daxko, LLC.
|
31
|
+
#
|
32
|
+
# Released under the same terms as Sensu (the MIT license); see LICENSE
|
33
|
+
# for details.
|
34
|
+
|
35
|
+
require 'sensu-plugin/check/cli'
|
36
|
+
require 'carrot-top'
|
37
|
+
|
38
|
+
# Main plugin class
|
39
|
+
class CheckRabbitMQNodeUsage < Sensu::Plugin::Check::CLI
|
40
|
+
option :host,
|
41
|
+
description: 'RabbitMQ host',
|
42
|
+
short: '-w',
|
43
|
+
long: '--host HOST',
|
44
|
+
default: 'localhost'
|
45
|
+
|
46
|
+
option :username,
|
47
|
+
description: 'RabbitMQ username',
|
48
|
+
short: '-u',
|
49
|
+
long: '--username USERNAME',
|
50
|
+
default: 'guest'
|
51
|
+
|
52
|
+
option :password,
|
53
|
+
description: 'RabbitMQ password',
|
54
|
+
short: '-p',
|
55
|
+
long: '--password PASSWORD',
|
56
|
+
default: 'guest'
|
57
|
+
|
58
|
+
option :port,
|
59
|
+
description: 'RabbitMQ API port',
|
60
|
+
short: '-P',
|
61
|
+
long: '--port PORT',
|
62
|
+
default: '15672'
|
63
|
+
|
64
|
+
option :ssl,
|
65
|
+
description: 'Enable SSL for connection to the API',
|
66
|
+
long: '--ssl',
|
67
|
+
boolean: true,
|
68
|
+
default: false
|
69
|
+
|
70
|
+
option :type,
|
71
|
+
description: 'Resource type',
|
72
|
+
required: true,
|
73
|
+
long: '--type TYPE',
|
74
|
+
in: %w(mem socket fd proc disk)
|
75
|
+
|
76
|
+
option :memwarn,
|
77
|
+
description: 'Warning % of mem usage vs high watermark',
|
78
|
+
short: '-m',
|
79
|
+
long: '--mwarn PERCENT',
|
80
|
+
proc: proc(&:to_f),
|
81
|
+
default: 80
|
82
|
+
|
83
|
+
option :memcrit,
|
84
|
+
description: 'Critical % of mem usage vs high watermark',
|
85
|
+
short: '-c',
|
86
|
+
long: '--mcrit PERCENT',
|
87
|
+
proc: proc(&:to_f),
|
88
|
+
default: 90
|
89
|
+
|
90
|
+
option :fdwarn,
|
91
|
+
description: 'Warning % of file descriptor usage vs high watermark',
|
92
|
+
short: '-f',
|
93
|
+
long: '--fwarn PERCENT',
|
94
|
+
proc: proc(&:to_f),
|
95
|
+
default: 80
|
96
|
+
|
97
|
+
option :fdcrit,
|
98
|
+
description: 'Critical % of file descriptor usage vs high watermark',
|
99
|
+
short: '-F',
|
100
|
+
long: '--fcrit PERCENT',
|
101
|
+
proc: proc(&:to_f),
|
102
|
+
default: 90
|
103
|
+
|
104
|
+
option :socketwarn,
|
105
|
+
description: 'Warning % of socket usage vs high watermark',
|
106
|
+
short: '-s',
|
107
|
+
long: '--swarn PERCENT',
|
108
|
+
proc: proc(&:to_f),
|
109
|
+
default: 80
|
110
|
+
|
111
|
+
option :socketcrit,
|
112
|
+
description: 'Critical % of socket usage vs high watermark',
|
113
|
+
short: '-S',
|
114
|
+
long: '--scrit PERCENT',
|
115
|
+
proc: proc(&:to_f),
|
116
|
+
default: 90
|
117
|
+
|
118
|
+
option :procwarn,
|
119
|
+
description: 'Warning % of proc usage vs high watermark',
|
120
|
+
short: '-e',
|
121
|
+
long: '--pwarn PERCENT',
|
122
|
+
proc: proc(&:to_f),
|
123
|
+
default: 80
|
124
|
+
|
125
|
+
option :proccrit,
|
126
|
+
description: 'Critical % of proc usage vs high watermark',
|
127
|
+
short: '-E',
|
128
|
+
long: '--pcrit PERCENT',
|
129
|
+
proc: proc(&:to_f),
|
130
|
+
default: 90
|
131
|
+
|
132
|
+
option :diskwarn,
|
133
|
+
description: 'Warning % of disk usage vs high watermark',
|
134
|
+
short: '-d',
|
135
|
+
long: '--dwarn PERCENT',
|
136
|
+
proc: proc(&:to_f),
|
137
|
+
default: 80
|
138
|
+
|
139
|
+
option :diskcrit,
|
140
|
+
description: 'Critical % of disk usage vs high watermark',
|
141
|
+
short: '-D',
|
142
|
+
long: '--dcrit PERCENT',
|
143
|
+
proc: proc(&:to_f),
|
144
|
+
default: 90
|
145
|
+
|
146
|
+
def run
|
147
|
+
res = node_healthy?
|
148
|
+
|
149
|
+
if res['status'] == 'ok'
|
150
|
+
ok res['message']
|
151
|
+
elsif res['status'] == 'warning'
|
152
|
+
warning res['message']
|
153
|
+
elsif res['status'] == 'critical'
|
154
|
+
critical res['message']
|
155
|
+
else
|
156
|
+
unknown res['message']
|
157
|
+
end
|
158
|
+
end
|
159
|
+
|
160
|
+
def node_healthy?
|
161
|
+
# Checks and shows usage (for the specified type only). Shows usage for ok status as well.
|
162
|
+
case config[:type]
|
163
|
+
when 'mem'
|
164
|
+
output = node_mem
|
165
|
+
when 'socket'
|
166
|
+
output = node_socket
|
167
|
+
when 'fd'
|
168
|
+
output = node_fd
|
169
|
+
when 'proc'
|
170
|
+
output = node_proc
|
171
|
+
when 'disk'
|
172
|
+
output = node_disk
|
173
|
+
end
|
174
|
+
|
175
|
+
{ 'status' => output[:status], 'message' => output[:message] }
|
176
|
+
rescue => e
|
177
|
+
{ 'status' => 'unknown', 'message' => e.message }
|
178
|
+
end
|
179
|
+
|
180
|
+
def node_mem
|
181
|
+
pmem = node_info[:pmem]
|
182
|
+
|
183
|
+
output = {}
|
184
|
+
|
185
|
+
if pmem.to_f >= config[:memcrit]
|
186
|
+
output[:message] = "Memory usage is critical: #{pmem}%"
|
187
|
+
output[:status] = 'critical'
|
188
|
+
elsif pmem.to_f >= config[:memwarn]
|
189
|
+
output[:message] = "Memory usage is at warning: #{pmem}%"
|
190
|
+
output[:status] = 'warning'
|
191
|
+
elsif pmem.to_f < config[:memwarn]
|
192
|
+
output[:message] = "Memory usage is at: #{pmem}%"
|
193
|
+
output[:status] = 'ok'
|
194
|
+
end
|
195
|
+
|
196
|
+
output
|
197
|
+
end
|
198
|
+
|
199
|
+
def node_socket
|
200
|
+
psocket = node_info[:psocket]
|
201
|
+
|
202
|
+
output = {}
|
203
|
+
|
204
|
+
if psocket.to_f >= config[:socketcrit]
|
205
|
+
output[:message] = "Socket usage is critical: #{psocket}%"
|
206
|
+
output[:status] = 'critical'
|
207
|
+
elsif psocket.to_f >= config[:socketwarn]
|
208
|
+
output[:message] = "Socket usage is at warning: #{psocket}%"
|
209
|
+
output[:status] = 'warning'
|
210
|
+
elsif psocket.to_f < config[:socketwarn]
|
211
|
+
output[:message] = "Socket usage is at: #{psocket}%"
|
212
|
+
output[:status] = 'ok'
|
213
|
+
end
|
214
|
+
|
215
|
+
output
|
216
|
+
end
|
217
|
+
|
218
|
+
def node_fd
|
219
|
+
pfd = node_info[:pfd]
|
220
|
+
|
221
|
+
output = {}
|
222
|
+
|
223
|
+
if pfd.to_f >= config[:fdcrit]
|
224
|
+
output[:message] = "File Descriptor usage is critical: #{pfd}%"
|
225
|
+
output[:status] = 'critical'
|
226
|
+
elsif pfd.to_f >= config[:fdwarn]
|
227
|
+
output[:message] = "File Descriptor usage is at warning: #{pfd}%"
|
228
|
+
output[:status] = 'warning'
|
229
|
+
elsif pfd.to_f < config[:fdwarn]
|
230
|
+
output[:message] = "File Descriptor usage is at: #{pfd}%"
|
231
|
+
output[:status] = 'ok'
|
232
|
+
end
|
233
|
+
|
234
|
+
output
|
235
|
+
end
|
236
|
+
|
237
|
+
def node_proc
|
238
|
+
pproc = node_info[:pproc]
|
239
|
+
|
240
|
+
output = {}
|
241
|
+
|
242
|
+
if pproc.to_f >= config[:proccrit]
|
243
|
+
output[:message] = "Proc usage is critical: #{pproc}%"
|
244
|
+
output[:status] = 'critical'
|
245
|
+
elsif pproc.to_f >= config[:procwarn]
|
246
|
+
output[:message] = "Proc usage is at warning: #{pproc}%"
|
247
|
+
output[:status] = 'warning'
|
248
|
+
elsif pproc.to_f < config[:procwarn]
|
249
|
+
output[:message] = "Proc usage is at: #{pproc}%"
|
250
|
+
output[:status] = 'ok'
|
251
|
+
end
|
252
|
+
|
253
|
+
output
|
254
|
+
end
|
255
|
+
|
256
|
+
def node_disk
|
257
|
+
pdisk = node_info[:pdisk]
|
258
|
+
|
259
|
+
output = {}
|
260
|
+
|
261
|
+
if pdisk.to_f >= config[:diskcrit]
|
262
|
+
output[:message] = "Disk usage is critical: #{pdisk}%"
|
263
|
+
output[:status] = 'critical'
|
264
|
+
elsif pdisk.to_f >= config[:diskwarn]
|
265
|
+
output[:message] = "Disk usage is at warning: #{pdisk}%"
|
266
|
+
output[:status] = 'warning'
|
267
|
+
elsif pdisk.to_f < config[:diskwarn]
|
268
|
+
output[:message] = "Disk usage is at: #{pdisk}%"
|
269
|
+
output[:status] = 'ok'
|
270
|
+
end
|
271
|
+
|
272
|
+
output
|
273
|
+
end
|
274
|
+
|
275
|
+
def node_info
|
276
|
+
# Parse the data
|
277
|
+
nodeinfo = rabbitmq_management.nodes[0]
|
278
|
+
|
279
|
+
output = {}
|
280
|
+
|
281
|
+
# Determine % memory consumed
|
282
|
+
output[:pmem] = format('%.2f', nodeinfo['mem_used'].fdiv(nodeinfo['mem_limit']) * 100)
|
283
|
+
# Determine % sockets consumed
|
284
|
+
output[:psocket] = format('%.2f', nodeinfo['sockets_used'].fdiv(nodeinfo['sockets_total']) * 100)
|
285
|
+
# Determine % file descriptors consumed
|
286
|
+
output[:pfd] = format('%.2f', nodeinfo['fd_used'].fdiv(nodeinfo['fd_total']) * 100)
|
287
|
+
# Determine % proc consumed
|
288
|
+
output[:pproc] = format('%.2f', nodeinfo['proc_used'].fdiv(nodeinfo['proc_total']) * 100)
|
289
|
+
# Determine % disk consumed
|
290
|
+
output[:pdisk] = format('%.2f', nodeinfo['disk_free_limit'].fdiv(nodeinfo['disk_free']) * 100)
|
291
|
+
|
292
|
+
output
|
293
|
+
end
|
294
|
+
|
295
|
+
def rabbitmq_management
|
296
|
+
CarrotTop.new(
|
297
|
+
host: config[:host],
|
298
|
+
port: config[:port],
|
299
|
+
user: config[:username],
|
300
|
+
password: config[:password],
|
301
|
+
ssl: config[:ssl]
|
302
|
+
)
|
303
|
+
end
|
304
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sensu-plugins-rabbitmq
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sensu-Plugins and contributors
|
@@ -234,6 +234,7 @@ executables:
|
|
234
234
|
- check-rabbitmq-messages.rb
|
235
235
|
- check-rabbitmq-network-partitions.rb
|
236
236
|
- check-rabbitmq-node-health.rb
|
237
|
+
- check-rabbitmq-node-usage.rb
|
237
238
|
- check-rabbitmq-queue-drain-time.rb
|
238
239
|
- check-rabbitmq-queue.rb
|
239
240
|
- check-rabbitmq-stomp-alive.rb
|
@@ -252,6 +253,7 @@ files:
|
|
252
253
|
- bin/check-rabbitmq-messages.rb
|
253
254
|
- bin/check-rabbitmq-network-partitions.rb
|
254
255
|
- bin/check-rabbitmq-node-health.rb
|
256
|
+
- bin/check-rabbitmq-node-usage.rb
|
255
257
|
- bin/check-rabbitmq-queue-drain-time.rb
|
256
258
|
- bin/check-rabbitmq-queue.rb
|
257
259
|
- bin/check-rabbitmq-stomp-alive.rb
|