bin/riemann-proc in riemann-tools-1.1.1 vs bin/riemann-proc in riemann-tools-1.2.0
- old
+ new
@@ -1,115 +1,8 @@
#!/usr/bin/env ruby
# frozen_string_literal: true
Process.setproctitle($PROGRAM_NAME)
-# Reports running process count to riemann.
-
-require File.expand_path('../lib/riemann/tools', __dir__)
-
-module Riemann
- module Tools
- class Proc
- include Riemann::Tools
-
- opt :proc_regex, 'regular expression that matches the process to be monitored', type: :string, default: '.*'
- opt :proc_min_critical, 'running process count minimum', default: 0
- opt :proc_max_critical, 'running process count maximum', default: 65_536
-
- def initialize
- @limits = { critical: { min: opts[:proc_min_critical], max: opts[:proc_max_critical] } }
-
- abort 'FATAL: specify a process regular expression, see --help for usage' unless opts[:proc_regex]
-
- ostype = `uname -s`.chomp.downcase
- puts "WARNING: OS '#{ostype}' not explicitly supported. Falling back to Linux" unless ostype == 'linux'
- @check = method :linux_proc
- end
-
- def alert(service, state, metric, description)
- report(
- service: service.to_s,
- state: state.to_s,
- metric: metric.to_f,
- description: description,
- )
- end
-
- def linux_proc
- process = opts[:proc_regex]
- found = `ps axo pid=,rss=,vsize=,state=,cputime=,lstart=,command= | grep '#{process}' | grep -v grep | grep -v riemann-proc`
- running = found.count("\n")
- if (running > @limits[:critical][:max]) || (running < @limits[:critical][:min])
- alert "proc count/#{process}", :critical, running, "process #{process} is running #{running} instances.\n"
- else
- alert "proc count/#{process}", :ok, running, "process #{process} is running #{running} instances.\n"
- end
- # Iterate on all the lines and create an entry for the following metrics:
- #
- # process/<pid>-<start-time>/rss
- # process/<pid>-<start-time>/vsize
- # process/<pid>-<start-time>/running
- # process/<pid>-<start-time>/cputime
- #
- # description should contain the command itself.
- # value should be either process RSS, VSIZE, or 1 if running
- # state is always unknown for the moment
- #
- 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]+) +(.*)/
- found.each_line do |line|
- m = ps_regex.match(line)
- next if m.nil?
-
- pid, rss, vsize, state, cputime, start, command = m.captures
- start_s = DateTime.parse(start, 'Mmm DD HH:MM:ss YYYY').to_time.to_i
- cputime_s = DateTime.parse(cputime, '%H:%M:%S')
- cputime_seconds = (cputime_s.hour * 3600) + (cputime_s.minute * 60) + cputime_s.second
- running = 0
- case state[0]
- when 'R'
- state_s = 'ok'
- running = 1
- when 'S'
- state_s = 'ok'
- when 'I'
- state_s = 'warning'
- when 'T', 'U', 'Z'
- state_s = 'critical'
- else
- state_s = 'unknown'
- end
- report(
- service: "proc #{pid}-#{start_s}/rss",
- state: state_s.to_s,
- metric: rss.to_f,
- description: command,
- )
- report(
- service: "proc #{pid}-#{start_s}/vsize",
- state: state_s.to_s,
- metric: vsize.to_f,
- description: command,
- )
- report(
- service: "proc #{pid}-#{start_s}/running",
- state: state_s.to_s,
- metric: running.to_f,
- description: command,
- )
- report(
- service: "proc #{pid}-#{start_s}/cputime",
- state: state_s.to_s,
- metric: cputime_seconds,
- description: command,
- )
- end
- end
-
- def tick
- @check.call
- end
- end
- end
-end
+require 'riemann/tools/proc'
Riemann::Tools::Proc.run