riemann-tools 0.2.13 → 1.1.0
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 +5 -5
- data/.docker/Dockerfile +7 -0
- data/.docker/publish.sh +35 -0
- data/.github/dependabot.yml +11 -0
- data/.github/workflows/ci.yml +42 -0
- data/.github/workflows/codeql-analysis.yml +72 -0
- data/.gitignore +6 -0
- data/.rspec +2 -0
- data/.rubocop.yml +32 -0
- data/.travis.yml +31 -0
- data/CHANGELOG.md +422 -0
- data/Gemfile +6 -0
- data/ISSUE_TEMPLATE.md +15 -0
- data/README.markdown +14 -15
- data/Rakefile +23 -0
- data/SECURITY.md +42 -0
- data/bin/riemann-apache-status +92 -77
- data/bin/riemann-bench +54 -48
- data/bin/riemann-cloudant +44 -39
- data/bin/riemann-consul +82 -75
- data/bin/riemann-dir-files-count +53 -46
- data/bin/riemann-dir-space +53 -46
- data/bin/riemann-diskstats +78 -74
- data/bin/riemann-fd +68 -47
- data/bin/riemann-freeswitch +108 -102
- data/bin/riemann-haproxy +46 -39
- data/bin/riemann-health +4 -335
- data/bin/riemann-kvminstance +18 -12
- data/bin/riemann-memcached +35 -28
- data/bin/riemann-net +4 -103
- data/bin/riemann-nginx-status +74 -66
- data/bin/riemann-ntp +4 -32
- data/bin/riemann-portcheck +40 -30
- data/bin/riemann-proc +96 -89
- data/bin/riemann-varnish +51 -44
- data/bin/riemann-zookeeper +38 -33
- data/lib/riemann/tools/health.rb +347 -0
- data/lib/riemann/tools/net.rb +104 -0
- data/lib/riemann/tools/ntp.rb +41 -0
- data/lib/riemann/tools/utils.rb +17 -0
- data/lib/riemann/tools/version.rb +7 -0
- data/lib/riemann/tools.rb +40 -33
- data/riemann-tools.gemspec +42 -0
- data/tools/riemann-aws/LICENSE +21 -0
- data/tools/riemann-aws/README.md +54 -0
- data/tools/riemann-aws/Rakefile +37 -0
- data/tools/riemann-aws/bin/riemann-aws-billing +93 -0
- data/tools/riemann-aws/bin/riemann-aws-rds-status +68 -0
- data/tools/riemann-aws/bin/riemann-aws-sqs-status +50 -0
- data/tools/riemann-aws/bin/riemann-aws-status +83 -0
- data/tools/riemann-aws/bin/riemann-elb-metrics +168 -0
- data/tools/riemann-aws/bin/riemann-s3-list +87 -0
- data/tools/riemann-aws/bin/riemann-s3-status +102 -0
- data/tools/riemann-chronos/LICENSE +21 -0
- data/tools/riemann-chronos/README.md +10 -0
- data/tools/riemann-chronos/Rakefile +37 -0
- data/tools/riemann-chronos/bin/riemann-chronos +161 -0
- data/tools/riemann-docker/LICENSE +21 -0
- data/tools/riemann-docker/README.md +10 -0
- data/tools/riemann-docker/Rakefile +36 -0
- data/tools/riemann-docker/bin/riemann-docker +206 -0
- data/tools/riemann-elasticsearch/LICENSE +21 -0
- data/tools/riemann-elasticsearch/README.md +10 -0
- data/tools/riemann-elasticsearch/Rakefile +37 -0
- data/tools/riemann-elasticsearch/bin/riemann-elasticsearch +174 -0
- data/tools/riemann-marathon/LICENSE +21 -0
- data/tools/riemann-marathon/README.md +10 -0
- data/tools/riemann-marathon/Rakefile +37 -0
- data/tools/riemann-marathon/bin/riemann-marathon +163 -0
- data/tools/riemann-mesos/LICENSE +21 -0
- data/tools/riemann-mesos/README.md +10 -0
- data/tools/riemann-mesos/Rakefile +37 -0
- data/tools/riemann-mesos/bin/riemann-mesos +146 -0
- data/tools/riemann-munin/LICENSE +21 -0
- data/tools/riemann-munin/README.md +10 -0
- data/tools/riemann-munin/Rakefile +36 -0
- data/tools/riemann-munin/bin/riemann-munin +43 -0
- data/tools/riemann-rabbitmq/LICENSE +21 -0
- data/tools/riemann-rabbitmq/README.md +10 -0
- data/tools/riemann-rabbitmq/Rakefile +37 -0
- data/tools/riemann-rabbitmq/bin/riemann-rabbitmq +273 -0
- data/tools/riemann-riak/LICENSE +21 -0
- data/tools/riemann-riak/README.md +10 -0
- data/tools/riemann-riak/Rakefile +36 -0
- data/tools/riemann-riak/bin/riemann-riak +323 -0
- data/tools/riemann-riak/bin/riemann-riak-keys +13 -0
- data/tools/riemann-riak/bin/riemann-riak-ring +9 -0
- data/tools/riemann-riak/riak_status/key_count.erl +13 -0
- data/tools/riemann-riak/riak_status/riak_status.rb +152 -0
- data/tools/riemann-riak/riak_status/ringready.erl +9 -0
- metadata +195 -34
data/bin/riemann-kvminstance
CHANGED
@@ -1,21 +1,27 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
+
# frozen_string_literal: true
|
2
3
|
|
3
|
-
|
4
|
+
Process.setproctitle($PROGRAM_NAME)
|
4
5
|
|
5
|
-
|
6
|
-
include Riemann::Tools
|
6
|
+
require File.expand_path('../lib/riemann/tools', __dir__)
|
7
7
|
|
8
|
-
|
8
|
+
module Riemann
|
9
|
+
module Tools
|
10
|
+
class KVM
|
11
|
+
include Riemann::Tools
|
9
12
|
|
10
|
-
|
11
|
-
|
13
|
+
def tick
|
14
|
+
# determine how many instances I have according to libvirt
|
15
|
+
kvm_instances = `LANG=C virsh list | grep -c running`
|
12
16
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
17
|
+
# submit them to riemann
|
18
|
+
report(
|
19
|
+
service: 'KVM Running VMs',
|
20
|
+
metric: kvm_instances.to_i,
|
21
|
+
state: 'info',
|
22
|
+
)
|
23
|
+
end
|
24
|
+
end
|
19
25
|
end
|
20
26
|
end
|
21
27
|
|
data/bin/riemann-memcached
CHANGED
@@ -1,36 +1,43 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
Process.setproctitle($PROGRAM_NAME)
|
2
5
|
|
3
6
|
# Gathers memcached STATS and submits them to Riemann.
|
4
7
|
|
5
|
-
require File.expand_path('
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
8
|
+
require File.expand_path('../lib/riemann/tools', __dir__)
|
9
|
+
|
10
|
+
module Riemann
|
11
|
+
module Tools
|
12
|
+
class Memcached
|
13
|
+
include Riemann::Tools
|
14
|
+
require 'socket'
|
15
|
+
|
16
|
+
opt :memcached_host, 'Memcached hostname', default: 'localhost'
|
17
|
+
opt :memcached_port, 'Memcached port', default: 11_211
|
18
|
+
|
19
|
+
def tick
|
20
|
+
sock = TCPSocket.new(opts[:memcached_host], opts[:memcached_port])
|
21
|
+
sock.print("stats\r\n")
|
22
|
+
sock.flush
|
23
|
+
stats = sock.gets
|
24
|
+
|
25
|
+
loop do
|
26
|
+
stats = sock.gets
|
27
|
+
break if stats.strip == 'END'
|
28
|
+
|
29
|
+
m = stats.match(/STAT (\w+) (\S+)/)
|
30
|
+
report(
|
31
|
+
host: opts[:memcached_host].dup,
|
32
|
+
service: "memcached #{m[1]}",
|
33
|
+
metric: m[2].to_f,
|
34
|
+
state: 'ok',
|
35
|
+
tags: ['memcached'],
|
36
|
+
)
|
37
|
+
end
|
38
|
+
sock.close
|
39
|
+
end
|
32
40
|
end
|
33
|
-
sock.close
|
34
41
|
end
|
35
42
|
end
|
36
43
|
|
data/bin/riemann-net
CHANGED
@@ -1,109 +1,10 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
+
# frozen_string_literal: true
|
2
3
|
|
3
|
-
|
4
|
-
|
5
|
-
require File.expand_path('../../lib/riemann/tools', __FILE__)
|
6
|
-
|
7
|
-
class Riemann::Tools::Net
|
8
|
-
include Riemann::Tools
|
9
|
-
|
10
|
-
opt :interfaces, "Interfaces to monitor", :type => :strings, :default => nil
|
11
|
-
opt :ignore_interfaces, "Interfaces to ignore", :type => :strings, :default =>['lo']
|
12
|
-
|
13
|
-
def initialize
|
14
|
-
@old_state = nil
|
15
|
-
@interfaces = opts[:interfaces].map(&:dup) if opts[:interfaces]
|
16
|
-
@ignore_interfaces = opts[:ignore_interfaces].map(&:dup)
|
17
|
-
end
|
18
|
-
|
19
|
-
def state
|
20
|
-
f = File.read('/proc/net/dev')
|
21
|
-
state = f.split("\n").inject({}) do |s, line|
|
22
|
-
if line =~ /\s*(\w+?):\s*([\s\d]+)\s*/
|
23
|
-
iface = $1
|
24
|
-
|
25
|
-
['rx bytes',
|
26
|
-
'rx packets',
|
27
|
-
'rx errs',
|
28
|
-
'rx drop',
|
29
|
-
'rx fifo',
|
30
|
-
'rx frame',
|
31
|
-
'rx compressed',
|
32
|
-
'rx multicast',
|
33
|
-
'tx bytes',
|
34
|
-
'tx packets',
|
35
|
-
'tx errs',
|
36
|
-
'tx drops',
|
37
|
-
'tx fifo',
|
38
|
-
'tx colls',
|
39
|
-
'tx carrier',
|
40
|
-
'tx compressed'].map do |service|
|
41
|
-
"#{iface} #{service}"
|
42
|
-
end.zip(
|
43
|
-
$2.split(/\s+/).map { |str| str.to_i }
|
44
|
-
).each do |service, value|
|
45
|
-
s[service] = value
|
46
|
-
end
|
47
|
-
end
|
48
|
-
|
49
|
-
s
|
50
|
-
end
|
4
|
+
Process.setproctitle($PROGRAM_NAME)
|
51
5
|
|
52
|
-
|
53
|
-
if is = @interfaces
|
54
|
-
state = state.select do |service, value|
|
55
|
-
is.include? service.split(' ').first
|
56
|
-
end
|
57
|
-
end
|
58
|
-
|
59
|
-
state = state.reject do |service, value|
|
60
|
-
@ignore_interfaces.include? service.split(' ').first
|
61
|
-
end
|
62
|
-
|
63
|
-
state
|
64
|
-
end
|
65
|
-
|
66
|
-
def tick
|
67
|
-
state = self.state
|
68
|
-
|
69
|
-
if @old_state
|
70
|
-
# Report services from `@old_state` that don't exist in `state` as expired
|
71
|
-
@old_state.reject { |k| state.has_key?(k) }.each do |service, metric|
|
72
|
-
report(:service => service.dup, :state => 'expired')
|
73
|
-
end
|
74
|
-
|
75
|
-
# Report delta for services that have values in both `@old_state` and `state`
|
76
|
-
state.each do |service, metric|
|
77
|
-
next unless @old_state.has_key?(service)
|
78
|
-
|
79
|
-
delta = metric - @old_state[service]
|
80
|
-
svc_state = case service
|
81
|
-
when /drop$/
|
82
|
-
if delta > 0
|
83
|
-
'warning'
|
84
|
-
else
|
85
|
-
'ok'
|
86
|
-
end
|
87
|
-
when /errs$/
|
88
|
-
if delta > 0
|
89
|
-
'warning'
|
90
|
-
else
|
91
|
-
'ok'
|
92
|
-
end
|
93
|
-
else
|
94
|
-
'ok'
|
95
|
-
end
|
6
|
+
# Gathers network interface statistics and submits them to Riemann.
|
96
7
|
|
97
|
-
|
98
|
-
:service => service.dup,
|
99
|
-
:metric => (delta.to_f / opts[:interval]),
|
100
|
-
:state => svc_state
|
101
|
-
)
|
102
|
-
end
|
103
|
-
end
|
8
|
+
require 'riemann/tools/net'
|
104
9
|
|
105
|
-
@old_state = state
|
106
|
-
end
|
107
|
-
end
|
108
|
-
|
109
10
|
Riemann::Tools::Net.run
|
data/bin/riemann-nginx-status
CHANGED
@@ -1,82 +1,90 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
Process.setproctitle($PROGRAM_NAME)
|
2
5
|
|
3
6
|
# Gathers nginx status stub statistics and submits them to Riemann.
|
4
7
|
# See http://wiki.nginx.org/HttpStubStatusModule for configuring Nginx appropriately
|
5
8
|
|
6
|
-
require File.expand_path('
|
7
|
-
|
8
|
-
class Riemann::Tools::NginxStatus
|
9
|
-
include Riemann::Tools
|
10
|
-
require 'net/http'
|
11
|
-
require 'uri'
|
12
|
-
|
13
|
-
opt :uri, "Nginx Stub Status URI", :default => 'http://localhost:8080/nginx_status'
|
14
|
-
opt :checks, "Which metrics to report.", :type => :strings, :default => %w{active accepted handled requests reading writing waiting}
|
15
|
-
opt :active_warning, "Active connections warning threshold", :default => 0
|
16
|
-
opt :active_critical, "Active connections critical threshold", :default => 0
|
17
|
-
opt :reading_warning, "Reading connections warning threshold", :default => 0
|
18
|
-
opt :reading_critical, "Reading connections critical threshold", :default => 0
|
19
|
-
opt :writing_warning, "Writing connections warning threshold", :default => 0
|
20
|
-
opt :writing_critical, "Writing connections critical threshold", :default => 0
|
21
|
-
opt :waiting_warning, "Waiting connections warning threshold", :default => 0
|
22
|
-
opt :waiting_critical, "Waiting connections critical threshold", :default => 0
|
23
|
-
|
24
|
-
def initialize
|
25
|
-
@uri = URI.parse(opts[:uri])
|
26
|
-
|
27
|
-
# sample response:
|
28
|
-
#
|
29
|
-
# Active connections: 1
|
30
|
-
# server accepts handled requests
|
31
|
-
# 39 39 39
|
32
|
-
# Reading: 0 Writing: 1 Waiting: 0
|
33
|
-
@keys = %w{active accepted handled requests reading writing waiting}
|
34
|
-
@re = /Active connections: (\d+) \n.+\n (\d+) (\d+) (\d+) \nReading: (\d+) Writing: (\d+) Waiting: (\d+)/m
|
35
|
-
end
|
9
|
+
require File.expand_path('../lib/riemann/tools', __dir__)
|
36
10
|
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
11
|
+
module Riemann
|
12
|
+
module Tools
|
13
|
+
class NginxStatus
|
14
|
+
include Riemann::Tools
|
15
|
+
require 'net/http'
|
16
|
+
require 'uri'
|
42
17
|
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
18
|
+
opt :uri, 'Nginx Stub Status URI', default: 'http://localhost:8080/nginx_status'
|
19
|
+
opt :checks, 'Which metrics to report.', type: :strings,
|
20
|
+
default: %w[active accepted handled requests reading writing waiting]
|
21
|
+
opt :active_warning, 'Active connections warning threshold', default: 0
|
22
|
+
opt :active_critical, 'Active connections critical threshold', default: 0
|
23
|
+
opt :reading_warning, 'Reading connections warning threshold', default: 0
|
24
|
+
opt :reading_critical, 'Reading connections critical threshold', default: 0
|
25
|
+
opt :writing_warning, 'Writing connections warning threshold', default: 0
|
26
|
+
opt :writing_critical, 'Writing connections critical threshold', default: 0
|
27
|
+
opt :waiting_warning, 'Waiting connections warning threshold', default: 0
|
28
|
+
opt :waiting_critical, 'Waiting connections critical threshold', default: 0
|
47
29
|
|
48
|
-
|
49
|
-
|
30
|
+
def initialize
|
31
|
+
@uri = URI.parse(opts[:uri])
|
50
32
|
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
:
|
59
|
-
|
60
|
-
|
61
|
-
|
33
|
+
# sample response:
|
34
|
+
#
|
35
|
+
# Active connections: 1
|
36
|
+
# server accepts handled requests
|
37
|
+
# 39 39 39
|
38
|
+
# Reading: 0 Writing: 1 Waiting: 0
|
39
|
+
@keys = %w[active accepted handled requests reading writing waiting]
|
40
|
+
@re = /Active connections: (\d+) \n.+\n (\d+) (\d+) (\d+) \nReading: (\d+) Writing: (\d+) Waiting: (\d+)/m
|
41
|
+
end
|
42
|
+
|
43
|
+
def state(key, value)
|
44
|
+
if opts.key? "#{key}_critical".to_sym
|
45
|
+
critical_threshold = opts["#{key}_critical".to_sym]
|
46
|
+
return 'critical' if critical_threshold.positive? && (value >= critical_threshold)
|
47
|
+
end
|
48
|
+
|
49
|
+
if opts.key? "#{key}_warning".to_sym
|
50
|
+
warning_threshold = opts["#{key}_warning".to_sym]
|
51
|
+
return 'warning' if warning_threshold.positive? && (value >= warning_threshold)
|
52
|
+
end
|
53
|
+
|
54
|
+
'ok'
|
55
|
+
end
|
56
|
+
|
57
|
+
def tick
|
58
|
+
response = nil
|
59
|
+
begin
|
60
|
+
response = Net::HTTP.get(@uri)
|
61
|
+
rescue StandardError => e
|
62
|
+
report(
|
63
|
+
service: 'nginx health',
|
64
|
+
state: 'critical',
|
65
|
+
description: "Connection error: #{e.class} - #{e.message}",
|
66
|
+
)
|
67
|
+
end
|
62
68
|
|
63
|
-
|
69
|
+
return if response.nil?
|
64
70
|
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
71
|
+
report(
|
72
|
+
service: 'nginx health',
|
73
|
+
state: 'ok',
|
74
|
+
description: 'Nginx status connection ok',
|
75
|
+
)
|
70
76
|
|
71
|
-
|
77
|
+
values = @re.match(response).to_a[1, 7].map(&:to_i)
|
72
78
|
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
79
|
+
@keys.zip(values).each do |key, value|
|
80
|
+
report({
|
81
|
+
service: "nginx #{key}",
|
82
|
+
metric: value,
|
83
|
+
state: state(key, value),
|
84
|
+
tags: ['nginx'],
|
85
|
+
})
|
86
|
+
end
|
87
|
+
end
|
80
88
|
end
|
81
89
|
end
|
82
90
|
end
|
data/bin/riemann-ntp
CHANGED
@@ -1,38 +1,10 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
+
# frozen_string_literal: true
|
2
3
|
|
3
|
-
|
4
|
-
|
5
|
-
require File.expand_path('../../lib/riemann/tools', __FILE__)
|
6
|
-
|
7
|
-
class Riemann::Tools::Ntp
|
8
|
-
include Riemann::Tools
|
4
|
+
Process.setproctitle($PROGRAM_NAME)
|
9
5
|
|
10
|
-
|
11
|
-
@hostname = `hostname`.chomp
|
12
|
-
end
|
13
|
-
|
14
|
-
def tick
|
15
|
-
stats = `ntpq -p -n`
|
16
|
-
stats.each_line do |stat|
|
17
|
-
m = stat.split()
|
18
|
-
next if m.grep(/^===/).any? || m.grep(/^remote/).any?
|
19
|
-
@ntp_host = m[0].gsub("*","").gsub("-","").gsub("+","")
|
20
|
-
send("delay",m[7])
|
21
|
-
send("offset",m[8])
|
22
|
-
send("jitter",m[9])
|
23
|
-
end
|
24
|
-
end
|
6
|
+
# Reports NTP stats to Riemann.
|
25
7
|
|
26
|
-
|
27
|
-
report(
|
28
|
-
:host => @hostname,
|
29
|
-
:service => "ntp peer #{@ntp_host} #{type}",
|
30
|
-
:metric => metric.to_f,
|
31
|
-
:state => "ok",
|
32
|
-
:description => "ntp peer #{@ntp_host} #{type}",
|
33
|
-
:tags => ["ntp"]
|
34
|
-
)
|
35
|
-
end
|
36
|
-
end
|
8
|
+
require 'riemann/tools/ntp'
|
37
9
|
|
38
10
|
Riemann::Tools::Ntp.run
|
data/bin/riemann-portcheck
CHANGED
@@ -1,41 +1,51 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
Process.setproctitle($PROGRAM_NAME)
|
2
5
|
|
3
6
|
# Checks for open tcp ports.
|
4
7
|
# (c) Max Voit 2017
|
5
8
|
|
6
|
-
require File.expand_path('
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
9
|
+
require File.expand_path('../lib/riemann/tools', __dir__)
|
10
|
+
|
11
|
+
module Riemann
|
12
|
+
module Tools
|
13
|
+
class Portcheck
|
14
|
+
include Riemann::Tools
|
15
|
+
require 'socket'
|
16
|
+
|
17
|
+
opt :hostname, 'Host, defaults to localhost', default: `hostname`.chomp
|
18
|
+
opt :ports, "List of ports to check, e.g. '-r 80 443'", type: :ints
|
19
|
+
|
20
|
+
def initialize
|
21
|
+
@hostname = opts.fetch(:hostname)
|
22
|
+
@ports = opts.fetch(:ports)
|
23
|
+
end
|
24
|
+
|
25
|
+
def tick
|
26
|
+
@ports.each do |thisport|
|
27
|
+
# try opening tcp connection with 5s timeout;
|
28
|
+
# if this fails, the port is considered closed
|
29
|
+
portopen = begin
|
30
|
+
Socket.tcp(@hostname, thisport, connect_timeout: 5) { true }
|
31
|
+
rescue StandardError
|
32
|
+
false
|
33
|
+
end
|
34
|
+
state = if portopen
|
35
|
+
'ok'
|
36
|
+
else
|
37
|
+
'critical'
|
38
|
+
end
|
39
|
+
report(
|
40
|
+
host: @hostname.to_s,
|
41
|
+
service: "port #{thisport}",
|
42
|
+
state: state.to_s,
|
43
|
+
tags: ['portcheck'],
|
44
|
+
)
|
29
45
|
end
|
30
|
-
|
31
|
-
:host => "#{@hostname}",
|
32
|
-
:service => "port #{thisport}",
|
33
|
-
:state => "#{state}",
|
34
|
-
:tags => ["portcheck"]
|
35
|
-
)
|
46
|
+
end
|
36
47
|
end
|
37
48
|
end
|
38
|
-
|
39
49
|
end
|
40
50
|
|
41
51
|
Riemann::Tools::Portcheck.run
|