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 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
@@ -0,0 +1,8 @@
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
7
+ ### Added
8
+ - initial release
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
@@ -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
@@ -0,0 +1,2 @@
1
+
2
+ require 'sensu-plugins-kafka/version'
@@ -0,0 +1,13 @@
1
+ require 'json'
2
+
3
+ # encoding: utf-8
4
+ module SensuPluginsKafka
5
+ # This defines the version of the gem
6
+ module Version
7
+ MAJOR = 0
8
+ MINOR = 1
9
+ PATCH = 0
10
+
11
+ VER_STRING = [MAJOR, MINOR, PATCH].compact.join('.')
12
+ end
13
+ 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: []