sensu-plugins-rabbitmq 0.0.1
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 +7 -0
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +1 -0
- data/CHANGELOG.md +35 -0
- data/LICENSE +22 -0
- data/README.md +32 -0
- data/bin/check-rabbitmq-alive.rb +97 -0
- data/bin/check-rabbitmq-amqp-alive.rb +97 -0
- data/bin/check-rabbitmq-cluster-health.rb +124 -0
- data/bin/check-rabbitmq-consumers.rb +131 -0
- data/bin/check-rabbitmq-messages.rb +128 -0
- data/bin/check-rabbitmq-network-partitions.rb +82 -0
- data/bin/check-rabbitmq-node-health.rb +184 -0
- data/bin/check-rabbitmq-queue-drain-time.rb +129 -0
- data/bin/check-rabbitmq-queue.rb +117 -0
- data/bin/check-rabbitmq-stomp-alive.rb +109 -0
- data/bin/metrics-rabbitmq-overview.rb +142 -0
- data/bin/metrics-rabbitmq-queue.rb +108 -0
- data/lib/sensu-plugins-rabbitmq.rb +15 -0
- data/lib/sensu-plugins-rabbitmq/version.rb +28 -0
- metadata +284 -0
- metadata.gz.sig +1 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: c3938fc8f1c33be6ee3f1ced513960928dc62e09
|
4
|
+
data.tar.gz: 17e8e359a42996896ff54693c34d6c8ccc21498e
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: dc59629127f1d646280538bca55bd3cbf6a0299eaab77fbd4153bfbcbd9b3751a04bc27a930a0a13e6b0c536c93e6e3682e09967ee3ff8c55433bf8b75af869d
|
7
|
+
data.tar.gz: d793e6f461d8dc98380d47e1e748e2feadea26df87386e456759ac19215b21cc2b733953a3bc53638de393166e9bbdbd51a64f3dfa397bdd8e6e0262e744c315
|
checksums.yaml.gz.sig
ADDED
Binary file
|
data.tar.gz.sig
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
X��W8��)~,�&F99%�1P:� �������i[%�^��o�;>%J��nߟm9��}&��sW8H%�t�M~b�Ҩ���N��*I����-�
|
data/CHANGELOG.md
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
#Change Log
|
2
|
+
This project adheres to [Semantic Versioning](http://semver.org/).
|
3
|
+
|
4
|
+
This CHANGELOG follows the format listed at [Keep A Changelog](http://keepachangelog.com/)
|
5
|
+
|
6
|
+
## Unreleased][unreleased]
|
7
|
+
|
8
|
+
## 0.0.1 - 2015-05-30
|
9
|
+
|
10
|
+
### Added
|
11
|
+
- Add the ability to monitor all queues in the consumer count plugin
|
12
|
+
- Add ability to exclude specific queues in the consumer count plugin
|
13
|
+
- Added Ruby 2.2.0 to Travis
|
14
|
+
- Added additional node health checks to the check-rabbitmq-node-health.rb plugin
|
15
|
+
- Added development tasks to the Rakefile
|
16
|
+
- Added a Gemfile
|
17
|
+
- Added egress rate to the metrics-rabbitmq-queue.rb plugin
|
18
|
+
- Added encoding comment to each plugin
|
19
|
+
- Added check-rabbitmq-queue-drain-time.rb plugin
|
20
|
+
- Added queue drain time and the number of consumers to the metrics-rabbitmq-queue.rb plugin
|
21
|
+
- Added check-rabbitmq-network-partitions plugin
|
22
|
+
- Added the ability to monitor message count per queue and exclude specific queues in check-rabbitmq-messages.rb
|
23
|
+
|
24
|
+
### Fixed
|
25
|
+
- Fixed the critical and warning values to alert when <= not < in check-rabbitmq-consumers.rb
|
26
|
+
|
27
|
+
### Changed
|
28
|
+
- Updated Rubocop to 0.30 and resolved all warnings
|
29
|
+
- Updated the headers to match and use the new template for additional information
|
30
|
+
- Updated class names to match plugin names for better alert messaging
|
31
|
+
- Made all plugins executable
|
32
|
+
|
33
|
+
### Removed
|
34
|
+
- Remove copy paste errors in the Readme
|
35
|
+
- Removed Rubygems require Ruby 1.8.7 backwards compatibility from all plugins
|
data/LICENSE
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2015 Sensu-Plugins
|
2
|
+
|
3
|
+
MIT License
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
a copy of this software and associated documentation files (the
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
the following conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be
|
14
|
+
included in all copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
## Sensu-Plugins-rabbitmq
|
2
|
+
|
3
|
+
[](https://travis-ci.org/sensu-plugins/sensu-plugins-rabbitmq)
|
4
|
+
[](http://badge.fury.io/rb/sensu-plugins-rabbitmq)
|
5
|
+
[](https://codeclimate.com/github/sensu-plugins/sensu-plugins-rabbitmq)
|
6
|
+
[](https://codeclimate.com/github/sensu-plugins/sensu-plugins-rabbitmq)
|
7
|
+
[](https://gemnasium.com/sensu-plugins/sensu-plugins-rabbitmq)
|
8
|
+
[](https://codeship.com/projects/82842)
|
9
|
+
|
10
|
+
## Functionality
|
11
|
+
|
12
|
+
## Files
|
13
|
+
* bin/check-rabbitmq-alive.rb
|
14
|
+
* bin/check-rabbitmq-amqp-alive.rb
|
15
|
+
* bin/check-rabbitmq-cluster-health.rb
|
16
|
+
* bin/check-rabbitmq-consumers.rb
|
17
|
+
* bin/check-rabbitmq-messages.rb
|
18
|
+
* bin/check-rabbitmq-network-partitions.rb
|
19
|
+
* bin/check-rabbitmq-node-health.rb
|
20
|
+
* bin/check-rabbitmq-queue-drain-time.rb
|
21
|
+
* bin/check-rabbitmq-queue.rb
|
22
|
+
* bin/check-rabbitmq-stomp-alive.rb
|
23
|
+
* bin/metrics-rabbitmq-overview.rb
|
24
|
+
* bin/metrics-rabbitmq-queue.rb
|
25
|
+
|
26
|
+
## Usage
|
27
|
+
|
28
|
+
## Installation
|
29
|
+
|
30
|
+
[Installation and Setup](https://github.com/sensu-plugins/documentation/blob/master/user_docs/installation_instructions.md)
|
31
|
+
|
32
|
+
## Notes
|
@@ -0,0 +1,97 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# encoding: UTF-8
|
3
|
+
#
|
4
|
+
# RabbitMQ check alive plugin
|
5
|
+
# ===
|
6
|
+
#
|
7
|
+
# DESCRIPTION:
|
8
|
+
# This plugin checks if RabbitMQ server is alive using the REST API
|
9
|
+
#
|
10
|
+
# PLATFORMS:
|
11
|
+
# Linux, Windows, BSD, Solaris
|
12
|
+
#
|
13
|
+
# DEPENDENCIES:
|
14
|
+
# RabbitMQ rabbitmq_management plugin
|
15
|
+
# gem: sensu-plugin
|
16
|
+
# gem: rest-client
|
17
|
+
#
|
18
|
+
# LICENSE:
|
19
|
+
# Copyright 2012 Abhijith G <abhi@runa.com> and Runa Inc.
|
20
|
+
#
|
21
|
+
# Released under the same terms as Sensu (the MIT license); see LICENSE
|
22
|
+
# for details.
|
23
|
+
|
24
|
+
require 'sensu-plugin/check/cli'
|
25
|
+
require 'json'
|
26
|
+
require 'rest_client'
|
27
|
+
|
28
|
+
# main plugin class
|
29
|
+
class CheckRabbitMQAlive < Sensu::Plugin::Check::CLI
|
30
|
+
option :host,
|
31
|
+
description: 'RabbitMQ host',
|
32
|
+
short: '-w',
|
33
|
+
long: '--host HOST',
|
34
|
+
default: 'localhost'
|
35
|
+
|
36
|
+
option :vhost,
|
37
|
+
description: 'RabbitMQ vhost',
|
38
|
+
short: '-v',
|
39
|
+
long: '--vhost VHOST',
|
40
|
+
default: '%2F'
|
41
|
+
|
42
|
+
option :username,
|
43
|
+
description: 'RabbitMQ username',
|
44
|
+
short: '-u',
|
45
|
+
long: '--username USERNAME',
|
46
|
+
default: 'guest'
|
47
|
+
|
48
|
+
option :password,
|
49
|
+
description: 'RabbitMQ password',
|
50
|
+
short: '-p',
|
51
|
+
long: '--password PASSWORD',
|
52
|
+
default: 'guest'
|
53
|
+
|
54
|
+
option :port,
|
55
|
+
description: 'RabbitMQ API port',
|
56
|
+
short: '-P',
|
57
|
+
long: '--port PORT',
|
58
|
+
default: '15672'
|
59
|
+
|
60
|
+
option :ssl,
|
61
|
+
description: 'Enable SSL for connection to RabbitMQ',
|
62
|
+
long: '--ssl',
|
63
|
+
boolean: true,
|
64
|
+
default: false
|
65
|
+
|
66
|
+
def run
|
67
|
+
res = vhost_alive?
|
68
|
+
|
69
|
+
if res['status'] == 'ok'
|
70
|
+
ok res['message']
|
71
|
+
elsif res['status'] == 'critical'
|
72
|
+
critical res['message']
|
73
|
+
else
|
74
|
+
unknown res['message']
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
def vhost_alive?
|
79
|
+
host = config[:host]
|
80
|
+
port = config[:port]
|
81
|
+
username = config[:username]
|
82
|
+
password = config[:password]
|
83
|
+
vhost = config[:vhost]
|
84
|
+
ssl = config[:ssl]
|
85
|
+
|
86
|
+
begin
|
87
|
+
resource = RestClient::Resource.new "http#{ssl ? 's' : ''}://#{host}:#{port}/api/aliveness-test/#{vhost}", username, password
|
88
|
+
# Attempt to parse response (just to trigger parse exception)
|
89
|
+
_response = JSON.parse(resource.get) == { 'status' => 'ok' }
|
90
|
+
{ 'status' => 'ok', 'message' => 'RabbitMQ server is alive' }
|
91
|
+
rescue Errno::ECONNREFUSED => e
|
92
|
+
{ 'status' => 'critical', 'message' => e.message }
|
93
|
+
rescue => e
|
94
|
+
{ 'status' => 'unknown', 'message' => e.message }
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
@@ -0,0 +1,97 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# encoding: UTF-8
|
3
|
+
#
|
4
|
+
# RabbitMQ check amqp alive plugin
|
5
|
+
# ===
|
6
|
+
#
|
7
|
+
# DESCRIPTION:
|
8
|
+
# This plugin checks if RabbitMQ server is alive using the REST API
|
9
|
+
#
|
10
|
+
# PLATFORMS:
|
11
|
+
# Linux, BSD, Solaris
|
12
|
+
#
|
13
|
+
# DEPENDENCIES:
|
14
|
+
# RabbitMQ rabbitmq_management plugin
|
15
|
+
# gem: sensu-plugin
|
16
|
+
# gem: bunny
|
17
|
+
#
|
18
|
+
# LICENSE:
|
19
|
+
# Copyright 2013 Milos Gajdos
|
20
|
+
#
|
21
|
+
# Released under the same terms as Sensu (the MIT license); see LICENSE
|
22
|
+
# for details.
|
23
|
+
|
24
|
+
require 'sensu-plugin/check/cli'
|
25
|
+
require 'bunny'
|
26
|
+
|
27
|
+
# main plugin class
|
28
|
+
class CheckRabbitAMQPAlive < Sensu::Plugin::Check::CLI
|
29
|
+
option :host,
|
30
|
+
description: 'RabbitMQ host',
|
31
|
+
short: '-w',
|
32
|
+
long: '--host HOST',
|
33
|
+
default: 'localhost'
|
34
|
+
|
35
|
+
option :vhost,
|
36
|
+
description: 'RabbitMQ vhost',
|
37
|
+
short: '-v',
|
38
|
+
long: '--vhost VHOST',
|
39
|
+
default: '%2F'
|
40
|
+
|
41
|
+
option :username,
|
42
|
+
description: 'RabbitMQ username',
|
43
|
+
short: '-u',
|
44
|
+
long: '--username USERNAME',
|
45
|
+
default: 'guest'
|
46
|
+
|
47
|
+
option :password,
|
48
|
+
description: 'RabbitMQ password',
|
49
|
+
short: '-p',
|
50
|
+
long: '--password PASSWORD',
|
51
|
+
default: 'guest'
|
52
|
+
|
53
|
+
option :port,
|
54
|
+
description: 'RabbitMQ AMQP port',
|
55
|
+
short: '-P',
|
56
|
+
long: '--port PORT',
|
57
|
+
default: '5672'
|
58
|
+
|
59
|
+
option :ssl,
|
60
|
+
description: 'Enable SSL for connection to RabbitMQ',
|
61
|
+
long: '--ssl',
|
62
|
+
boolean: true,
|
63
|
+
default: false
|
64
|
+
|
65
|
+
def run
|
66
|
+
res = vhost_alive?
|
67
|
+
|
68
|
+
if res['status'] == 'ok'
|
69
|
+
ok res['message']
|
70
|
+
elsif res['status'] == 'critical'
|
71
|
+
critical res['message']
|
72
|
+
else
|
73
|
+
unknown res['message']
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
def vhost_alive?
|
78
|
+
host = config[:host]
|
79
|
+
port = config[:port]
|
80
|
+
username = config[:username]
|
81
|
+
password = config[:password]
|
82
|
+
vhost = config[:vhost]
|
83
|
+
ssl = config[:ssl]
|
84
|
+
|
85
|
+
begin
|
86
|
+
conn = Bunny.new("amqp#{ssl ? 's' : ''}://#{username}:#{password}@#{host}:#{port}/#{vhost}")
|
87
|
+
conn.start
|
88
|
+
{ 'status' => 'ok', 'message' => 'RabbitMQ server is alive' }
|
89
|
+
rescue Bunny::PossibleAuthenticationFailureError
|
90
|
+
{ 'status' => 'critical', 'message' => 'Possible authentication failure' }
|
91
|
+
rescue Bunny::TCPConnectionFailed
|
92
|
+
{ 'status' => 'critical', 'message' => 'TCP connection refused' }
|
93
|
+
rescue => e
|
94
|
+
{ 'status' => 'unknown', 'message' => e.message }
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
@@ -0,0 +1,124 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# encoding: UTF-8
|
3
|
+
#
|
4
|
+
# RabbitMQ check cluster nodes health plugin
|
5
|
+
# ===
|
6
|
+
#
|
7
|
+
# DESCRIPTION:
|
8
|
+
# This plugin checks if RabbitMQ server's cluster nodes are in a running state.
|
9
|
+
# It also accepts and optional list of nodes and verifies that those nodes are
|
10
|
+
# present in the cluster.
|
11
|
+
# The plugin is based on the RabbitMQ alive plugin by Abhijith G.
|
12
|
+
#
|
13
|
+
# PLATFORMS:
|
14
|
+
# Linux, Windows, BSD, Solaris
|
15
|
+
#
|
16
|
+
# DEPENDENCIES:
|
17
|
+
# RabbitMQ rabbitmq_management plugin
|
18
|
+
# gem: sensu-plugin
|
19
|
+
# gem: rest-client
|
20
|
+
#
|
21
|
+
# LICENSE:
|
22
|
+
# Copyright 2012 Abhijith G <abhi@runa.com> and Runa Inc.
|
23
|
+
# Copyright 2014 Tim Smith <tim@cozy.co> and Cozy Services Ltd.
|
24
|
+
#
|
25
|
+
# Released under the same terms as Sensu (the MIT license); see LICENSE
|
26
|
+
# for details.
|
27
|
+
|
28
|
+
require 'sensu-plugin/check/cli'
|
29
|
+
require 'json'
|
30
|
+
require 'rest_client'
|
31
|
+
|
32
|
+
# main plugin class
|
33
|
+
class CheckRabbitMQCluster < Sensu::Plugin::Check::CLI
|
34
|
+
option :host,
|
35
|
+
description: 'RabbitMQ host',
|
36
|
+
short: '-w',
|
37
|
+
long: '--host HOST',
|
38
|
+
default: 'localhost'
|
39
|
+
|
40
|
+
option :username,
|
41
|
+
description: 'RabbitMQ username',
|
42
|
+
short: '-u',
|
43
|
+
long: '--username USERNAME',
|
44
|
+
default: 'guest'
|
45
|
+
|
46
|
+
option :password,
|
47
|
+
description: 'RabbitMQ password',
|
48
|
+
short: '-p',
|
49
|
+
long: '--password PASSWORD',
|
50
|
+
default: 'guest'
|
51
|
+
|
52
|
+
option :port,
|
53
|
+
description: 'RabbitMQ API port',
|
54
|
+
short: '-P',
|
55
|
+
long: '--port PORT',
|
56
|
+
default: '15672'
|
57
|
+
|
58
|
+
option :nodes,
|
59
|
+
description: 'Optional comma separated list of expected nodes in the cluster',
|
60
|
+
short: '-n',
|
61
|
+
long: '--nodes NODE1,NODE2',
|
62
|
+
default: ''
|
63
|
+
|
64
|
+
def run
|
65
|
+
res = cluster_healthy?
|
66
|
+
|
67
|
+
if res['status'] == 'ok'
|
68
|
+
ok res['message']
|
69
|
+
elsif res['status'] == 'critical'
|
70
|
+
critical res['message']
|
71
|
+
else
|
72
|
+
unknown res['message']
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
def missing_nodes?(nodes, servers_status)
|
77
|
+
missing = []
|
78
|
+
if nodes.empty?
|
79
|
+
missing
|
80
|
+
else
|
81
|
+
nodes.reject { |x| servers_status.keys.include?(x) }
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
def failed_nodes?(servers_status)
|
86
|
+
failed_nodes = []
|
87
|
+
servers_status.each { |sv, stat| failed_nodes << sv unless stat == true }
|
88
|
+
failed_nodes
|
89
|
+
end
|
90
|
+
|
91
|
+
def cluster_healthy?
|
92
|
+
host = config[:host]
|
93
|
+
port = config[:port]
|
94
|
+
username = config[:username]
|
95
|
+
password = config[:password]
|
96
|
+
nodes = config[:nodes].split(',')
|
97
|
+
|
98
|
+
begin
|
99
|
+
resource = RestClient::Resource.new "http://#{host}:#{port}/api/nodes", username, password
|
100
|
+
# create a hash of the server names and their running state
|
101
|
+
servers_status = Hash[JSON.parse(resource.get).map { |server| [server['name'], server['running']] }]
|
102
|
+
|
103
|
+
# true or false for health of the nodes
|
104
|
+
missing_nodes = missing_nodes?(nodes, servers_status)
|
105
|
+
|
106
|
+
# array of nodes that are not running
|
107
|
+
failed_nodes = failed_nodes?(servers_status)
|
108
|
+
|
109
|
+
# build status and message
|
110
|
+
status = failed_nodes.empty? && missing_nodes.empty? ? 'ok' : 'critical'
|
111
|
+
if failed_nodes.empty?
|
112
|
+
message = "#{servers_status.keys.count} healthy cluster nodes"
|
113
|
+
else
|
114
|
+
message = "#{failed_nodes.count} failed cluster node: #{failed_nodes.sort.join(',')}"
|
115
|
+
end
|
116
|
+
message.prepend("#{missing_nodes.count } node(s) not found: #{missing_nodes.join(',')}. ") unless missing_nodes.empty?
|
117
|
+
{ 'status' => status, 'message' => message }
|
118
|
+
rescue Errno::ECONNREFUSED => e
|
119
|
+
{ 'status' => 'critical', 'message' => e.message }
|
120
|
+
rescue => e
|
121
|
+
{ 'status' => 'unknown', 'message' => e.message }
|
122
|
+
end
|
123
|
+
end
|
124
|
+
end
|
@@ -0,0 +1,131 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# encoding: UTF-8
|
3
|
+
#
|
4
|
+
# Check RabbitMQ consumers
|
5
|
+
# ===
|
6
|
+
#
|
7
|
+
# DESCRIPTION:
|
8
|
+
# This plugin checks the number of consumers on the RabbitMQ server
|
9
|
+
#
|
10
|
+
# PLATFORMS:
|
11
|
+
# Linux, BSD, Solaris
|
12
|
+
#
|
13
|
+
# DEPENDENCIES:
|
14
|
+
# RabbitMQ rabbitmq_management plugin
|
15
|
+
# gem: sensu-plugin
|
16
|
+
# gem: carrot-top
|
17
|
+
#
|
18
|
+
# LICENSE:
|
19
|
+
# Copyright 2014 Daniel Kerwin <d.kerwin@gini.net>
|
20
|
+
# Copyright 2014 Tim Smith <tim@cozy.co>
|
21
|
+
#
|
22
|
+
# Released under the same terms as Sensu (the MIT license); see LICENSE
|
23
|
+
# for details.
|
24
|
+
|
25
|
+
require 'sensu-plugin/check/cli'
|
26
|
+
require 'carrot-top'
|
27
|
+
|
28
|
+
# main plugin class
|
29
|
+
class CheckRabbitMQConsumers < Sensu::Plugin::Check::CLI
|
30
|
+
option :host,
|
31
|
+
description: 'RabbitMQ management API host',
|
32
|
+
long: '--host HOST',
|
33
|
+
default: 'localhost'
|
34
|
+
|
35
|
+
option :port,
|
36
|
+
description: 'RabbitMQ management API port',
|
37
|
+
long: '--port PORT',
|
38
|
+
proc: proc(&:to_i),
|
39
|
+
default: 15_672
|
40
|
+
|
41
|
+
option :ssl,
|
42
|
+
description: 'Enable SSL for connection to the API',
|
43
|
+
long: '--ssl',
|
44
|
+
boolean: true,
|
45
|
+
default: false
|
46
|
+
|
47
|
+
option :user,
|
48
|
+
description: 'RabbitMQ management API user',
|
49
|
+
long: '--user USER',
|
50
|
+
default: 'guest'
|
51
|
+
|
52
|
+
option :password,
|
53
|
+
description: 'RabbitMQ management API password',
|
54
|
+
long: '--password PASSWORD',
|
55
|
+
default: 'guest'
|
56
|
+
|
57
|
+
option :queue,
|
58
|
+
description: 'Comma separated list of RabbitMQ queues to monitor.',
|
59
|
+
long: '--queue queue_name',
|
60
|
+
proc: proc { |q| q.split(',') }
|
61
|
+
|
62
|
+
option :exclude,
|
63
|
+
description: 'Comma separated list of RabbitMQ queues to NOT monitor. All others will be monitored.',
|
64
|
+
long: '--exclude queue_name',
|
65
|
+
proc: proc { |q| q.split(',') }
|
66
|
+
|
67
|
+
option :warn,
|
68
|
+
short: '-w NUM_CONSUMERS',
|
69
|
+
long: '--warn NUM_CONSUMERS',
|
70
|
+
proc: proc(&:to_i),
|
71
|
+
description: 'WARNING consumer count threshold',
|
72
|
+
default: 5
|
73
|
+
|
74
|
+
option :critical,
|
75
|
+
short: '-c NUM_CONSUMERS',
|
76
|
+
long: '--critical NUM_CONSUMERS',
|
77
|
+
description: 'CRITICAL consumer count threshold',
|
78
|
+
proc: proc(&:to_i),
|
79
|
+
default: 2
|
80
|
+
|
81
|
+
def rabbit
|
82
|
+
begin
|
83
|
+
connection = CarrotTop.new(
|
84
|
+
host: config[:host],
|
85
|
+
port: config[:port],
|
86
|
+
user: config[:user],
|
87
|
+
password: config[:password],
|
88
|
+
ssl: config[:ssl]
|
89
|
+
)
|
90
|
+
rescue
|
91
|
+
warning 'could not connect to rabbitmq'
|
92
|
+
end
|
93
|
+
connection
|
94
|
+
end
|
95
|
+
|
96
|
+
def return_condition(missing, critical, warning)
|
97
|
+
if critical.count > 0 || missing.count > 0
|
98
|
+
message = ''
|
99
|
+
message << "Queues in critical state: #{critical.join(', ')}. " if critical.count > 0
|
100
|
+
message << "Queues missing: #{missing.join(', ')}" if missing.count > 0
|
101
|
+
critical(message)
|
102
|
+
elsif warning.count > 0
|
103
|
+
warning("Queues in warning state: #{warning.join(', ')}")
|
104
|
+
else
|
105
|
+
ok
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
def run
|
110
|
+
# create arrays to hold failures
|
111
|
+
missing = config[:queue] || []
|
112
|
+
critical = []
|
113
|
+
warn = []
|
114
|
+
|
115
|
+
rabbit.queues.each do |queue|
|
116
|
+
# if specific queues were passed only monitor those.
|
117
|
+
# if specific queues to exclude were passed then skip those
|
118
|
+
if config[:queue]
|
119
|
+
next unless config[:queue].include?(queue['name'])
|
120
|
+
elsif config[:exclude]
|
121
|
+
next if config[:exclude].include?(queue['name'])
|
122
|
+
end
|
123
|
+
missing.delete(queue['name'])
|
124
|
+
consumers = queue['consumers']
|
125
|
+
critical.push(queue['name']) if consumers <= config[:critical]
|
126
|
+
warn.push(queue['name']) if consumers <= config[:warn]
|
127
|
+
end
|
128
|
+
|
129
|
+
return_condition(missing, critical, warn)
|
130
|
+
end
|
131
|
+
end
|