riemann-tools 0.2.11 → 0.2.13

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 379e84d65f11764bb686f8e6f0e30de4d781aba2
4
- data.tar.gz: 471fa6319632b5d50a5a353a817049cd2637fbe6
3
+ metadata.gz: 524cc2711592ff6612b4bcde6b96ab3fa11ae537
4
+ data.tar.gz: b1091049d8dac7ac940bc17f08484b4c4466e3f1
5
5
  SHA512:
6
- metadata.gz: a514901352bad1d586732b665f03de228d05eb5540dbfbd78bea7c558f523dc17f7f7a5f8d6b21930367d23eb70d288d443a9c964395c130194422bc32ac9ee2
7
- data.tar.gz: 49fffcc4b0712fe5ac27e92ccf36278d09c85c31cc7004975514d49f9fcd4ba23c233a5e1268cd741712f9bf0e5b6268723672c446b6a710e1958f96fa45e7f3
6
+ metadata.gz: ba5628dc40a128aed32394cdce2a8a6a63506c6eeb488d736ab1fa678c34fb209f260ff3dbfcc1c08de5c7cd35fcef57d38bb0058993fa7af417a8125a2c5555
7
+ data.tar.gz: 7c2db71785ca6e9f4effd8ef383156a9baf3337e6b9dc9ddd293b01c2578e4b0faf8f5dc1daeebd998f219cd5561b88283e29c04edbcb0f2f4eabad090a8b8ab
@@ -38,7 +38,8 @@ ship with the `riemann-tools` gem, including:
38
38
  * riemann-consul - Monitor Consul.
39
39
  * riemann-fd - Linux file descriptor use.
40
40
  * riemann-kvminstance - Monitor KVM instances.
41
- * riemann-ntp - Monitor NTP
41
+ * riemann-ntp - Monitor NTP.
42
+ * riemann-portcheck - Monitor open TCP ports.
42
43
 
43
44
  Also contained in the repository are a number of stand-alone monitoring
44
45
  tools, which are shipped as separate gems.
@@ -48,8 +48,8 @@ class Riemann::Tools::ConsulHealth
48
48
 
49
49
  def tick
50
50
 
51
- leader = get(@consul_leader_url)
52
- leader_hostname = URI.parse("http://" + leader[1..-2]).hostname
51
+ leader = JSON.parse(get(@consul_leader_url))
52
+ leader_hostname = URI.parse("http://" + leader).hostname
53
53
 
54
54
  if (leader_hostname == @underlying_ip)
55
55
  nodes = JSON.parse(get(@consul_nodes_url))
@@ -36,8 +36,20 @@ class Riemann::Tools::Health
36
36
  @cores = `sysctl -n hw.ncpu`.to_i
37
37
  @cpu = method :freebsd_cpu
38
38
  @disk = method :disk
39
- @load = method :freebsd_load
39
+ @load = method :bsd_load
40
40
  @memory = method :freebsd_memory
41
+ when 'openbsd'
42
+ @cores = `sysctl -n hw.ncpu`.to_i
43
+ @cpu = method :openbsd_cpu
44
+ @disk = method :disk
45
+ @load = method :bsd_load
46
+ @memory = method :openbsd_memory
47
+ when 'sunos'
48
+ @cores = `mpstat -a 2>/dev/null`.split[33].to_i
49
+ @cpu = method :sunos_cpu
50
+ @disk = method :disk
51
+ @load = method :bsd_load
52
+ @memory = method :sunos_memory
41
53
  else
42
54
  @cores = `nproc`.to_i
43
55
  puts "WARNING: OS '#{@ostype}' not explicitly supported. Falling back to Linux" unless @ostype == "linux"
@@ -145,7 +157,47 @@ class Riemann::Tools::Health
145
157
  @old_cpu = [u2, n2, s2, t2, i2]
146
158
  end
147
159
 
148
- def freebsd_load
160
+ def openbsd_cpu
161
+ u2, n2, s2, t2, i2 = `sysctl -n kern.cp_time 2>/dev/null`.split(',').map{ |e| e.to_i } #OpenBSD separates with ,
162
+
163
+ if @old_cpu
164
+ u1, n1, s1, t1, i1 = @old_cpu
165
+
166
+ used = (u2+n2+s2+t2) - (u1+n1+s1+t1)
167
+ total = used + i2-i1
168
+ fraction = used.to_f / total
169
+
170
+ report_pct :cpu, fraction, "user+nice+sytem+interrupt\n\n#{`ps -axo pcpu,pid,comm | sort -nrb -k1 | head -10`.chomp}"
171
+ end
172
+
173
+ @old_cpu = [u2, n2, s2, t2, i2]
174
+ end
175
+
176
+ def sunos_cpu
177
+ mpstats = `mpstat -a 2>/dev/null`.split
178
+ u2 = mpstats[29].to_i
179
+ s2 = mpstats[30].to_i
180
+ t2 = mpstats[31].to_i
181
+ i2 = mpstats[32].to_i
182
+
183
+ if @old_cpu
184
+ u1, s1, t1, i1 = @old_cpu
185
+
186
+ used = (u2+s2+t2) - (u1+s1+t1)
187
+ total = used + i2-i1
188
+ if i2 == i1 && used == 0 #If the system is <1% used in both samples then total will be 0 + (99 - 99), avoid a div by 0
189
+ fraction = 0
190
+ else
191
+ fraction = used.to_f / total
192
+ end
193
+
194
+ report_pct :cpu, fraction, "user+sytem+interrupt\n\n#{`ps -ao pcpu,pid,comm | sort -nrb -k1 | head -10`.chomp}"
195
+ end
196
+
197
+ @old_cpu = [u2, s2, t2, i2]
198
+ end
199
+
200
+ def bsd_load
149
201
  m = `uptime`.split(':')[-1].chomp.gsub(/\s+/,'').split(',')
150
202
  load = m[0].to_f / @cores
151
203
  if load > @limits[:load][:critical]
@@ -164,6 +216,21 @@ class Riemann::Tools::Health
164
216
  report_pct :memory, fraction, "used\n\n#{`ps -axo pmem,pid,comm | sort -nrb -k1 | head -10`.chomp}"
165
217
  end
166
218
 
219
+ def openbsd_memory
220
+ meminfo = `vmstat 2>/dev/null`.chomp.split
221
+ fraction = meminfo[28].to_f / meminfo[29].to_f #The ratio of active to free memory unlike the others :(
222
+
223
+ report_pct :memory, fraction, "used\n\n#{`ps -axo pmem,pid,comm | sort -nrb -k1 | head -10`.chomp}"
224
+ end
225
+
226
+ def sunos_memory
227
+ meminfo = `vmstat 2>/dev/null`.chomp.split
228
+ total_mem = `prtconf | grep Memory`.split[2].to_f * 1024 # reports in GB but vmstat is in MB
229
+ fraction = ( total_mem - meminfo[32].to_f ) / total_mem
230
+
231
+ report_pct :memory, fraction, "used\n\n#{`ps -ao pmem,pid,comm | sort -nrb -k1 | head -10`.chomp}"
232
+ end
233
+
167
234
  def darwin_top
168
235
  raw = `top -l 1 | grep -i "^\\(cpu\\|physmem\\|load\\)"`.chomp
169
236
  @topdata = {:stamp => Time.now.to_i }
@@ -227,8 +294,10 @@ class Riemann::Tools::Health
227
294
 
228
295
  def df
229
296
  case @ostype
230
- when 'darwin', 'freebsd'
297
+ when 'darwin', 'freebsd', 'openbsd'
231
298
  `df -P -t noiso9660`
299
+ when 'sunos'
300
+ `df -P` # Is there a good way to exlude iso9660 here?
232
301
  else
233
302
  `df -P --exclude-type=iso9660`
234
303
  end
@@ -79,13 +79,13 @@ class Riemann::Tools::Net
79
79
  delta = metric - @old_state[service]
80
80
  svc_state = case service
81
81
  when /drop$/
82
- if metric > 0
82
+ if delta > 0
83
83
  'warning'
84
84
  else
85
85
  'ok'
86
86
  end
87
87
  when /errs$/
88
- if metric > 0
88
+ if delta > 0
89
89
  'warning'
90
90
  else
91
91
  'ok'
@@ -0,0 +1,41 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # Checks for open tcp ports.
4
+ # (c) Max Voit 2017
5
+
6
+ require File.expand_path('../../lib/riemann/tools', __FILE__)
7
+
8
+ class Riemann::Tools::Portcheck
9
+ include Riemann::Tools
10
+ require 'socket'
11
+
12
+ opt :hostname, "Host, defaults to localhost", :default => `hostname`.chomp
13
+ opt :ports, "List of ports to check, e.g. '-r 80 443'", :type => :ints
14
+
15
+ def initialize
16
+ @hostname = opts.fetch(:hostname)
17
+ @ports = opts.fetch(:ports)
18
+ end
19
+
20
+ def tick
21
+ for thisport in @ports
22
+ # try opening tcp connection with 5s timeout;
23
+ # if this fails, the port is considered closed
24
+ portopen = Socket.tcp(@hostname, thisport, connect_timeout: 5) { true } rescue false
25
+ if portopen
26
+ state = "ok"
27
+ else
28
+ state = "critical"
29
+ end
30
+ report(
31
+ :host => "#{@hostname}",
32
+ :service => "port #{thisport}",
33
+ :state => "#{state}",
34
+ :tags => ["portcheck"]
35
+ )
36
+ end
37
+ end
38
+
39
+ end
40
+
41
+ Riemann::Tools::Portcheck.run
@@ -50,7 +50,7 @@ class Riemann::Tools::Proc
50
50
  # value should be either process RSS, VSIZE, or 1 if running
51
51
  # state is always unknown for the moment
52
52
  #
53
- ps_regex = /([0-9]+)[ ]+([0-9]+)[ ]+([0-9]+)[ ]+([A-Z])[ ]+([0-9:.]+)[ ]+[A-Za-z]{3}[ ]+([A-Za-z]{3} [0-9]+ [0-9:]+ [0-9]+)[ ]+(.*)/
53
+ ps_regex = /([0-9]+)[ ]+([0-9]+)[ ]+([0-9]+)[ ]+([A-Z])[ ]+([0-9:.]+)[ ]+[A-Za-z]{3}[ ]+([A-Za-z]{3}[ ]{1,2}[0-9]+ [0-9:]+ [0-9]+)[ ]+(.*)/
54
54
  found.each_line do |line|
55
55
  m = ps_regex.match(line)
56
56
  if not m.nil?
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: riemann-tools
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.11
4
+ version: 0.2.13
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kyle Kingsbury
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-12-04 00:00:00.000000000 Z
11
+ date: 2018-01-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: riemann-client
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: 0.2.2
19
+ version: 0.2.6
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: 0.2.2
26
+ version: 0.2.6
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: trollop
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -42,38 +42,39 @@ dependencies:
42
42
  name: json
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ">="
45
+ - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '0'
47
+ version: '1.8'
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - ">="
52
+ - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '0'
54
+ version: '1.8'
55
55
  description: Utilities which submit events to Riemann.
56
56
  email: aphyr@aphyr.com
57
57
  executables:
58
- - riemann-apache-status
59
- - riemann-bench
60
- - riemann-cloudant
61
- - riemann-consul
62
- - riemann-dir-files-count
58
+ - riemann-kvminstance
63
59
  - riemann-dir-space
64
- - riemann-diskstats
60
+ - riemann-bench
61
+ - riemann-net
65
62
  - riemann-fd
66
- - riemann-freeswitch
63
+ - riemann-dir-files-count
64
+ - riemann-zookeeper
67
65
  - riemann-haproxy
68
- - riemann-health
69
- - riemann-kvminstance
70
- - riemann-memcached
71
- - riemann-net
66
+ - riemann-consul
67
+ - riemann-freeswitch
68
+ - riemann-apache-status
72
69
  - riemann-nginx-status
73
- - riemann-ntp
74
70
  - riemann-proc
71
+ - riemann-portcheck
72
+ - riemann-ntp
73
+ - riemann-health
74
+ - riemann-memcached
75
75
  - riemann-varnish
76
- - riemann-zookeeper
76
+ - riemann-diskstats
77
+ - riemann-cloudant
77
78
  extensions: []
78
79
  extra_rdoc_files: []
79
80
  files:
@@ -95,6 +96,7 @@ files:
95
96
  - bin/riemann-net
96
97
  - bin/riemann-nginx-status
97
98
  - bin/riemann-ntp
99
+ - bin/riemann-portcheck
98
100
  - bin/riemann-proc
99
101
  - bin/riemann-varnish
100
102
  - bin/riemann-zookeeper
@@ -119,7 +121,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
119
121
  version: '0'
120
122
  requirements: []
121
123
  rubyforge_project: riemann-tools
122
- rubygems_version: 2.4.5
124
+ rubygems_version: 2.6.13
123
125
  signing_key:
124
126
  specification_version: 4
125
127
  summary: Utilities which submit events to Riemann.