Nagios NRPE:无法读取自定义检查的输出

Nagios NRPE:无法读取自定义检查的输出

我编写了一个自定义 ruby​​ 脚本来检查 ubuntu 服务器上每个卷的磁盘使用情况。服务器由 puppet 控制,nagios 系统已经运行多年,包含许多其他自定义检查。当我在 nagios 服务器上运行我的新脚本时,它返回预期的输出,但当我为另一台服务器运行它时,它返回 NRPE:无法读取输出。在任何服务器上运行标准插件都可以。

我只是将文件加载到 /usr/lib/nagios/plugins 中并在 nrpe.cfg 中包含了一个命令,以便我从终端的命令行运行它。

我是否需要为客户端服务器的自定义检查设置主机名(或主机组)和服务,以使其在该服务器上工作,即使是从命令行?

这是nrpe.cfg中的命令

command[check_disk_usage]=/usr/lib/nagios/plugins/check_disk_usage.rb

以下是一些说明该问题的命令示例。

nagios@nagios-server:~$ /usr/lib/nagios/plugins/check_nrpe -H nagios-server
NRPE v2.15

nagios@nagios-server:~$ /usr/lib/nagios/plugins/check_nrpe -H client-server
NRPE v2.15

nagios@nagios-server:~$ /usr/lib/nagios/plugins/check_nrpe -H nagios-server -c check_users
USERS OK - 2 users currently logged in |users=2;5;5;0

nagios@nagios-server:~$ /usr/lib/nagios/plugins/check_nrpe -H client-server -c check_users
USERS OK - 2 users currently logged in |users=2;5;5;0

nagios@nagios-server:~$ /usr/lib/nagios/plugins/check_nrpe -H nagios-server -c check_disk_usage
OK - '/backups' 79% of disk space used | '/'=37% '/tmp'=1% '/srv'=62% '/backups'=79%

nagios@nagios-server:~$ /usr/lib/nagios/plugins/check_nrpe -H client-server -c check_disk_usage
NRPE: Unable to read output

这是我的自定义检查脚本:

#!/usr/bin/env ruby

def largest_hash_key(hash)
  hash.max_by{|k,v| v}
end

filesystem = %x(df -h)

perfdata = filesystem.split("\n")
                 .grep(/\A\/dev/)
                 .map(&:split)
                 .map{ |e| "'%s'=%s" % [ e[-1], e[-2] ] }
                 .join(" ")

volumes = Hash[perfdata.split(" ").map {|str| str.split("=")}]

volumes = volumes.map{ |k, v| [k, v.to_i] }

full_disk = largest_hash_key(volumes)

pc_full = full_disk[1]

message = "#{perfdata} | #{perfdata}" 

if pc_full > 94
   puts "DISK CRITICAL - #{message}"
   exit 2
elsif pc_full > 89
   puts "DISK WARNING - #{message}"
   exit 1
else
   puts "DISK OK - #{message}"
   exit 0   
end

答案1

您需要在脚本顶部使用 ruby​​ 二进制文件的完整路径。

您不能用作/usr/bin/env ruby解释器,因为 NRPE 将在没有 ENV 的情况下运行。

这可以通过运行脚本来模拟env -i作为 nagios/nrpe 用户

env -i /usr/lib/nagios/plugins/check_disk_usage.rb

答案2

和往常一样,这是由于一个愚蠢的错误造成的。检查脚本文件安装在 nagios 服务器上,而不是客户端服务器上。此 nagios 配置由 puppet 控制,一些自定义检查安装在 nagios 服务器上,一些安装在客户端服务器上。

我按照我安装的另一个自定义检查脚本的示例进行操作。该脚本之所以能正常工作,是因为有人在客户端服务器上的 /usr/lib/nagios/plugins 中手动安装了该脚本,而 puppet 也毫无用处地在 nagios 服务器上安装了该脚本。

相关内容