介绍
如果 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。
- 从哪里来的
#015
?
答案1
根据此问答#015
syslog 中的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 的更多详细信息,请参阅以下指南: