riemann-babbler 0.8.8 → 0.8.9
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.
- data/.gitignore +1 -0
- data/Gemfile +11 -11
- data/README.md +2 -2
- data/bin/riemann-babbler +1 -1
- data/lib/deep_merge.rb +3 -3
- data/lib/riemann/babbler/plugin.rb +12 -12
- data/lib/riemann/babbler/plugin_helpers.rb +5 -17
- data/lib/riemann/babbler/plugins/cpu.rb +1 -1
- data/lib/riemann/babbler/plugins/disk.rb +3 -10
- data/lib/riemann/babbler/plugins/la.rb +1 -1
- data/lib/riemann/babbler/plugins/memory.rb +8 -8
- data/lib/riemann/babbler/plugins/net.rb +2 -2
- data/lib/riemann/version.rb +1 -1
- data/lib/start_helpers.rb +9 -9
- data/riemann-babbler.gemspec +5 -5
- metadata +5 -5
data/.gitignore
CHANGED
data/Gemfile
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
source :rubygems
|
2
2
|
|
3
|
-
gem
|
4
|
-
gem
|
5
|
-
gem
|
6
|
-
gem
|
7
|
-
gem
|
8
|
-
gem
|
9
|
-
gem
|
3
|
+
gem 'riemann-client'
|
4
|
+
gem 'configatron'
|
5
|
+
gem 'logger'
|
6
|
+
gem 'trollop'
|
7
|
+
gem 'sys-filesystem'
|
8
|
+
gem 'rest-client'
|
9
|
+
gem 'sequel'
|
10
10
|
|
11
|
-
gem
|
12
|
-
gem
|
11
|
+
gem 'rspec'
|
12
|
+
gem 'rake'
|
13
13
|
|
14
|
-
gem
|
15
|
-
gem
|
14
|
+
gem 'pry'
|
15
|
+
gem 'awesome_print'
|
data/README.md
CHANGED
@@ -17,7 +17,7 @@ where [options] are:
|
|
17
17
|
```
|
18
18
|
|
19
19
|
### Config
|
20
|
-
|
20
|
+
Babbler load main config and merge custom plugins
|
21
21
|
```yaml
|
22
22
|
riemann:
|
23
23
|
host: riemann.host
|
@@ -26,7 +26,7 @@ riemann:
|
|
26
26
|
- prod
|
27
27
|
- web
|
28
28
|
suffix: ".testing"
|
29
|
-
preffix: "
|
29
|
+
preffix: "prefix"
|
30
30
|
|
31
31
|
plugins:
|
32
32
|
dirs:
|
data/bin/riemann-babbler
CHANGED
data/lib/deep_merge.rb
CHANGED
@@ -2,12 +2,12 @@
|
|
2
2
|
class Hash
|
3
3
|
|
4
4
|
def deep_merge!(specialized_hash)
|
5
|
-
|
5
|
+
internal_deep_merge!(self, specialized_hash)
|
6
6
|
end
|
7
7
|
|
8
8
|
|
9
9
|
def deep_merge(specialized_hash)
|
10
|
-
|
10
|
+
internal_deep_merge!(Hash.new.replace(self), specialized_hash)
|
11
11
|
end
|
12
12
|
|
13
13
|
|
@@ -43,6 +43,6 @@ class Hash
|
|
43
43
|
|
44
44
|
#puts "deep merge done."
|
45
45
|
|
46
|
-
|
46
|
+
source_hash
|
47
47
|
end
|
48
48
|
end
|
@@ -37,7 +37,7 @@ module Riemann
|
|
37
37
|
|
38
38
|
# Доступ к конфигу определенного плагина
|
39
39
|
def plugin
|
40
|
-
plugin_name = self.class.name.split(
|
40
|
+
plugin_name = self.class.name.split('::').last.gsub( /(\p{Lower})(\p{Upper})/, "\\1_\\2" ).downcase
|
41
41
|
options.plugins.send plugin_name
|
42
42
|
end
|
43
43
|
|
@@ -78,7 +78,7 @@ module Riemann
|
|
78
78
|
if options.riemann.installation.nil?
|
79
79
|
hostname += options.riemann.suffix unless options.riemann.suffix.nil?
|
80
80
|
else
|
81
|
-
hostname += (
|
81
|
+
hostname += ( '.' + options.riemann.installation )
|
82
82
|
end
|
83
83
|
hostname = options.riemann.prefix + hostname unless options.riemann.prefix.nil?
|
84
84
|
hostname
|
@@ -102,7 +102,7 @@ module Riemann
|
|
102
102
|
|
103
103
|
def run
|
104
104
|
# выйти если run_plugin не равен true
|
105
|
-
return 0 unless run_plugin
|
105
|
+
return 0 unless run_plugin
|
106
106
|
t0 = Time.now
|
107
107
|
loop do
|
108
108
|
begin
|
@@ -118,17 +118,17 @@ module Riemann
|
|
118
118
|
# хелпер, описание статуса
|
119
119
|
def state(my_state)
|
120
120
|
return 'critical' if my_state.nil?
|
121
|
-
|
121
|
+
if plugin.states.warning.nil?
|
122
|
+
my_state >= plugin.states.critical ? 'critical' : 'ok'
|
123
|
+
else
|
122
124
|
case
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
125
|
+
when my_state.between?(plugin.states.warning, plugin.states.critical)
|
126
|
+
'warning'
|
127
|
+
when my_state > plugin.states.warning
|
128
|
+
'critical'
|
129
|
+
else
|
130
|
+
'ok'
|
129
131
|
end
|
130
|
-
else
|
131
|
-
my_state >= plugin.states.critical ? 'critical' : 'ok'
|
132
132
|
end
|
133
133
|
end
|
134
134
|
|
@@ -3,7 +3,7 @@
|
|
3
3
|
module Riemann
|
4
4
|
class Babbler
|
5
5
|
|
6
|
-
def helper_error(msg =
|
6
|
+
def helper_error(msg = 'Unknown helper error')
|
7
7
|
report({
|
8
8
|
:service => plugin.service,
|
9
9
|
:state => 'critical',
|
@@ -20,10 +20,10 @@ module Riemann
|
|
20
20
|
timeout_shell = ( plugin.interval * 2 ).to_f/3
|
21
21
|
Timeout::timeout(timeout_shell) {
|
22
22
|
Open3.popen3(*cmd) do |stdin, stdout, stderr, wait_thread|
|
23
|
-
|
24
|
-
|
23
|
+
|
24
|
+
|
25
25
|
[stdin, stdout, stderr].each{|stream| stream.send('close')}
|
26
|
-
|
26
|
+
|
27
27
|
end
|
28
28
|
}
|
29
29
|
rescue => e
|
@@ -36,19 +36,7 @@ module Riemann
|
|
36
36
|
return out.chomp
|
37
37
|
else
|
38
38
|
# статус 0, вывода stdout нет
|
39
|
-
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
# db get
|
44
|
-
# http://sequel.rubyforge.org/rdoc/files/doc/opening_databases_rdoc.html
|
45
|
-
#
|
46
|
-
def sql(connection_string, query)
|
47
|
-
begin
|
48
|
-
db = Sequel.connect connection_string
|
49
|
-
db.fetch(query)
|
50
|
-
rescue => e
|
51
|
-
helper_error "#{e.class} #{e}\n#{e.backtrace.join "\n"}"
|
39
|
+
''
|
52
40
|
end
|
53
41
|
end
|
54
42
|
|
@@ -18,7 +18,7 @@ class Riemann::Babbler::Cpu < Riemann::Babbler
|
|
18
18
|
# проверяем есть строчка /cpu\d+/ или /cpu / и сграбливаем это в переменную
|
19
19
|
cpu_number = cpu_line.scan(/cpu(\d+|\s)\s+/)
|
20
20
|
next if cpu_number.empty?
|
21
|
-
cpu_number = cpu_number[0][0] ==
|
21
|
+
cpu_number = cpu_number[0][0] == ' ' ? '_total' : cpu_number[0][0]
|
22
22
|
|
23
23
|
# работаем со строкой
|
24
24
|
cpu_line[/cpu(\d+|\s)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)/]
|
@@ -5,14 +5,7 @@ class Riemann::Babbler::Disk < Riemann::Babbler
|
|
5
5
|
require 'sys/filesystem'
|
6
6
|
include Sys
|
7
7
|
|
8
|
-
NOT_MONITORING_FS =
|
9
|
-
'sysfs',
|
10
|
-
'nfs',
|
11
|
-
'devpts',
|
12
|
-
'squashfs',
|
13
|
-
'proc',
|
14
|
-
'devtmpfs'
|
15
|
-
]
|
8
|
+
NOT_MONITORING_FS = %w(sysfs nfs devpts squashfs proc devtmpfs)
|
16
9
|
|
17
10
|
def collect
|
18
11
|
# собираем только необходимые для мониторинга маунт-поинты
|
@@ -26,8 +19,8 @@ class Riemann::Babbler::Disk < Riemann::Babbler
|
|
26
19
|
disk = Array.new
|
27
20
|
monit_points.each do |point|
|
28
21
|
point_stat = Filesystem.stat point
|
29
|
-
human_point = point ==
|
30
|
-
human_point = human_point.gsub(/^\//,
|
22
|
+
human_point = point == '/' ? '/root' : point
|
23
|
+
human_point = human_point.gsub(/^\//, '').gsub(/\//, '_')
|
31
24
|
disk << { :service => plugin.service + " #{human_point} % block", :description => "Disk usage #{point}, %", :metric => (1- point_stat.blocks_available.to_f/point_stat.blocks).round(2) * 100 }
|
32
25
|
disk << { :service => plugin.service + " #{human_point} % inode", :description => "Disk usage #{point}, inodes %", :metric => (1 - point_stat.files_available.to_f/point_stat.files).round(2) * 100 }
|
33
26
|
disk << { :service => plugin.service + " #{human_point} abs free", :description => "Disk free #{point}, B", :metric => point_stat.blocks_free * point_stat.block_size, :state => 'ok'}
|
@@ -3,7 +3,7 @@
|
|
3
3
|
class Riemann::Babbler::La < Riemann::Babbler
|
4
4
|
|
5
5
|
def collect
|
6
|
-
{ :service => plugin.service +
|
6
|
+
{ :service => plugin.service + ' la_1', :description => 'LA averaged over 1 minute', :metric => File.read('/proc/loadavg').split(/\s+/)[2].to_f }
|
7
7
|
end
|
8
8
|
|
9
9
|
end
|
@@ -20,14 +20,14 @@ class Riemann::Babbler::Memory < Riemann::Babbler
|
|
20
20
|
|
21
21
|
desc = "#{shell('ps -eo pmem,pid,cmd --sort -pmem | head -10').chomp}"
|
22
22
|
[
|
23
|
-
{ :service => plugin.service +
|
24
|
-
{ :service => plugin.service +
|
25
|
-
{ :service => plugin.service +
|
26
|
-
{ :service => plugin.service +
|
27
|
-
{ :service => plugin.service +
|
28
|
-
{ :service => plugin.service +
|
29
|
-
{ :service => plugin.service +
|
30
|
-
{ :service => plugin.service +
|
23
|
+
{ :service => plugin.service + ' % free', :description => 'Memory usage, %', :metric => fraction.round(2) * 100 },
|
24
|
+
{ :service => plugin.service + ' % swap', :description => 'Swap usage, %', :metric => swap_fraction.round(2) * 100 },
|
25
|
+
{ :service => plugin.service + ' abs free', :description => "Memory free (kB)\n\n #{desc}", :metric => free, :state => 'ok' },
|
26
|
+
{ :service => plugin.service + ' abs total', :description => "Memory total (kB)\n\n #{desc}", :metric => total, :state => 'ok' },
|
27
|
+
{ :service => plugin.service + ' abs cached', :description => "Memory usage, cached (kB)\n\n #{desc}", :metric => cached, :state => 'ok' },
|
28
|
+
{ :service => plugin.service + ' abs buffers', :description => "Memory usage, buffers (kB)\n\n #{desc}", :metric => buffers, :state => 'ok' },
|
29
|
+
{ :service => plugin.service + ' abs used', :description => "Memory usage, used (kB)\n\n #{desc}", :metric => used , :state => 'ok' },
|
30
|
+
{ :service => plugin.service + ' abs free_bc', :description => "Memory usage with cache и buffers (kB)\n\n #{desc}", :metric => free_bc , :state => 'ok' }
|
31
31
|
]
|
32
32
|
end
|
33
33
|
|
@@ -20,8 +20,8 @@ class Riemann::Babbler::Net < Riemann::Babbler
|
|
20
20
|
f = File.read('/proc/net/dev')
|
21
21
|
status = Array.new
|
22
22
|
f.split("\n").each do |line|
|
23
|
-
iface = line.split(
|
24
|
-
iface.gsub!(/\./,
|
23
|
+
iface = line.split(':')[0].strip
|
24
|
+
iface.gsub!(/\./, '_')
|
25
25
|
next unless line =~ /(\w*)\:\s*([\s\d]+)\s*/
|
26
26
|
WORDS.map do |service|
|
27
27
|
"#{plugin.service} #{iface} #{service}"
|
data/lib/riemann/version.rb
CHANGED
data/lib/start_helpers.rb
CHANGED
@@ -3,15 +3,15 @@ require File.expand_path('../riemann/babbler/plugin', __FILE__)
|
|
3
3
|
|
4
4
|
def set_logger_lvl(logger, configatron)
|
5
5
|
case configatron.logger.level
|
6
|
-
when
|
6
|
+
when 'INFO'
|
7
7
|
logger.level = Logger::INFO
|
8
|
-
when
|
8
|
+
when 'WARN'
|
9
9
|
logger.level = Logger::WARN
|
10
|
-
when
|
10
|
+
when 'ERROR'
|
11
11
|
logger.level = Logger::ERROR
|
12
|
-
when
|
12
|
+
when 'FATAL'
|
13
13
|
logger.level = Logger::FATAL
|
14
|
-
when
|
14
|
+
when 'UNKNOWN'
|
15
15
|
logger.level = Logger::UNKNOWN
|
16
16
|
else
|
17
17
|
logger.level = Logger::DEBUG
|
@@ -37,14 +37,14 @@ end
|
|
37
37
|
def load_plugins(configatron)
|
38
38
|
plugins = Array.new
|
39
39
|
default_plugins_dir = File.expand_path('../riemann/babbler/plugins/', __FILE__)
|
40
|
-
Dir.glob( default_plugins_dir +
|
40
|
+
Dir.glob( default_plugins_dir + '/*.rb') do |file|
|
41
41
|
plugins << file
|
42
42
|
end
|
43
43
|
|
44
44
|
unless configatron.plugins.dirs.nil?
|
45
45
|
configatron.plugins.dirs.each do |dir|
|
46
46
|
next unless Dir.exist? dir
|
47
|
-
Dir.glob( dir +
|
47
|
+
Dir.glob( dir + '/*.rb') do |file|
|
48
48
|
plugins << file
|
49
49
|
end
|
50
50
|
end
|
@@ -87,7 +87,7 @@ end
|
|
87
87
|
def start_plugins(registered_plugins, riemann, logger, configatron)
|
88
88
|
run_only = Array.new
|
89
89
|
configatron.plugins.to_hash.keys.each { |key| run_only << key.to_s }
|
90
|
-
registered_plugins.delete_if {|plugin| ! run_only.include? plugin.to_s.split(
|
90
|
+
registered_plugins.delete_if {|plugin| ! run_only.include? plugin.to_s.split('::').last.downcase }
|
91
91
|
|
92
92
|
plugin_threads = registered_plugins.map do |plugin|
|
93
93
|
Thread.new {
|
@@ -96,7 +96,7 @@ def start_plugins(registered_plugins, riemann, logger, configatron)
|
|
96
96
|
end
|
97
97
|
|
98
98
|
# plugin control
|
99
|
-
Signal.trap
|
99
|
+
Signal.trap 'TERM' do
|
100
100
|
plugin_threads.each( &:kill )
|
101
101
|
end
|
102
102
|
|
data/riemann-babbler.gemspec
CHANGED
@@ -2,13 +2,13 @@
|
|
2
2
|
require File.expand_path('../lib/riemann/version', __FILE__)
|
3
3
|
|
4
4
|
Gem::Specification.new do |s|
|
5
|
-
s.name =
|
5
|
+
s.name = 'riemann-babbler'
|
6
6
|
s.version = Riemann::Babbler::VERSION
|
7
|
-
s.authors = [
|
7
|
+
s.authors = ['Vasiliev D.V.']
|
8
8
|
s.email = %w(vadv.mkn@gmail.com)
|
9
|
-
s.homepage =
|
10
|
-
s.summary = %q{Riemann health
|
11
|
-
s.description = %q{Some plugins
|
9
|
+
s.homepage = 'https://github.com/vadv/riemann-babbler'
|
10
|
+
s.summary = %q{Riemann health checker.}
|
11
|
+
s.description = %q{Some plugins manager for riemann.}
|
12
12
|
s.licenses = %w(MIT)
|
13
13
|
|
14
14
|
s.add_dependency('riemann-client')
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: riemann-babbler
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.8.
|
4
|
+
version: 0.8.9
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-
|
12
|
+
date: 2013-05-01 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: riemann-client
|
@@ -123,7 +123,7 @@ dependencies:
|
|
123
123
|
- - ! '>='
|
124
124
|
- !ruby/object:Gem::Version
|
125
125
|
version: '0'
|
126
|
-
description: Some plugins
|
126
|
+
description: Some plugins manager for riemann.
|
127
127
|
email:
|
128
128
|
- vadv.mkn@gmail.com
|
129
129
|
executables:
|
@@ -165,7 +165,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
165
165
|
version: '0'
|
166
166
|
segments:
|
167
167
|
- 0
|
168
|
-
hash: -
|
168
|
+
hash: -3301891544373648721
|
169
169
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
170
170
|
none: false
|
171
171
|
requirements:
|
@@ -177,5 +177,5 @@ rubyforge_project:
|
|
177
177
|
rubygems_version: 1.8.25
|
178
178
|
signing_key:
|
179
179
|
specification_version: 3
|
180
|
-
summary: Riemann health
|
180
|
+
summary: Riemann health checker.
|
181
181
|
test_files: []
|