Centos

如果將被動檢查發送到 NSCA 守護程序,則命令文件“nagios.cmd#015”不存在問題

  • January 25, 2015

介紹

由於 /usr/local/nagios/etc/nsca.cfg 被預設配置替換,如果 opsview 已重新啟動,則對駐留在 /etc/init.d/opsview 中的此文件的引用已更改為 /usr/local/nagios/ etc/nsca_puppet.cfg,後者使用 Puppet ERB 模板進行部署。

目標

目的是使用 nsca 將被動檢查發送到 Opsview。

假設是執行:

echo -e "HOST\tService\t0\tRemote File does not exist" | \
sudo /usr/local/nagios/bin/send_nsca -H host -c \
/usr/local/nagios/etc/send_nsca.cfg

將更新駐留在 Opsview 中的(被動)檢查。

結果

跟踪 /var/log/messages 表明以下內容:

Jan 24 14:27:37 host nsca[X]: 
Handling the connection for <ip>...
Jan 24 14:27:37 host nsca[X]: 
Command file '/usr/local/nagios/var/rw/nagios.cmd#015' 
does not exist, attempting to use alternate dump file 
'/dev/null' for output
Jan 24 14:27:37 host nsca[X]: 
SERVICE CHECK -> Host Name: 'HOST', Service Description: 
'Service', Return Code: '0', Output: 'Remote File does 
not exist' client <ip>
Jan 24 14:27:37 host nsca[X]: End of connection for <ip>...

嘗試解決問題

  1. 也許 nsca 命令應該以 nagios 使用者身份發出
sudo -u nagios /usr/local/nagios/bin/send_nsca

不解決問題

  1. ncsa 執行嗎?

是的

user@host:~$ ps -ef | grep nsca
nagios   PID     1  0 13:38 ?        00:00:00 
/usr/local/nagios/bin/nsca -c 
/usr/local/nagios/etc/nsca.cfg --single
  1. 從本地主機發送 ncsa 命令是否有效

不,也不起作用

  1. nagios.cmd 權限不正確?

好像沒問題

user@host:~$ ls -ltr /usr/local/nagios/var/rw/
total 4
-rw-rw-r--. 1 nagios nagios 1321 Jan 23 22:13 config_output.last_okay
srw-rw----. 1 nagios nagcmd    0 Jan 24 13:38 nagios.qh
prw-rw----. 1 nagios nagcmd    0 Jan 24 13:38 nagios.cmd
srw-rw----. 1 nagios nagcmd    0 Jan 24 13:38 opsviewd.cmd
  1. 使用 nsca 將其他檢查然後被動檢查發送到 Opsview 是否有效

所有類型的檢查都會出現此問題

  1. nagios.cmd#015 does not exist…?nagios.cmd 配置了嗎?或不?

是的,這是正確的

  1. 與這個版本的 NSCA 相關的 bug?
user@host:~$ sudo /usr/local/nagios/bin/nsca --version

NSCA - Nagios Service Check Acceptor
Copyright (c) 2000-2007 Ethan Galstad (www.nagios.org)
Version: 2.7.2
Last Modified: 07-03-2007
License: GPL v2
Encryption Routines: AVAILABLE

似乎沒問題,因為在網際網路上沒有發現任何問題。

  1. 誰可以寫入 nagios.cmd?

不允許使用者寫:

user@host:~$ echo hello >> /usr/local/nagios/var/rw/nagios.cmd
-bash: /usr/local/nagios/var/rw/nagios.cmd: Permission denied

而nagios是:

user@host:~$ sudo su - nagios
nagios@host:~$ echo hello >> /usr/local/nagios/var/rw/nagios.cmd
nagios@host:~$

/usr/local/nagios/etc/nsca.cfg

command_file=/usr/local/nagios/var/rw/nagios.cmd

問題

可能會問幾個問題,但目前的假設是無法處理檢查,因為這些檢查未寫入 nagios.cmd。

  1. 從哪裡來#015

根據此問答,系統日誌中的a#015對應於\r.

該問題是因為 CR 是由 Puppet ERB 模板添加的。

執行以下命令

sudo sed -i 's/\r//' /usr/local/nagios/etc/nsca.cfg 

並重新啟動 opsview 解決了這個問題。

為了解決Puppet 中的 CR 模板 erb 問題,請使用content => regsubst(template("opsview/nsca.cfg.erb"), '\r', '', 'G'),.

你沒有提到執行nsca server。這是最重要的一塊。

Send_nsca 需要數據。在這裡你的測試是無效的:

1) Perhaps the nsca command should be issued as the nagios user

sudo -u nagios /usr/local/nagios/bin/send_nsca

相反,您需要先回顯並將數據通過管道傳輸到 send_nsca。伺服器端的 nsca 守護程序需要作為 nagios/nagcmd 使用者/組執行。

有關如何設置 nsca 的更多詳細資訊,請參閱以下指南:

http://munin.readthedocs.org/en/latest/tutorial/nagios.html

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