riemann-tools 0.2.11 → 0.2.13

Sign up to get free protection for your applications and to get access to all the features.
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.