如果将被动检查发送到 NSCA 守护程序,则命令文件“nagios.cmd#015”不存在问题

如果将被动检查发送到 NSCA 守护程序,则命令文件“nagios.cmd#015”不存在问题

介绍

如果 opsview 已重新启动,则 /usr/local/nagios/etc/nsca.cfg 将被默认配置替换,对位于 /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)也许应该以 nagios 用户身份发出 nsca 命令

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

不能解决问题

2)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

3)从本地主机发送 ncsa 命令是否有效

不,也不起作用

4)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

5)是否可以用 nsca 将其他检查(除了被动检查)发送到 Opsview?

所有类型的检查都会出现此问题

6) nagios.cmd#015 does not exist...? nagios.cmd 是否已配置?或者尚未配置?

是的,这是正确的

7)与此版本 NSCA 相关的错误?

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

似乎没什么问题,因为在互联网上没有发现任何问题。

8)谁有写入 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

答案1

根据此问答#015syslog 中的a对应于 a \r

该问题是由于 Puppet ERB 模板添加了 CR 而引起的。

执行以下命令

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

重新启动 opsview 即可解决问题。

为了解决Puppet 中的 CR 模板 erb 问题, 使用content => regsubst(template("opsview/nsca.cfg.erb"), '\r', '', 'G'),

答案2

你没有提到运行nsca 服务器。这是最重要的一块。

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

相关内容