Назад | Перейти на главную страницу

Nagios NRPE: невозможно прочитать вывод для пользовательской проверки

Я написал собственный сценарий 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