我编写了一个自定义 ruby 脚本来检查 ubuntu 服务器上每个卷的磁盘使用情况。服务器由 puppet 控制,nagios 系统已经运行多年,并包含许多其他自定义检查。当我在 nagios 服务器上运行我的新脚本脚本时,它会返回预期的输出,但是当我为另一台服务器运行它时,它会返回 NRPE:unable to read output。运行标准插件适用于任何服务器。
我只将文件加载到 /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
您需要在脚本顶部使用 ruby 二进制文件的完整路径。
您不能
/usr/bin/env ruby
用作解释器,因为 NRPE 将在没有 ENV 的情况下运行。这可以通过以 nagios/nrpe 用户身份运行脚本
env -i
来模拟:像往常一样,这是由于一个愚蠢的错误。检查脚本文件安装在 nagios 服务器上,而不是客户端服务器上。这个 nagios 配置由 puppet 控制,一些自定义检查安装在 nagios 服务器上,一些安装在客户端服务器上。
我按照我安装的另一个自定义检查脚本的示例进行操作。一个工作的唯一原因是因为有人在客户端服务器上的 /usr/lib/nagios/plugins 中手动安装了它,而 puppet 也无用地将它安装在 nagios 服务器上。