bin/riemann-fd in riemann-tools-1.1.1 vs bin/riemann-fd in riemann-tools-1.2.0

- old
+ new

@@ -1,87 +1,8 @@ #!/usr/bin/env ruby # frozen_string_literal: true Process.setproctitle($PROGRAM_NAME) -# Reports current file descriptor use to riemann. -# By default reports the total system fd usage, can also report usage of individual processes +require 'riemann/tools/fd' -require File.expand_path('../lib/riemann/tools', __dir__) - -module Riemann - module Tools - class Health - include Riemann::Tools - - opt :fd_sys_warning, 'open file descriptor threshold for system', default: 800 - opt :fd_sys_critical, 'open file descriptor critical threshold for system', default: 900 - opt :fd_proc_warning, 'open file descriptor threshold for process', default: 800 - opt :fd_proc_critical, 'open file descriptor critical threshold for process', default: 900 - opt :processes, 'list of processes to measure fd usage in addition to system total', type: :ints - - def initialize - @limits = { - fd: { critical: opts[:fd_sys_critical], warning: opts[:fd_sys_warning] }, - process: { critical: opts[:fd_proc_critical], warning: opts[:fd_proc_warning] }, - } - ostype = `uname -s`.chomp.downcase - case ostype - when 'freebsd' - @fd = method :freebsd_fd - else - puts "WARNING: OS '#{ostype}' not explicitly supported. Falling back to Linux" unless ostype == 'linux' - @fd = method :linux_fd - end - end - - def alert(service, state, metric, description) - report( - service: service.to_s, - state: state.to_s, - metric: metric.to_f, - description: description, - ) - end - - def freebsd_fd - sys_used = Integer(`sysctl -n kern.openfiles`) - if sys_used > @limits[:fd][:critical] - alert 'fd sys', :critical, sys_used, "system is using #{sys_used} fds" - elsif sys_used > @limits[:fd][:warning] - alert 'fd sys', :warning, sys_used, "system is using #{sys_used} fds" - else - alert 'fd sys', :ok, sys_used, "system is using #{sys_used} fds" - end - end - - def linux_fd - sys_used = Integer(`lsof | wc -l`) - if sys_used > @limits[:fd][:critical] - alert 'fd sys', :critical, sys_used, "system is using #{sys_used} fds" - elsif sys_used > @limits[:fd][:warning] - alert 'fd sys', :warning, sys_used, "system is using #{sys_used} fds" - else - alert 'fd sys', :ok, sys_used, "system is using #{sys_used} fds" - end - - opts[:processes]&.each do |process| - used = Integer(`lsof -p #{process} | wc -l`) - name, _pid = `ps axo comm,pid | grep -w #{process}`.split - if used > @limits[:process][:critical] - alert "fd #{name} #{process}", :critical, used, "process #{name} #{process} is using #{used} fds" - elsif used > @limits[:process][:warning] - alert "fd #{name} #{process}", :warning, used, "process #{name} #{process} is using #{used} fds" - else - alert "fd #{name} #{process}", :ok, used, "process #{name} #{process} is using #{used} fds" - end - end - end - - def tick - @fd.call - end - end - end -end - -Riemann::Tools::Health.run +Riemann::Tools::Fd.run