sensu-plugins-kafka 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/CHANGELOG.md +8 -0
- data/LICENSE +22 -0
- data/README.md +21 -0
- data/bin/check-consumer-lag.rb +181 -0
- data/bin/check-topics.rb +92 -0
- data/bin/metrics-consumer.rb +112 -0
- data/lib/sensu-plugins-kafka.rb +2 -0
- data/lib/sensu-plugins-kafka/version.rb +13 -0
- metadata +201 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 65754e8c1e0baa13b3cdf0899acf18e43f0a4324
|
4
|
+
data.tar.gz: 049a7b8157a9d8a65c7a9ce565b4aab4841996f6
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 14f47ddcc363ae87861c322b6ed558b7967e9b1959889a8e316cb94395ad65d5afde86c04b0a649fc00d8a1eeff56b8020c3275df162823ea9ad6da2ac9629ae
|
7
|
+
data.tar.gz: 0e48d28fdef98c2f3ab7bf852f2809091253f9b253bf2ce85a3037a886dd13ce58cf294c4a585914750340e2921bdb09805d2a2fc885841487b7a6fdfa46c8ae
|
data/CHANGELOG.md
ADDED
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,21 @@
|
|
1
|
+
## Sensu-Plugins-Kafka
|
2
|
+
|
3
|
+
[![Build Status](https://travis-ci.org/obazoud/sensu-plugins-kafka.svg?branch=master)](https://travis-ci.org/obazoud/sensu-plugins-kafka)
|
4
|
+
|
5
|
+
## Functionality
|
6
|
+
|
7
|
+
**check-consumer-lag.rb**
|
8
|
+
|
9
|
+
**metrics-consumer.rb**
|
10
|
+
|
11
|
+
## Files
|
12
|
+
|
13
|
+
## Usage
|
14
|
+
|
15
|
+
## Installation
|
16
|
+
|
17
|
+
[Installation and Setup](http://sensu-plugins.io/docs/installation_instructions.html)
|
18
|
+
|
19
|
+
Kafka installation is required where checks will be made.
|
20
|
+
|
21
|
+
Note: In addition to the standard installation requirements the installation of this gem will require compiling the nokogiri gem. Due to this you'll need certain developmemnt packages on your system. On Ubuntu systems install build-essential, libxml2-dev and zlib1g-dev. On CentOS install gcc and zlib-devel.
|
@@ -0,0 +1,181 @@
|
|
1
|
+
#! /usr/bin/env ruby
|
2
|
+
#
|
3
|
+
# check-consumer-lag
|
4
|
+
#
|
5
|
+
# DESCRIPTION:
|
6
|
+
# This plugin checks the lag of your kafka's consumers.
|
7
|
+
#
|
8
|
+
# OUTPUT:
|
9
|
+
# plain-text
|
10
|
+
#
|
11
|
+
# PLATFORMS:
|
12
|
+
# Linux
|
13
|
+
#
|
14
|
+
# DEPENDENCIES:
|
15
|
+
# gem: sensu-plugin
|
16
|
+
#
|
17
|
+
# USAGE:
|
18
|
+
# ./check-consumer-lag
|
19
|
+
#
|
20
|
+
# NOTES:
|
21
|
+
#
|
22
|
+
# LICENSE:
|
23
|
+
# Olivier Bazoud
|
24
|
+
# Released under the same terms as Sensu (the MIT license); see LICENSE
|
25
|
+
# for details.
|
26
|
+
#
|
27
|
+
|
28
|
+
require 'sensu-plugin/check/cli'
|
29
|
+
|
30
|
+
class ConsumerLagCheck < Sensu::Plugin::Check::CLI
|
31
|
+
option :group,
|
32
|
+
description: 'Consumer group',
|
33
|
+
short: '-g NAME',
|
34
|
+
long: '--group NAME',
|
35
|
+
required: true
|
36
|
+
|
37
|
+
option :kafka_home,
|
38
|
+
description: 'Kafka home',
|
39
|
+
short: '-k NAME',
|
40
|
+
long: '--kafka-home NAME',
|
41
|
+
default: '/opt/kafka'
|
42
|
+
|
43
|
+
option :topic_excludes,
|
44
|
+
description: 'Excludes consumer topics',
|
45
|
+
short: '-e NAME',
|
46
|
+
long: '--topic-excludes NAME',
|
47
|
+
proc: proc { |a| a.split(',') }
|
48
|
+
|
49
|
+
option :autolist,
|
50
|
+
description: 'Auto list topics',
|
51
|
+
short: '-a VALUE',
|
52
|
+
long: '--auto-list VALUE',
|
53
|
+
boolean: true,
|
54
|
+
default: true
|
55
|
+
|
56
|
+
option :zookeeper,
|
57
|
+
description: 'ZooKeeper connect string',
|
58
|
+
short: '-z NAME',
|
59
|
+
long: '--zookeeper NAME',
|
60
|
+
default: 'localhost:2181'
|
61
|
+
|
62
|
+
option :warning_over,
|
63
|
+
description: 'Warning if metric statistics is over specified value.',
|
64
|
+
short: '-W N',
|
65
|
+
long: '--warning-over N'
|
66
|
+
|
67
|
+
option :critical_over,
|
68
|
+
description: 'Critical if metric statistics is over specified value.',
|
69
|
+
short: '-C N',
|
70
|
+
long: '--critical-over N'
|
71
|
+
|
72
|
+
option :warning_under,
|
73
|
+
description: 'Warning if metric statistics is under specified value.',
|
74
|
+
short: '-w N',
|
75
|
+
long: '--warning-under N'
|
76
|
+
|
77
|
+
option :critical_under,
|
78
|
+
description: 'Critical if metric statistics is under specified value.',
|
79
|
+
short: '-c N',
|
80
|
+
long: '--critical-under N'
|
81
|
+
|
82
|
+
# read the output of a command
|
83
|
+
# @param cmd [String] the command to read the output from
|
84
|
+
def read_lines(cmd)
|
85
|
+
IO.popen(cmd + ' 2>&1') do |child|
|
86
|
+
child.read.split("\n")
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
# create a hash from the output of each line of a command
|
91
|
+
# @param line [String]
|
92
|
+
# @param cols
|
93
|
+
def line_to_hash(line, *cols)
|
94
|
+
Hash[cols.zip(line.strip.split(/\s+/, cols.size))]
|
95
|
+
end
|
96
|
+
|
97
|
+
# run command and return a hash from the output
|
98
|
+
# @param cms [String]
|
99
|
+
def run_offset(cmd)
|
100
|
+
read_lines(cmd).drop(1).map do |line|
|
101
|
+
line_to_hash(line, :group, :topic, :pid, :offset, :logsize, :lag, :owner)
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
# run command and return a hash from the output
|
106
|
+
# @param cms [String]
|
107
|
+
def run_topics(cmd)
|
108
|
+
topics = []
|
109
|
+
read_lines(cmd).map do |line|
|
110
|
+
if !line.include?('__consumer_offsets') && !line.include?('marked for deletion')
|
111
|
+
topics.push(line)
|
112
|
+
end
|
113
|
+
end
|
114
|
+
topics
|
115
|
+
end
|
116
|
+
|
117
|
+
def run
|
118
|
+
kafka_run_class = "#{config[:kafka_home]}/bin/kafka-run-class.sh"
|
119
|
+
unknown "Can not find #{kafka_run_class}" unless File.exist?(kafka_run_class)
|
120
|
+
|
121
|
+
topics_to_read = []
|
122
|
+
if config[:autolist].to_s == 'true'
|
123
|
+
cmd_topics = "#{kafka_run_class} kafka.admin.TopicCommand --zookeeper #{config[:zookeeper]} --list"
|
124
|
+
topics_to_read = run_topics(cmd_topics)
|
125
|
+
topics_to_read.delete_if { |x| config[:topic_excludes].include?(x) } if config[:topic_excludes]
|
126
|
+
end
|
127
|
+
|
128
|
+
cmd_offset = "#{kafka_run_class} kafka.tools.ConsumerOffsetChecker --group #{config[:group]} --zookeeper #{config[:zookeeper]}"
|
129
|
+
cmd_offset += " --topic #{topics_to_read.join(',')}" unless topics_to_read.empty?
|
130
|
+
|
131
|
+
topics = run_offset(cmd_offset).group_by { |h| h[:topic] }
|
132
|
+
|
133
|
+
critical 'Could not found topics/partitions' if topics.empty?
|
134
|
+
|
135
|
+
[:offset, :logsize, :lag].each do |field|
|
136
|
+
topics.map do |k, v|
|
137
|
+
critical "Topic #{k} has partitions with #{field} < 0" unless v.select { |w| w[field].to_i < 0 }.empty?
|
138
|
+
end
|
139
|
+
end
|
140
|
+
|
141
|
+
topics.map do |k, v|
|
142
|
+
critical "Topic #{k} has partitions with no owner" unless v.select { |w| w[:owner] == 'none' }.empty?
|
143
|
+
end
|
144
|
+
|
145
|
+
lags = topics.map do |k, v|
|
146
|
+
Hash[k, v.inject(0) { |a, e| a + e[:lag].to_i }]
|
147
|
+
end
|
148
|
+
|
149
|
+
max_lag = lags.map(&:values).flatten.max
|
150
|
+
max_topics = lags.select { |a| a.key(max_lag) }.map(&:keys).flatten
|
151
|
+
|
152
|
+
min_lag = lags.map(&:values).flatten.min
|
153
|
+
min_topics = lags.select { |a| a.key(min_lag) }.map(&:keys).flatten
|
154
|
+
|
155
|
+
[:over, :under].each do |over_or_under|
|
156
|
+
[:critical, :warning].each do |severity|
|
157
|
+
threshold = config[:"#{severity}_#{over_or_under}"]
|
158
|
+
|
159
|
+
next unless threshold
|
160
|
+
case over_or_under
|
161
|
+
when :over
|
162
|
+
if max_lag > threshold.to_i
|
163
|
+
msg = "Topics `#{max_topics}` for the group `#{config[:group]}` lag: #{max_lag} (>= #{threshold})"
|
164
|
+
send severity, msg
|
165
|
+
end
|
166
|
+
when :under
|
167
|
+
if min_lag < threshold.to_i
|
168
|
+
msg = "Topics `#{min_topics}` for the group `#{config[:group]}` lag: #{min_lag} (<= #{threshold})"
|
169
|
+
send severity, msg
|
170
|
+
end
|
171
|
+
end
|
172
|
+
end
|
173
|
+
end
|
174
|
+
|
175
|
+
ok "Group `#{config[:group]}`'s lag is ok (#{min_lag}/#{max_lag})"
|
176
|
+
|
177
|
+
rescue => e
|
178
|
+
puts "Error: exception: #{e} - #{e.backtrace}"
|
179
|
+
critical
|
180
|
+
end
|
181
|
+
end
|
data/bin/check-topics.rb
ADDED
@@ -0,0 +1,92 @@
|
|
1
|
+
#! /usr/bin/env ruby
|
2
|
+
#
|
3
|
+
# check-topics
|
4
|
+
#
|
5
|
+
# DESCRIPTION:
|
6
|
+
# This plugin checks topics properties.
|
7
|
+
#
|
8
|
+
# OUTPUT:
|
9
|
+
# plain-text
|
10
|
+
#
|
11
|
+
# PLATFORMS:
|
12
|
+
# Linux
|
13
|
+
#
|
14
|
+
# DEPENDENCIES:
|
15
|
+
# gem: sensu-plugin
|
16
|
+
#
|
17
|
+
# USAGE:
|
18
|
+
# ./check-consumer-lag
|
19
|
+
#
|
20
|
+
# NOTES:
|
21
|
+
#
|
22
|
+
# LICENSE:
|
23
|
+
# Olivier Bazoud
|
24
|
+
# Released under the same terms as Sensu (the MIT license); see LICENSE
|
25
|
+
# for details.
|
26
|
+
#
|
27
|
+
|
28
|
+
require 'sensu-plugin/check/cli'
|
29
|
+
|
30
|
+
class TopicCheck < Sensu::Plugin::Check::CLI
|
31
|
+
option :kafka_home,
|
32
|
+
description: 'Kafka home',
|
33
|
+
short: '-k NAME',
|
34
|
+
long: '--kafka-home NAME',
|
35
|
+
default: '/opt/kafka'
|
36
|
+
|
37
|
+
option :zookeeper,
|
38
|
+
description: 'ZooKeeper connect string',
|
39
|
+
short: '-z NAME',
|
40
|
+
long: '--zookeeper NAME',
|
41
|
+
default: 'localhost:2181'
|
42
|
+
|
43
|
+
option :properites,
|
44
|
+
description: 'Replication factor for this topic',
|
45
|
+
short: '-R N',
|
46
|
+
long: '--replication-factor N'
|
47
|
+
|
48
|
+
# read the output of a command
|
49
|
+
# @param cmd [String] the command to read the output from
|
50
|
+
def read_lines(cmd)
|
51
|
+
IO.popen(cmd + ' 2>&1') do |child|
|
52
|
+
child.read.split("\n")
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
# create a hash from the output of each line of a command
|
57
|
+
# @param line [String]
|
58
|
+
# @param cols
|
59
|
+
def line_to_hash(line, *cols)
|
60
|
+
Hash[cols.zip(line.strip.split(/\s+/, cols.size))]
|
61
|
+
end
|
62
|
+
|
63
|
+
# run command and return a hash from the output
|
64
|
+
# @param cms [String]
|
65
|
+
def run_cmd(cmd)
|
66
|
+
read_lines(cmd).drop(1).map do |line|
|
67
|
+
line_to_hash(line, :_, :topic, :_, :partition, :_, :leader, :_, :replicas, :_, :isr)
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
def run
|
72
|
+
kafka_topics = "#{config[:kafka_home]}/bin/kafka-topics.sh"
|
73
|
+
unknown "Can not find #{kafka_topics}" unless File.exist?(kafka_topics)
|
74
|
+
|
75
|
+
cmd_details = "#{kafka_topics} --describe --zookeeper #{config[:zookeeper]} | grep -v ReplicationFactor"
|
76
|
+
results = run_cmd(cmd_details)
|
77
|
+
|
78
|
+
topics = results.group_by { |h| h[:topic] }
|
79
|
+
|
80
|
+
# {:_=>"Isr:", :topic=>"__consumer_offsets", :partition=>"49", :leader=>"172314554", :replicas=>"172314554,172314557,172314558", :isr=>"172314554,172314557,172314558"}
|
81
|
+
|
82
|
+
topics.each do |_, topic|
|
83
|
+
topic.inject(0) { |a, e| [a, e[:replicas].length].max }
|
84
|
+
end
|
85
|
+
ok
|
86
|
+
|
87
|
+
rescue => e
|
88
|
+
puts "Error: #{e}"
|
89
|
+
puts "Error: #{e.backtrace}"
|
90
|
+
critical "Error: #{e}"
|
91
|
+
end
|
92
|
+
end
|
@@ -0,0 +1,112 @@
|
|
1
|
+
#! /usr/bin/env ruby
|
2
|
+
#
|
3
|
+
# metrics-consumer
|
4
|
+
#
|
5
|
+
# DESCRIPTION:
|
6
|
+
# Gets consumers's offset, logsize and lag metrics from Kafka/Zookeeper and puts them in Graphite for longer term storage
|
7
|
+
#
|
8
|
+
# OUTPUT:
|
9
|
+
# metric-data
|
10
|
+
#
|
11
|
+
# PLATFORMS:
|
12
|
+
# Linux
|
13
|
+
#
|
14
|
+
# DEPENDENCIES:
|
15
|
+
# gem: sensu-plugin
|
16
|
+
#
|
17
|
+
# USAGE:
|
18
|
+
# #YELLOW
|
19
|
+
#
|
20
|
+
#
|
21
|
+
# LICENSE:
|
22
|
+
# Copyright 2015 Olivier Bazoud
|
23
|
+
# Released under the same terms as Sensu (the MIT license); see LICENSE
|
24
|
+
# for details.
|
25
|
+
#
|
26
|
+
|
27
|
+
require 'sensu-plugin/metric/cli'
|
28
|
+
|
29
|
+
class ConsumerOffsetMetrics < Sensu::Plugin::Metric::CLI::Graphite
|
30
|
+
option :scheme,
|
31
|
+
description: 'Metric naming scheme, text to prepend to metric',
|
32
|
+
short: '-s SCHEME',
|
33
|
+
long: '--scheme SCHEME',
|
34
|
+
default: 'sensu.kafka.consumers'
|
35
|
+
|
36
|
+
option :group,
|
37
|
+
description: 'Consumer group',
|
38
|
+
short: '-g NAME',
|
39
|
+
long: '--group NAME',
|
40
|
+
required: true
|
41
|
+
|
42
|
+
option :kafka_home,
|
43
|
+
description: 'Kafka home',
|
44
|
+
short: '-k NAME',
|
45
|
+
long: '--kafka-home NAME',
|
46
|
+
default: '/opt/kafka'
|
47
|
+
|
48
|
+
option :topic,
|
49
|
+
description: 'Comma-separated list of consumer topics',
|
50
|
+
short: '-t NAME',
|
51
|
+
long: '--topic NAME'
|
52
|
+
|
53
|
+
option :topic_excludes,
|
54
|
+
description: 'Excludes consumer topics',
|
55
|
+
short: '-e NAME',
|
56
|
+
long: '--topic-excludes NAME',
|
57
|
+
proc: proc { |a| a.split(',') }
|
58
|
+
|
59
|
+
option :zookeeper,
|
60
|
+
description: 'ZooKeeper connect string',
|
61
|
+
short: '-z NAME',
|
62
|
+
long: '--zookeeper NAME',
|
63
|
+
default: 'localhost:2181'
|
64
|
+
|
65
|
+
# read the output of a command
|
66
|
+
# @param cmd [String] the command to read the output from
|
67
|
+
def read_lines(cmd)
|
68
|
+
IO.popen(cmd + ' 2>&1') do |child|
|
69
|
+
child.read.split("\n")
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
# create a hash from the output of each line of a command
|
74
|
+
# @param line [String]
|
75
|
+
# @param cols
|
76
|
+
def line_to_hash(line, *cols)
|
77
|
+
Hash[cols.zip(line.strip.split(/\s+/, cols.size))]
|
78
|
+
end
|
79
|
+
|
80
|
+
# run command and return a hash from the output
|
81
|
+
# @param cms [String]
|
82
|
+
def run_cmd(cmd)
|
83
|
+
read_lines(cmd).drop(1).map do |line|
|
84
|
+
line_to_hash(line, :group, :topic, :pid, :offset, :logsize, :lag, :owner)
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
def run
|
89
|
+
begin
|
90
|
+
kafka_run_class = "#{config[:kafka_home]}/bin/kafka-run-class.sh"
|
91
|
+
unknown "Can not find #{kafka_run_class}" unless File.exist?(kafka_run_class)
|
92
|
+
|
93
|
+
cmd = "#{kafka_run_class} kafka.tools.ConsumerOffsetChecker --group #{config[:group]} --zookeeper #{config[:zookeeper]}"
|
94
|
+
cmd += " --topic #{config[:topic]}" if config[:topic]
|
95
|
+
|
96
|
+
results = run_cmd(cmd)
|
97
|
+
|
98
|
+
[:offset, :logsize, :lag].each do |field|
|
99
|
+
sum_by_group = results.group_by { |h| h[:topic] }.map do |k, v|
|
100
|
+
Hash[k, v.inject(0) { |a, e| a + e[field].to_i }]
|
101
|
+
end
|
102
|
+
sum_by_group.delete_if { |x| config[:topic_excludes].include?(x.keys[0]) } if config[:topic_excludes]
|
103
|
+
sum_by_group.each do |x|
|
104
|
+
output "#{config[:scheme]}.#{config[:group]}.#{x.keys[0]}.#{field}", x.values[0]
|
105
|
+
end
|
106
|
+
end
|
107
|
+
rescue => e
|
108
|
+
critical "Error: exception: #{e}"
|
109
|
+
end
|
110
|
+
ok
|
111
|
+
end
|
112
|
+
end
|
metadata
ADDED
@@ -0,0 +1,201 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: sensu-plugins-kafka
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Sensu-Plugins and contributors
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain:
|
11
|
+
- certs/sensu-plugins.pem
|
12
|
+
date: 2017-02-04 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: sensu-plugin
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
requirements:
|
18
|
+
- - "~>"
|
19
|
+
- !ruby/object:Gem::Version
|
20
|
+
version: '1.3'
|
21
|
+
type: :runtime
|
22
|
+
prerelease: false
|
23
|
+
version_requirements: !ruby/object:Gem::Requirement
|
24
|
+
requirements:
|
25
|
+
- - "~>"
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
version: '1.3'
|
28
|
+
- !ruby/object:Gem::Dependency
|
29
|
+
name: codeclimate-test-reporter
|
30
|
+
requirement: !ruby/object:Gem::Requirement
|
31
|
+
requirements:
|
32
|
+
- - "~>"
|
33
|
+
- !ruby/object:Gem::Version
|
34
|
+
version: '0.4'
|
35
|
+
type: :development
|
36
|
+
prerelease: false
|
37
|
+
version_requirements: !ruby/object:Gem::Requirement
|
38
|
+
requirements:
|
39
|
+
- - "~>"
|
40
|
+
- !ruby/object:Gem::Version
|
41
|
+
version: '0.4'
|
42
|
+
- !ruby/object:Gem::Dependency
|
43
|
+
name: rubocop
|
44
|
+
requirement: !ruby/object:Gem::Requirement
|
45
|
+
requirements:
|
46
|
+
- - '='
|
47
|
+
- !ruby/object:Gem::Version
|
48
|
+
version: 0.32.1
|
49
|
+
type: :development
|
50
|
+
prerelease: false
|
51
|
+
version_requirements: !ruby/object:Gem::Requirement
|
52
|
+
requirements:
|
53
|
+
- - '='
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
version: 0.32.1
|
56
|
+
- !ruby/object:Gem::Dependency
|
57
|
+
name: rspec
|
58
|
+
requirement: !ruby/object:Gem::Requirement
|
59
|
+
requirements:
|
60
|
+
- - "~>"
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: '3.1'
|
63
|
+
type: :development
|
64
|
+
prerelease: false
|
65
|
+
version_requirements: !ruby/object:Gem::Requirement
|
66
|
+
requirements:
|
67
|
+
- - "~>"
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '3.1'
|
70
|
+
- !ruby/object:Gem::Dependency
|
71
|
+
name: bundler
|
72
|
+
requirement: !ruby/object:Gem::Requirement
|
73
|
+
requirements:
|
74
|
+
- - "~>"
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: '1.7'
|
77
|
+
type: :development
|
78
|
+
prerelease: false
|
79
|
+
version_requirements: !ruby/object:Gem::Requirement
|
80
|
+
requirements:
|
81
|
+
- - "~>"
|
82
|
+
- !ruby/object:Gem::Version
|
83
|
+
version: '1.7'
|
84
|
+
- !ruby/object:Gem::Dependency
|
85
|
+
name: rake
|
86
|
+
requirement: !ruby/object:Gem::Requirement
|
87
|
+
requirements:
|
88
|
+
- - "~>"
|
89
|
+
- !ruby/object:Gem::Version
|
90
|
+
version: '10.0'
|
91
|
+
type: :development
|
92
|
+
prerelease: false
|
93
|
+
version_requirements: !ruby/object:Gem::Requirement
|
94
|
+
requirements:
|
95
|
+
- - "~>"
|
96
|
+
- !ruby/object:Gem::Version
|
97
|
+
version: '10.0'
|
98
|
+
- !ruby/object:Gem::Dependency
|
99
|
+
name: github-markup
|
100
|
+
requirement: !ruby/object:Gem::Requirement
|
101
|
+
requirements:
|
102
|
+
- - "~>"
|
103
|
+
- !ruby/object:Gem::Version
|
104
|
+
version: '1.3'
|
105
|
+
type: :development
|
106
|
+
prerelease: false
|
107
|
+
version_requirements: !ruby/object:Gem::Requirement
|
108
|
+
requirements:
|
109
|
+
- - "~>"
|
110
|
+
- !ruby/object:Gem::Version
|
111
|
+
version: '1.3'
|
112
|
+
- !ruby/object:Gem::Dependency
|
113
|
+
name: redcarpet
|
114
|
+
requirement: !ruby/object:Gem::Requirement
|
115
|
+
requirements:
|
116
|
+
- - "~>"
|
117
|
+
- !ruby/object:Gem::Version
|
118
|
+
version: '3.2'
|
119
|
+
type: :development
|
120
|
+
prerelease: false
|
121
|
+
version_requirements: !ruby/object:Gem::Requirement
|
122
|
+
requirements:
|
123
|
+
- - "~>"
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
version: '3.2'
|
126
|
+
- !ruby/object:Gem::Dependency
|
127
|
+
name: yard
|
128
|
+
requirement: !ruby/object:Gem::Requirement
|
129
|
+
requirements:
|
130
|
+
- - "~>"
|
131
|
+
- !ruby/object:Gem::Version
|
132
|
+
version: '0.8'
|
133
|
+
type: :development
|
134
|
+
prerelease: false
|
135
|
+
version_requirements: !ruby/object:Gem::Requirement
|
136
|
+
requirements:
|
137
|
+
- - "~>"
|
138
|
+
- !ruby/object:Gem::Version
|
139
|
+
version: '0.8'
|
140
|
+
- !ruby/object:Gem::Dependency
|
141
|
+
name: pry
|
142
|
+
requirement: !ruby/object:Gem::Requirement
|
143
|
+
requirements:
|
144
|
+
- - "~>"
|
145
|
+
- !ruby/object:Gem::Version
|
146
|
+
version: '0.10'
|
147
|
+
type: :development
|
148
|
+
prerelease: false
|
149
|
+
version_requirements: !ruby/object:Gem::Requirement
|
150
|
+
requirements:
|
151
|
+
- - "~>"
|
152
|
+
- !ruby/object:Gem::Version
|
153
|
+
version: '0.10'
|
154
|
+
description: Sensu plugins for Kafka
|
155
|
+
email: "<sensu-users@googlegroups.com>"
|
156
|
+
executables:
|
157
|
+
- metrics-consumer.rb
|
158
|
+
- check-consumer-lag.rb
|
159
|
+
- check-topics.rb
|
160
|
+
extensions: []
|
161
|
+
extra_rdoc_files: []
|
162
|
+
files:
|
163
|
+
- CHANGELOG.md
|
164
|
+
- LICENSE
|
165
|
+
- README.md
|
166
|
+
- bin/check-consumer-lag.rb
|
167
|
+
- bin/check-topics.rb
|
168
|
+
- bin/metrics-consumer.rb
|
169
|
+
- lib/sensu-plugins-kafka.rb
|
170
|
+
- lib/sensu-plugins-kafka/version.rb
|
171
|
+
homepage: https://github.com/sensu-plugins/sensu-plugins-kafka
|
172
|
+
licenses:
|
173
|
+
- MIT
|
174
|
+
metadata:
|
175
|
+
maintainer: sensu-plugin
|
176
|
+
development_status: active
|
177
|
+
production_status: unstable - testing recommended
|
178
|
+
release_draft: 'false'
|
179
|
+
release_prerelease: 'false'
|
180
|
+
post_install_message: You can use the embedded Ruby by setting EMBEDDED_RUBY=true
|
181
|
+
in /etc/default/sensu
|
182
|
+
rdoc_options: []
|
183
|
+
require_paths:
|
184
|
+
- lib
|
185
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
186
|
+
requirements:
|
187
|
+
- - ">="
|
188
|
+
- !ruby/object:Gem::Version
|
189
|
+
version: 2.1.0
|
190
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
191
|
+
requirements:
|
192
|
+
- - ">="
|
193
|
+
- !ruby/object:Gem::Version
|
194
|
+
version: '0'
|
195
|
+
requirements: []
|
196
|
+
rubyforge_project:
|
197
|
+
rubygems_version: 2.4.8
|
198
|
+
signing_key:
|
199
|
+
specification_version: 4
|
200
|
+
summary: Sensu plugins for Kafka
|
201
|
+
test_files: []
|