kurchatov 0.0.5.pre5 → 0.0.5
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 +1 -0
- data/README.md +6 -7
- data/Rakefile +1 -1
- data/Vagrantfile +5 -6
- data/bin/kurchatov +2 -2
- data/examples/check_file_contains.rb +4 -4
- data/examples/count_proc.rb +5 -5
- data/examples/cpu.rb +5 -5
- data/examples/disk.rb +3 -3
- data/examples/disk_stat.rb +6 -6
- data/examples/dns_check.rb +2 -2
- data/examples/exim.rb +1 -1
- data/examples/file_age.rb +5 -5
- data/examples/find_files.rb +1 -1
- data/examples/http.rb +3 -3
- data/examples/iptables.rb +3 -3
- data/examples/la.rb +12 -12
- data/examples/mdadm.rb +1 -1
- data/examples/memory.rb +8 -8
- data/examples/net.rb +6 -6
- data/examples/net_stat.rb +4 -4
- data/examples/nfs.rb +2 -2
- data/examples/nginx.rb +1 -1
- data/examples/nginx_500.rb +8 -8
- data/examples/ntp.rb +5 -5
- data/examples/openfiles.rb +2 -2
- data/examples/pgsql.rb +3 -3
- data/examples/ping_icmp.rb +4 -4
- data/examples/ping_tcp.rb +4 -4
- data/examples/proc_mem.rb +6 -6
- data/examples/rabbitmq.rb +4 -4
- data/examples/runit.rb +1 -1
- data/examples/sidekiq.rb +12 -12
- data/examples/sidekiq_queue_state.rb +3 -3
- data/examples/status_file.rb +4 -4
- data/examples/tw_cli.rb +4 -4
- data/examples/uptime.rb +4 -4
- data/kurchatov.gemspec +19 -18
- data/lib/kurchatov/application.rb +73 -74
- data/lib/kurchatov/mashie.rb +32 -27
- data/lib/kurchatov/mixin/command.rb +0 -5
- data/lib/kurchatov/mixin/event.rb +7 -5
- data/lib/kurchatov/mixin/http.rb +4 -4
- data/lib/kurchatov/mixin/init.rb +5 -5
- data/lib/kurchatov/mixin/ohai.rb +11 -3
- data/lib/kurchatov/mixin/queue.rb +7 -4
- data/lib/kurchatov/plugin/config.rb +8 -7
- data/lib/kurchatov/plugin/dsl.rb +3 -1
- data/lib/kurchatov/plugin/riemann.rb +7 -8
- data/lib/kurchatov/responders/http.rb +6 -6
- data/lib/kurchatov/responders/init.rb +3 -3
- data/lib/kurchatov/responders/riemann.rb +2 -4
- data/lib/kurchatov/responders/udp.rb +2 -3
- data/lib/kurchatov/riemann/client.rb +12 -12
- data/lib/kurchatov/riemann/event.rb +1 -1
- data/lib/kurchatov/riemann/message.rb +2 -2
- data/lib/kurchatov/version.rb +1 -1
- data/lib/kurchatov.rb +4 -2
- data/lib/ohai/plugins/darwin/cpu.rb +3 -3
- data/lib/ohai/plugins/darwin/hostname.rb +3 -3
- data/lib/ohai/plugins/darwin/platform.rb +12 -12
- data/lib/ohai/plugins/hostname.rb +2 -2
- data/lib/ohai/plugins/linux/cpu.rb +29 -29
- data/lib/ohai/plugins/linux/hostname.rb +4 -4
- data/lib/ohai/plugins/linux/platform.rb +40 -40
- data/lib/ohai/plugins/linux/virtualization.rb +51 -51
- data/lib/ohai/plugins/os.rb +26 -26
- data/lib/ohai/plugins/platform.rb +4 -4
- data/lib/ohai/plugins/virtualization.rb +17 -17
- data/lib/ohai/plugins/windows/cpu.rb +11 -11
- data/lib/ohai/plugins/windows/platform.rb +1 -1
- data/tests/run.sh +4 -4
- data/tests/server.rb +2 -2
- metadata +18 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d56d67f5c0e53abde4637ffc9c0ea9e73d9cb5b9
|
4
|
+
data.tar.gz: 76270270572fb0917640a25fbbd325c5176266c3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 77bd8989916268732da475ebc707649c7cd22b77f1803da1b834ad07a2013984a11e95b4989b77e8669067096c6b90528127d2561ff1bddb1a0fcee66827562f
|
7
|
+
data.tar.gz: 30796cf0f8942e999bfdb59ffd7cc7d8bd55e814078f2730b9dd3a620509dc253a2e096b87ceb4be9bc02e402a0850094ddee78030b9f83a8f82a802fac28fff
|
data/CHANGELOG
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
* Version 0.0.5: Windows support
|
data/README.md
CHANGED
@@ -1,4 +1,6 @@
|
|
1
|
+
[](http://badge.fury.io/rb/kurchatov)
|
1
2
|
[](https://travis-ci.org/vadv/kurchatov)
|
3
|
+
[](https://codeclimate.com/github/vadv/kurchatov)
|
2
4
|
|
3
5
|
# Kurchatov
|
4
6
|
|
@@ -64,7 +66,7 @@ end
|
|
64
66
|
|
65
67
|
Больше примеров вы найдете [тут](https://github.com/vadv/kurchatov/tree/master/examples).
|
66
68
|
|
67
|
-
##
|
69
|
+
## Ohai
|
68
70
|
|
69
71
|
И в африке ohai. Минимальный пример:
|
70
72
|
```ruby
|
@@ -80,7 +82,7 @@ postgres[:version] = stdout.strip
|
|
80
82
|
Это обычный yml-файл с настройками плагинов, eго удобно генерить chef'ом :)
|
81
83
|
```yaml
|
82
84
|
plugin name:
|
83
|
-
|
85
|
+
settings name:
|
84
86
|
- 'bla-bla'
|
85
87
|
```
|
86
88
|
|
@@ -103,9 +105,6 @@ robots txt watcher: # новый плагин name == 'robots txt watcher'
|
|
103
105
|
|
104
106
|
Удобно писать плагины, использовать 1 процесс, 1 коннект, и проч.
|
105
107
|
|
106
|
-
|
107
|
-
|
108
|
-
прекрасный сервер :) ), так что вы тут не найдете search и udp.
|
109
|
-
|
110
|
-
Упор сделан на потребление памяти (эх, ruby), поэтому все на тредах и на данный момент на 1.9.3 вы можете получить 8Mb RES.
|
108
|
+
Посмотрите официальную реализацию [riemann-client](https://github.com/aphyr/riemann-ruby-client),
|
109
|
+
По сравнению с ней вы тут не найдете search и udp.
|
111
110
|
|
data/Rakefile
CHANGED
@@ -1 +1 @@
|
|
1
|
-
require
|
1
|
+
require 'bundler/gem_tasks'
|
data/Vagrantfile
CHANGED
@@ -1,16 +1,15 @@
|
|
1
1
|
# -*- mode: ruby -*-
|
2
2
|
# vi: set ft=ruby :
|
3
3
|
|
4
|
-
Vagrant.configure(
|
4
|
+
Vagrant.configure('2') do |config|
|
5
5
|
|
6
|
-
config.vm.box_url =
|
7
|
-
config.vm.box =
|
6
|
+
config.vm.box_url = 'http://files.vagrantup.com/precise64_vmware.box'
|
7
|
+
config.vm.box = 'precise64_kurchatov_gem'
|
8
8
|
config.ssh.forward_agent = true
|
9
9
|
|
10
10
|
config.vm.provider :vmware_fusion do |vmware|
|
11
|
-
|
12
|
-
|
13
|
-
vmware.box_url = "http://files.vagrantup.com/precise64_vmware.box"
|
11
|
+
vmware.vm.vmx['memsize'] = '2048'
|
12
|
+
vmware.vm.gui = false
|
14
13
|
end
|
15
14
|
|
16
15
|
end
|
data/bin/kurchatov
CHANGED
@@ -3,12 +3,12 @@ interval 60
|
|
3
3
|
default[:base_uri] = 'http://localhost/check'
|
4
4
|
default[:expression] = 'ERROR'
|
5
5
|
default[:contains] = false # Contains or not expression
|
6
|
-
default[:service] =
|
6
|
+
default[:service] = 'check_file_contains'
|
7
7
|
|
8
8
|
collect do
|
9
9
|
event(
|
10
|
-
|
11
|
-
|
12
|
-
|
10
|
+
:service => "#{plugin.service} #{plugin.base_uri} #{plugin.expression}",
|
11
|
+
:description => "#{plugin.base_uri} contains #{plugin.expression}",
|
12
|
+
:metric => rest_get(plugin.base_uri).include?(plugin.expression) == plugin.contains
|
13
13
|
)
|
14
14
|
end
|
data/examples/count_proc.rb
CHANGED
@@ -5,10 +5,10 @@ collect :os => 'linux' do
|
|
5
5
|
count = 0
|
6
6
|
Dir['/proc/[0-9]*/cmdline'].each { |p| count += 1 if File.read(p) =~ /#{plugin.proc}/ }
|
7
7
|
event(
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
8
|
+
:service => "count proc #{plugin.proc}",
|
9
|
+
:metric => count,
|
10
|
+
:description => "count proc #{plugin.proc}, count: #{count}",
|
11
|
+
:warning => 5,
|
12
|
+
:critical => 20
|
13
13
|
)
|
14
14
|
end
|
data/examples/cpu.rb
CHANGED
@@ -14,13 +14,13 @@ collect :os => 'linux' do
|
|
14
14
|
_, u2, n2, s2, i2 = [$1, $2, $3, $4, $5].map { |e| e.to_i }
|
15
15
|
unless @old_cpu[cpu_number].nil?
|
16
16
|
u1, n1, s1, i1 = @old_cpu[cpu_number]
|
17
|
-
used
|
18
|
-
total
|
19
|
-
fraction
|
17
|
+
used = (u2+n2+s2) - (u1+n1+s1)
|
18
|
+
total = used + i2-i1
|
19
|
+
fraction = used.to_f / total
|
20
20
|
end
|
21
21
|
@old_cpu[cpu_number] = [u2, n2, s2, i2]
|
22
|
-
service
|
23
|
-
description
|
22
|
+
service = "cpu usage cpu#{cpu_number}"
|
23
|
+
description = "Cpu#{cpu_number} usage"
|
24
24
|
if cpu_number == '_total'
|
25
25
|
event(:service => service, :metric => fraction, :desc => description, :warning => 70, :critical => 58)
|
26
26
|
else
|
data/examples/disk.rb
CHANGED
@@ -14,7 +14,7 @@ collect :os => 'linux' do
|
|
14
14
|
def get_monit_points_for_size
|
15
15
|
monit_points = []
|
16
16
|
File.open('/proc/mounts', 'r') do |file|
|
17
|
-
while line = file.gets
|
17
|
+
while (line = file.gets)
|
18
18
|
mtab = line.split(/\s+/)
|
19
19
|
monit_points << mtab[1] unless plugin.not_monit_fs_4_size.include? mtab[2]
|
20
20
|
end
|
@@ -25,7 +25,7 @@ collect :os => 'linux' do
|
|
25
25
|
def get_monit_points_for_fstab
|
26
26
|
monit_points = []
|
27
27
|
File.open('/proc/mounts', 'r') do |file|
|
28
|
-
while line = file.gets
|
28
|
+
while (line = file.gets)
|
29
29
|
mtab = line.split(/\s+/)
|
30
30
|
if plugin.monit_fs_4_fstab.include?(mtab[2]) &&
|
31
31
|
!plugin.not_monit_point_4_fstab.include?(mtab[1]) &&
|
@@ -38,7 +38,7 @@ collect :os => 'linux' do
|
|
38
38
|
end
|
39
39
|
|
40
40
|
get_monit_points_for_size.each do |point|
|
41
|
-
point_stat
|
41
|
+
point_stat = Sys::Filesystem.stat(point)
|
42
42
|
human_point = point == '/' ? '/root' : point
|
43
43
|
human_point = human_point.gsub(/^\//, '').gsub(/\//, '_')
|
44
44
|
event(:warning => 70, :critical => 85, :service => "disk #{human_point} % block", :desc => "Disk usage #{point}, %", :metric => (1- point_stat.blocks_available.to_f/point_stat.blocks).round(2) * 100) unless point_stat.blocks == 0
|
data/examples/disk_stat.rb
CHANGED
@@ -1,21 +1,21 @@
|
|
1
1
|
always_start true
|
2
2
|
interval 60
|
3
3
|
|
4
|
-
default[:words] = [
|
5
|
-
|
6
|
-
|
4
|
+
default[:words] = ['reads reqs', 'reads merged', 'reads sector', 'reads time',
|
5
|
+
'writes reqs', 'writes merged', 'writes sector', 'writes time',
|
6
|
+
'io reqs', 'io time', 'io weighted']
|
7
7
|
|
8
|
-
default[:filter] = [
|
8
|
+
default[:filter] = ['reads reqs', 'writes reqs']
|
9
9
|
|
10
10
|
run_if do
|
11
11
|
File.exists? '/proc/diskstats'
|
12
12
|
end
|
13
13
|
|
14
|
-
collect :os =>
|
14
|
+
collect :os => 'linux' do
|
15
15
|
f = File.read('/proc/diskstats')
|
16
16
|
f.split("\n").reject { |d| d =~ /(ram|loop)/ }.inject({}) do |_, line|
|
17
17
|
if line =~ /^(?:\s+\d+){2}\s+([\w\d]+) (.*)$/
|
18
|
-
dev
|
18
|
+
dev = $1
|
19
19
|
values = $2.split(/\s+/).map { |str| str.to_i }
|
20
20
|
next if !!(dev.match /\d+$/ || !(dev.match =~ /^xvd/))
|
21
21
|
plugin.filter.each do |filter|
|
data/examples/dns_check.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
collect do
|
2
2
|
event(
|
3
|
-
|
4
|
-
|
3
|
+
:state => Resolv::DNS.new.getresources(ohai[:fqdn], Resolv::DNS::Resource::IN::A).count == 1,
|
4
|
+
:desc => 'Check resolv self FQDN')
|
5
5
|
end
|
data/examples/exim.rb
CHANGED
data/examples/file_age.rb
CHANGED
@@ -2,10 +2,10 @@ default[:file] = '/notexists'
|
|
2
2
|
|
3
3
|
collect do
|
4
4
|
event(
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
5
|
+
:service => "#{name} #{plugin.file}",
|
6
|
+
:metric => (unixnow - File.stat(plugin.file).mtime.to_i).abs.to_f/60,
|
7
|
+
:description => "File #{plugin.file} age",
|
8
|
+
:warning => 1,
|
9
|
+
:critical => 5
|
10
10
|
)
|
11
11
|
end
|
data/examples/find_files.rb
CHANGED
@@ -9,7 +9,7 @@ default[:age] = 24 * 60 * 60
|
|
9
9
|
collect do
|
10
10
|
if File.directory?(plugin.dir)
|
11
11
|
count_files = 0
|
12
|
-
file_mask
|
12
|
+
file_mask = Regexp.new(plugin.file_mask)
|
13
13
|
Find.find(plugin.dir).each do |file|
|
14
14
|
next unless File.file? file
|
15
15
|
next unless file_mask.match file
|
data/examples/http.rb
CHANGED
@@ -14,9 +14,9 @@ collect do
|
|
14
14
|
|
15
15
|
@cmd ||= begin
|
16
16
|
"curl -X#{plugin.http_method} -s --connect-timeout #{plugin.connect_timeout}" +
|
17
|
-
|
18
|
-
|
19
|
-
|
17
|
+
" #{'--insecure' if plugin.insecure} " +
|
18
|
+
" -w '%{http_code}\\n' --retry #{plugin.retry} --retry-delay #{plugin.retry_delay}" +
|
19
|
+
" --max-time #{plugin.max_time} --fail #{plugin.url} -o /dev/null"
|
20
20
|
end
|
21
21
|
|
22
22
|
out = shell_out(@cmd).stdout.to_i
|
data/examples/iptables.rb
CHANGED
@@ -20,8 +20,8 @@ collect do
|
|
20
20
|
end.compact.join("\n")
|
21
21
|
|
22
22
|
event(
|
23
|
-
|
24
|
-
|
25
|
-
|
23
|
+
:service => "iptables #{plugin.rule_file}",
|
24
|
+
:state => current_rules == saved_rules,
|
25
|
+
:description => "iptables rules different between file: #{plugin.rule_file} and iptables-save"
|
26
26
|
)
|
27
27
|
end
|
data/examples/la.rb
CHANGED
@@ -3,22 +3,22 @@ interval 60
|
|
3
3
|
|
4
4
|
default[:cpu] = ohai[:cpu][:real]
|
5
5
|
|
6
|
-
collect :os =>
|
6
|
+
collect :os => 'linux' do
|
7
7
|
event(
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
8
|
+
:metric => File.read('/proc/loadavg').scan(/[\d\.]+/)[0].to_f,
|
9
|
+
:desc => 'LA averaged over 1 minute',
|
10
|
+
:service => 'la la_1',
|
11
|
+
:warning => plugin.cpu,
|
12
|
+
:critical => plugin.cpu * 2
|
13
13
|
)
|
14
14
|
end
|
15
15
|
|
16
|
-
collect :os =>
|
16
|
+
collect :os => 'darwin' do
|
17
17
|
event(
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
18
|
+
:metric => shell('uptime | cut -d":" -f4- | sed s/,//g').to_f,
|
19
|
+
:desc => 'LA averaged over 1 minute',
|
20
|
+
:service => 'la la_1',
|
21
|
+
:warning => plugin.cpu,
|
22
|
+
:critical => plugin.cpu * 2
|
23
23
|
)
|
24
24
|
end
|
data/examples/mdadm.rb
CHANGED
@@ -33,7 +33,7 @@ collect do
|
|
33
33
|
mdstat = File.read('/proc/mdstat').split("\n")
|
34
34
|
mdstat.each_with_index do |line, index|
|
35
35
|
next unless line.include?('blocks')
|
36
|
-
device
|
36
|
+
device = file[index-1].split(':')[0].strip
|
37
37
|
mdstatus = rm_bracket(line.split(' ').last) # UUU
|
38
38
|
next if status_well?(mdstatus) # пропускаем все збс
|
39
39
|
next if mdstatus == plugin[states][device].to_s # disabled in config
|
data/examples/memory.rb
CHANGED
@@ -3,18 +3,18 @@ always_start true
|
|
3
3
|
|
4
4
|
collect :os => 'linux' do
|
5
5
|
m = File.read('/proc/meminfo').split(/\n/).inject({}) do |info, line|
|
6
|
-
x
|
6
|
+
x = line.split(/:?\s+/)
|
7
7
|
info[x[0]] = x[1].to_i
|
8
8
|
info
|
9
9
|
end
|
10
10
|
|
11
|
-
free
|
12
|
-
cached
|
13
|
-
buffers
|
14
|
-
total
|
15
|
-
used
|
16
|
-
free_bc
|
17
|
-
fraction
|
11
|
+
free = m['MemFree'].to_i * 1024
|
12
|
+
cached = m['Cached'].to_i * 1024
|
13
|
+
buffers = m['Buffers'].to_i * 1024
|
14
|
+
total = m['MemTotal'].to_i * 1024
|
15
|
+
used = total - free
|
16
|
+
free_bc = free + buffers + cached
|
17
|
+
fraction = 1 - (free_bc.to_f / total)
|
18
18
|
swap_fraction = m['SwapTotal'] == 0 ? 0 : 1 - m['SwapFree'].to_f/m['SwapTotal']
|
19
19
|
|
20
20
|
event(:service => 'memory % free', :desc => 'Memory usage, %', :metric => fraction.round(2) * 100, :critical => 85, :warning => 75)
|
data/examples/net.rb
CHANGED
@@ -2,12 +2,12 @@ interval 60
|
|
2
2
|
always_start true
|
3
3
|
|
4
4
|
default[:include_alias] = false
|
5
|
-
default[:filter] = [
|
6
|
-
default[:words] =
|
7
|
-
|
8
|
-
|
5
|
+
default[:filter] = ['rx bytes', 'rx errs', 'rx drop', 'tx bytes', 'tx errs', 'tx drop']
|
6
|
+
default[:words] = ['rx bytes', 'rx packets', 'rx errs', 'rx drop', 'rx fifo', 'rx frame',
|
7
|
+
'rx compressed', 'rx multicast', 'tx bytes', 'tx packets', 'tx drops',
|
8
|
+
'tx fifo', 'tx colls', 'tx carrier', 'tx compressed']
|
9
9
|
|
10
|
-
collect :os =>
|
10
|
+
collect :os => 'linux' do
|
11
11
|
File.read('/proc/net/dev').each_line do |line|
|
12
12
|
iface = line.split(':')[0].strip
|
13
13
|
iface.gsub!(/\./, '_')
|
@@ -16,7 +16,7 @@ collect :os => "linux" do
|
|
16
16
|
plugin.words.map do |service|
|
17
17
|
service
|
18
18
|
end.zip(
|
19
|
-
|
19
|
+
$2.split(/\s+/).map { |str| str.to_i }
|
20
20
|
).each do |service, value|
|
21
21
|
next unless plugin.filter.include? service
|
22
22
|
event(:service => "net #{iface} #{service}", :metric => value.to_f/interval, :diff => true)
|
data/examples/net_stat.rb
CHANGED
@@ -12,14 +12,14 @@ collect do
|
|
12
12
|
end
|
13
13
|
end
|
14
14
|
filter += " \\) and not dst 127.0.0.1:*"
|
15
|
-
cmd
|
15
|
+
cmd = 'ss -t -4 -n state established ' + filter + ' | wc -l'
|
16
16
|
|
17
17
|
count = shell!(cmd).to_i - 1
|
18
18
|
|
19
19
|
event(
|
20
|
-
|
21
|
-
|
22
|
-
|
20
|
+
:service => "netstat tcp #{plugin.ports.join(', ')}",
|
21
|
+
:metric => count,
|
22
|
+
:description => "count established connects: #{count} to ports #{plugin.ports.join(', ')}"
|
23
23
|
)
|
24
24
|
|
25
25
|
end
|
data/examples/nfs.rb
CHANGED
data/examples/nginx.rb
CHANGED
@@ -10,7 +10,7 @@ run_if do
|
|
10
10
|
File.exists? plugin.file
|
11
11
|
end
|
12
12
|
|
13
|
-
collect :os =>
|
13
|
+
collect :os => 'linux' do
|
14
14
|
lines = http_get(plugin.url).split("\n")
|
15
15
|
lines[2].scan(/\d+/).each_with_index do |value, index|
|
16
16
|
event(:service => "nginx #{plugin.nginx_status_1[index]}", :metric => value.to_f/interval, :diff => true)
|
data/examples/nginx_500.rb
CHANGED
@@ -27,7 +27,7 @@ collect do
|
|
27
27
|
file = File::Tail::Logfile.new(plugin.file)
|
28
28
|
file.backward(plugin.check_last_lines)
|
29
29
|
file.readlines.each do |line|
|
30
|
-
line.force_encoding(
|
30
|
+
line.force_encoding('UTF-8')
|
31
31
|
next unless line.valid_encoding?
|
32
32
|
time = get_unix_time_from_line(line)
|
33
33
|
count_interval += 1 if time > (unixnow - plugin.interval)
|
@@ -35,14 +35,14 @@ collect do
|
|
35
35
|
end
|
36
36
|
|
37
37
|
event(
|
38
|
-
|
39
|
-
|
40
|
-
|
38
|
+
:service => "nginx log parse #{plugin.file} interval errors",
|
39
|
+
:metric => count_all,
|
40
|
+
:desc => "Count errors in file #{plugin.file}, last #{plugin.check_interval} sec"
|
41
41
|
)
|
42
42
|
event(
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
43
|
+
:service => "nginx log parse #{plugin.file} realtime errors",
|
44
|
+
:metric => count_interval,
|
45
|
+
:state => 'ok',
|
46
|
+
:desc => "Count errors in file #{plugin.file}, last #{plugin.interval} sec"
|
47
47
|
)
|
48
48
|
end
|
data/examples/ntp.rb
CHANGED
@@ -6,10 +6,10 @@ default[:timeout] = 30
|
|
6
6
|
|
7
7
|
collect do
|
8
8
|
event(
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
9
|
+
:service => "ntp #{plugin.host}",
|
10
|
+
:desc => "Ntp lag with host #{plugin.host}",
|
11
|
+
:metric => (::Net::NTP.get(plugin.host, 'ntp', plugin.timeout).time.to_f - Time.now.to_f).abs,
|
12
|
+
:critical => 0.5,
|
13
|
+
:warning => 0.1
|
14
14
|
)
|
15
15
|
end
|
data/examples/openfiles.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
collect do
|
2
2
|
event(
|
3
|
-
|
4
|
-
|
3
|
+
:metric => File.read('/proc/sys/fs/file-nr').split(' ').first.to_i,
|
4
|
+
:description => 'Number of allocated file handles'
|
5
5
|
)
|
6
6
|
end
|
data/examples/pgsql.rb
CHANGED
@@ -27,14 +27,14 @@ collect do
|
|
27
27
|
def run_master_sql
|
28
28
|
run_sql("create database #{plugin.db4monit}") unless db4monit_exists?
|
29
29
|
run_sql(
|
30
|
-
|
30
|
+
"drop table if exists timestamp; \
|
31
31
|
create table timestamp ( id int primary key, value timestamp default now() ); \
|
32
32
|
insert into timestamp (id) values (1); \
|
33
|
-
|
33
|
+
", plugin.db4monit)
|
34
34
|
end
|
35
35
|
|
36
36
|
def repl_lag
|
37
|
-
unixnow - run_sql(
|
37
|
+
unixnow - run_sql('select extract(epoch from value::timestamp) from timestamp where id = 1;', plugin.db4monit).to_i
|
38
38
|
end
|
39
39
|
|
40
40
|
def connections
|
data/examples/ping_icmp.rb
CHANGED
@@ -1,12 +1,12 @@
|
|
1
1
|
require 'net/ping'
|
2
2
|
|
3
3
|
interval 60
|
4
|
-
default[:host] =
|
4
|
+
default[:host] = 'localhost'
|
5
5
|
|
6
6
|
collect do
|
7
7
|
event(
|
8
|
-
|
9
|
-
|
10
|
-
|
8
|
+
:service => "ping icmp #{plugin.host}",
|
9
|
+
:state => ::Net::Ping::External.new(ip).ping,
|
10
|
+
:description => "ping icmp host: #{plugin.host}"
|
11
11
|
)
|
12
12
|
end
|
data/examples/ping_tcp.rb
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
require 'net/ping'
|
2
2
|
|
3
|
-
default[:host] =
|
3
|
+
default[:host] = 'localhost'
|
4
4
|
default[:port] = 22
|
5
5
|
default[:timeout] = 5
|
6
6
|
|
7
7
|
collect do
|
8
8
|
::Net::Ping::TCP.econnrefused = true
|
9
9
|
event(
|
10
|
-
|
11
|
-
|
12
|
-
|
10
|
+
:service => "ping tcp #{plugin.host}:#{plugin.port}",
|
11
|
+
:state => ::Net::Ping::TCP.new(plugin.host, plugin.port, plugin.timeout).ping,
|
12
|
+
:description => "Ping tcp #{plugin.host}:#{plugin.port}"
|
13
13
|
)
|
14
14
|
end
|
data/examples/proc_mem.rb
CHANGED
@@ -13,12 +13,12 @@ collect do
|
|
13
13
|
end
|
14
14
|
|
15
15
|
event(
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
16
|
+
:diff => true,
|
17
|
+
:description => "RSS usage delta #{plugin.pidfile}",
|
18
|
+
:metric => mem_total,
|
19
|
+
:service => "procmem #{plugin.pidfile}",
|
20
|
+
:warning => 30*1024, #kibibytes
|
21
|
+
:critical => 90*1024
|
22
22
|
) if File.stat(plugin.pidfile).mtime > interval
|
23
23
|
|
24
24
|
end
|
data/examples/rabbitmq.rb
CHANGED
@@ -6,10 +6,10 @@ collect do
|
|
6
6
|
vhost_uri = "#{plugin.api_url}/queues/#{CGI.escape(vhost)}"
|
7
7
|
JSON.parse(rest_get(vhost_uri)).each do |queue|
|
8
8
|
event(
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
9
|
+
:service => "rabbitmq queue #{queue['name'].gsub('.', '_')} messages count",
|
10
|
+
:metric => queue['messages'].to_i,
|
11
|
+
:desc => "Rabbitmq queue count in #{queue['name']}",
|
12
|
+
:critical => 1000
|
13
13
|
)
|
14
14
|
end
|
15
15
|
end
|
data/examples/runit.rb
CHANGED
@@ -27,7 +27,7 @@ collect do
|
|
27
27
|
Dir.glob('/etc/service/*').each do |srv|
|
28
28
|
srv_uptime = uptime(srv)
|
29
29
|
srv_runned = runned?(srv)
|
30
|
-
srv_name
|
30
|
+
srv_name = human_srv(srv)
|
31
31
|
|
32
32
|
# сервис запущен и работает дольше чем мы приходили к нему в прошлый раз
|
33
33
|
if srv_runned && srv_uptime > interval
|
data/examples/sidekiq.rb
CHANGED
@@ -2,20 +2,20 @@ default[:url] = 'http://localhost/admin/sidekiq/dashboard/stats'
|
|
2
2
|
|
3
3
|
collect do
|
4
4
|
stats = JSON.parse(rest_get(plugin.url))
|
5
|
-
stats = stats[
|
5
|
+
stats = stats['sidekiq'] ? stats['sidekiq'] : stats
|
6
6
|
event(
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
7
|
+
:service => "#{name} #{plugin.url}",
|
8
|
+
:metric => stats['enqueued'].to_i,
|
9
|
+
:description => "sidekiq queue from #{plugin.url}",
|
10
|
+
:warning => 10,
|
11
|
+
:critical => 60
|
12
12
|
)
|
13
13
|
event(
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
14
|
+
:service => "#{name} #{plugin.url}",
|
15
|
+
:metric => stats['failed'].to_i,
|
16
|
+
:diff => true,
|
17
|
+
:description => "sidekiq failed from #{plugin.url}",
|
18
|
+
:warning => 10,
|
19
|
+
:critical => 60
|
20
20
|
)
|
21
21
|
end
|
@@ -2,8 +2,8 @@ default[:url] = 'http://localhost/sidekiq/queue-state'
|
|
2
2
|
|
3
3
|
collect do
|
4
4
|
event(
|
5
|
-
|
6
|
-
|
7
|
-
|
5
|
+
:service => "#{name} #{plugin.url}",
|
6
|
+
:metric => rest_get(plugin.url).strip == 'OK',
|
7
|
+
:description => "sidekiq queue status #{plugin.url}"
|
8
8
|
)
|
9
9
|
end
|