Ubuntu

Nagios NRPE:無法讀取自定義檢查的輸出

  • February 12, 2016

我編寫了一個自定義 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

像往常一樣,這是由於一個愚蠢的錯誤。檢查腳本文件安裝在 nagios 伺服器上,而不是客戶端伺服器上。這個 nagios 配置由 puppet 控制,一些自定義檢查安裝在 nagios 伺服器上,一些安裝在客戶端伺服器上。

我按照我安裝的另一個自定義檢查腳本的範例進行操作。一個工作的唯一原因是因為有人在客戶端伺服器上的 /usr/lib/nagios/plugins 中手動安裝了它,而 puppet 也無用地將它安裝在 nagios 伺服器上。

您需要在腳本頂部使用 ruby​​ 二進製文件的完整路徑。

您不能/usr/bin/env ruby用作解釋器,因為 NRPE 將在沒有 ENV 的情況下執行。

這可以通過以 nagios/nrpe 使用者身份執行腳本env -i模擬

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

引用自:https://serverfault.com/questions/755300