Я написал собственный сценарий ruby для проверки использования диска для каждого тома на сервере Ubuntu. Серверы управляются марионеткой, а система 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
Как обычно, это произошло из-за глупой ошибки. Файл сценария проверки был установлен на сервере nagios вместо клиентского сервера. Эта конфигурация nagios управляется марионеткой, и некоторые пользовательские проверки установлены на сервере nagios, а некоторые - на клиентском сервере.
Я последовал примеру другого настраиваемого скрипта проверки, который я установил. Единственная причина, по которой он работал, заключается в том, что кто-то установил его вручную в / usr / lib / nagios / plugins на клиентском сервере, в то время как puppet без толку установил его и на сервере nagios.
Вам необходимо указать полный путь к вашему двоичному файлу ruby в верхней части скрипта.
Вы не можете использовать /usr/bin/env ruby
в качестве интерпретатора, потому что NRPE будет работать без ENV.
Это можно смоделировать, запустив ваш скрипт через env -i
, как пользователь nagios / nrpe:
env -i /usr/lib/nagios/plugins/check_disk_usage.rb