riemann-tools 0.1.2 → 0.1.3
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/bin/riemann-haproxy +1 -1
- data/bin/riemann-health +0 -1
- data/bin/riemann-resmon +19 -5
- data/lib/riemann/tools.rb +20 -15
- metadata +4 -6
- data/bin/riemann-kvminstances +0 -22
data/bin/riemann-haproxy
CHANGED
@@ -21,7 +21,7 @@ class Riemann::Tools::Haproxy
|
|
21
21
|
row = row.to_hash
|
22
22
|
ns = "haproxy #{row['pxname']} #{row['svname']}"
|
23
23
|
row.each do |property, metric|
|
24
|
-
unless property == 'pxname' || property == 'svname'
|
24
|
+
unless (property.nil? || property == 'pxname' || property == 'svname')
|
25
25
|
report(
|
26
26
|
:host => @uri.host,
|
27
27
|
:service => "#{ns} #{property}",
|
data/bin/riemann-health
CHANGED
data/bin/riemann-resmon
CHANGED
@@ -10,13 +10,25 @@ class Riemann::Tools::Resmon
|
|
10
10
|
opt :resmon_hostfile, 'File with hostnames running Resmon (one URI per line)', type: :string
|
11
11
|
opt :read_timeout, 'Faraday read timeout', type: :int, default: 2
|
12
12
|
opt :open_timeout, 'Faraday open timeout', type: :int, default: 1
|
13
|
+
opt :fqdn, 'Use FQDN for event host'
|
14
|
+
|
13
15
|
|
14
16
|
def initialize
|
15
17
|
@hosts = File.read(options[:resmon_hostfile]).split("\n")
|
16
18
|
super
|
17
19
|
end
|
18
20
|
|
19
|
-
|
21
|
+
|
22
|
+
# Work out the hostname to submit with the event
|
23
|
+
def get_event_host(host)
|
24
|
+
unless options[:fqdn]
|
25
|
+
return host.split('.')[0]
|
26
|
+
end
|
27
|
+
return host
|
28
|
+
end
|
29
|
+
|
30
|
+
# Handles HTTP connections and GET requests safely
|
31
|
+
def safe_get(uri, event_host)
|
20
32
|
# Handle connection timeouts
|
21
33
|
response = nil
|
22
34
|
begin
|
@@ -26,7 +38,7 @@ class Riemann::Tools::Resmon
|
|
26
38
|
req.options[:open_timeout] = options[:open_timeout]
|
27
39
|
end
|
28
40
|
rescue => e
|
29
|
-
report(:host =>
|
41
|
+
report(:host => event_host,
|
30
42
|
:service => "resmon",
|
31
43
|
:state => "critical",
|
32
44
|
:description => "HTTP connection error: #{e.class} - #{e.message}"
|
@@ -37,14 +49,16 @@ class Riemann::Tools::Resmon
|
|
37
49
|
|
38
50
|
def tick
|
39
51
|
@hosts.each do |host|
|
52
|
+
|
40
53
|
uri = URI(host)
|
54
|
+
event_host = get_event_host(uri.host)
|
41
55
|
|
42
|
-
response = safe_get(uri)
|
56
|
+
response = safe_get(uri, event_host)
|
43
57
|
next if response.nil?
|
44
58
|
|
45
59
|
# Handle non-200 responses
|
46
60
|
if response.status != 200
|
47
|
-
report(:host =>
|
61
|
+
report(:host => event_host,
|
48
62
|
:service => "resmon",
|
49
63
|
:state => "critical",
|
50
64
|
:description => "HTTP connection error: #{response.status} - #{response.body}"
|
@@ -58,7 +72,7 @@ class Riemann::Tools::Resmon
|
|
58
72
|
timestamp = result.xpath('last_update').first.text
|
59
73
|
result.xpath('metric').each do |metric|
|
60
74
|
hash = {
|
61
|
-
host:
|
75
|
+
host: event_host,
|
62
76
|
service: "#{result.attributes['module'].value}`#{result.attributes['service'].value}`#{metric.attributes['name'].value}",
|
63
77
|
time: timestamp.to_i
|
64
78
|
}
|
data/lib/riemann/tools.rb
CHANGED
@@ -3,6 +3,7 @@ module Riemann
|
|
3
3
|
require 'rubygems'
|
4
4
|
require 'trollop'
|
5
5
|
require 'riemann/client'
|
6
|
+
require 'timeout'
|
6
7
|
|
7
8
|
def self.included(base)
|
8
9
|
base.instance_eval do
|
@@ -25,40 +26,38 @@ module Riemann
|
|
25
26
|
p.parse ARGV
|
26
27
|
end
|
27
28
|
end
|
28
|
-
|
29
|
+
|
29
30
|
opt :host, "Riemann host", :default => '127.0.0.1'
|
30
31
|
opt :port, "Riemann port", :default => 5555
|
31
32
|
opt :event_host, "Event hostname", :type => String
|
32
33
|
opt :interval, "Seconds between updates", :default => 5
|
33
34
|
opt :tag, "Tag to add to events", :type => String, :multi => true
|
34
35
|
opt :ttl, "TTL for events", :type => Integer
|
36
|
+
opt :attribute, "Attribute to add to the event", :type => String, :multi => true
|
37
|
+
opt :timeout, "Timeout (in seconds) when waiting for acknowledgements", :default => 30
|
35
38
|
end
|
36
39
|
end
|
37
40
|
|
38
|
-
def initialize
|
39
|
-
super
|
40
|
-
end
|
41
|
-
|
42
|
-
def tool_options
|
43
|
-
{}
|
44
|
-
end
|
45
|
-
|
46
41
|
# Returns parsed options (cached) from command line.
|
47
42
|
def options
|
48
43
|
@options ||= self.class.options
|
49
44
|
end
|
50
45
|
alias :opts :options
|
51
46
|
|
52
|
-
|
53
|
-
|
54
|
-
|
47
|
+
def attributes
|
48
|
+
@attributes ||= Hash[options[:attribute].map do |attr|
|
49
|
+
k,v = attr.split(/=/)
|
50
|
+
if k and v
|
51
|
+
[k,v]
|
52
|
+
end
|
53
|
+
end]
|
55
54
|
end
|
56
55
|
|
57
56
|
def report(event)
|
58
57
|
if options[:tag]
|
59
58
|
event[:tags] = options[:tag]
|
60
59
|
end
|
61
|
-
|
60
|
+
|
62
61
|
if options[:ttl]
|
63
62
|
event[:ttl] = options[:ttl]
|
64
63
|
end
|
@@ -67,7 +66,13 @@ module Riemann
|
|
67
66
|
event[:host] = options[:event_host]
|
68
67
|
end
|
69
68
|
|
70
|
-
|
69
|
+
begin
|
70
|
+
Timeout::timeout(options[:timeout]) do
|
71
|
+
riemann << event.merge(attributes)
|
72
|
+
end
|
73
|
+
rescue Timeout::Error
|
74
|
+
riemann.connect
|
75
|
+
end
|
71
76
|
end
|
72
77
|
|
73
78
|
def riemann
|
@@ -87,7 +92,7 @@ module Riemann
|
|
87
92
|
$stderr.puts "#{e.class} #{e}\n#{e.backtrace.join "\n"}"
|
88
93
|
end
|
89
94
|
|
90
|
-
# Sleep.
|
95
|
+
# Sleep.
|
91
96
|
sleep(options[:interval] - ((Time.now - t0) % options[:interval]))
|
92
97
|
end
|
93
98
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: riemann-tools
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.3
|
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-28 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: riemann-client
|
@@ -18,7 +18,7 @@ dependencies:
|
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
20
20
|
- !ruby/object:Gem::Version
|
21
|
-
version: 0.2.
|
21
|
+
version: 0.2.2
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
24
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -26,7 +26,7 @@ dependencies:
|
|
26
26
|
requirements:
|
27
27
|
- - ! '>='
|
28
28
|
- !ruby/object:Gem::Version
|
29
|
-
version: 0.2.
|
29
|
+
version: 0.2.2
|
30
30
|
- !ruby/object:Gem::Dependency
|
31
31
|
name: trollop
|
32
32
|
requirement: !ruby/object:Gem::Requirement
|
@@ -156,7 +156,6 @@ executables:
|
|
156
156
|
- riemann-diskstats
|
157
157
|
- riemann-riak-ring
|
158
158
|
- riemann-cloudant
|
159
|
-
- riemann-kvminstances
|
160
159
|
- riemann-nginx-status
|
161
160
|
- riemann-kvminstance
|
162
161
|
- riemann-net
|
@@ -173,7 +172,6 @@ files:
|
|
173
172
|
- bin/riemann-haproxy
|
174
173
|
- bin/riemann-health
|
175
174
|
- bin/riemann-kvminstance
|
176
|
-
- bin/riemann-kvminstances
|
177
175
|
- bin/riemann-memcached
|
178
176
|
- bin/riemann-munin
|
179
177
|
- bin/riemann-net
|
data/bin/riemann-kvminstances
DELETED
@@ -1,22 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
|
3
|
-
require File.expand_path('../../lib/riemann/tools', __FILE__)
|
4
|
-
|
5
|
-
class Riemann::Tools::KVM
|
6
|
-
include Riemann::Tools
|
7
|
-
|
8
|
-
def tick
|
9
|
-
|
10
|
-
#determine how many instances I have according to libvirt
|
11
|
-
kvm_instances = %x[virsh list |grep i-|wc -l]
|
12
|
-
|
13
|
-
#submit them to riemann
|
14
|
-
report(
|
15
|
-
:service => "KVM Running VMs",
|
16
|
-
:metric => kvm_instances.to_i,
|
17
|
-
:state => "info"
|
18
|
-
)
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
Riemann::Tools::KVM.run
|