Ubuntu
Nagios NRPE:無法讀取自定義檢查的輸出
我編寫了一個自定義 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