kurchatov 0.0.5.pre5 → 0.0.5
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
+
[![Gem Version](https://badge.fury.io/rb/kurchatov.png)](http://badge.fury.io/rb/kurchatov)
|
1
2
|
[![Build Status](https://travis-ci.org/vadv/kurchatov.png)](https://travis-ci.org/vadv/kurchatov)
|
3
|
+
[![Code Climate](https://codeclimate.com/github/vadv/kurchatov.png)](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
|