我正在尝试添加 NRPE 检查来监控 Puppet 代理,但是在本地执行时遇到了让插件返回正确结果的困难。
我正在使用这个插件:
在 nagios 客户端本地执行脚本时,结果是正确的,但使用 nrpe 执行会导致严重结果。我想我的配置中遗漏了一些东西。其他 nrpe 插件正在成功执行。
我重新启动了 nrpe.d(并在它关闭时检查了没有 nrpe pid 在运行)check_puppet 文件的权限、所有者和组与我的其他检查相同
[root@puppet-master]# /usr/lib64/nagios/plugins/check_nrpe -H server.addr -c check_puppet
CRITICAL: Puppet daemon not running or something wrong with process
[root@git nrpe.d]# /usr/lib64/nagios/plugins/check_puppet
OK: Puppet agent "3.4.3" running catalogversion 1398787991, and executed at Tue 29 Apr 2014 04:13:25 PM UTC for last time
nagios_commands.cfg:
define command {
command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -t 15 -c check_puppet
command_name check_nrpe_puppet
}
nagios_service.cfg:
define service {
## --PUPPET_NAME-- (called '_naginator_name' in the manifest) check_puppet
check_command check_nrpe_puppet
host_name server.addr
service_description check_puppet
use generic-service
}
/etc/nrpe.d/nrpe-check_puppet
# Configuration for check_puppet (from the generic template)
command[check_puppet]=/usr/lib64/nagios/plugins/check_puppet
供参考,这是我的工作配置
define command {
command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -t 15 -c check_ram
command_name check_nrpe_ram
}
define service {
## --PUPPET_NAME-- (called '_naginator_name' in the manifest) check_ram_server.addr
check_command check_nrpe_ram
host_name server.addr
service_description ram
use generic-service
}
/etc/nrpe.d/nrpe-check_ram
# Configuration for check_ram (from the generic template)
command[check_ram]=/usr/lib64/nagios/plugins/check_ram -w 10% -c 5%
更新:
我已按照自述文件中的说明将 Nagios 用户添加到 sudoers,但尚未测试以 Nagios 用户身份运行检查。此操作失败,因为 sudoers 列表中允许的路径不正确(我的插件在 Lib64 中),而且 NRPE 在我的系统上以 nrpe 用户身份运行。
我修正了 sudoers,以向 nrpe 用户授予正确文件夹的 nopasswed sudo,并添加了一个 nrpe shell,以便我可以以该用户身份进行测试(它被设置为 nologin)
bash-4.1$ whoami
nrpe
bash-4.1$ /usr/lib64/nagios/plugins/check_puppet
UNKNOWN: last_run_summary.yaml not found, not readable or incomplete
bash-4.1$ exit
exit
[root@ip-10-185-165-196 plugins]# ps auxww | grep nrpe
nrpe 16353 0.0 0.0 41320 1364 ? Ss 23:33 0:00 /usr/sbin/nrpe -c /etc/nagios/nrpe.cfg -d
root 16814 0.0 0.0 103236 856 pts/0 S+ 23:53 0:00 grep nrpe
[root@ip-10-185-165-196 plugins]#
在nagios服务器上:
[root@puppet-master plugins]# ./check_nrpe -H <myserver> -t 15 -c check_puppet
CRITICAL: Puppet daemon not running or something wrong with process
我正在运行 CentOS 6.5 的最小安装
我使用以下命令禁用了 requiretty:
Defaults:nrpe !requiretty
更新 3:
看来 SELinux 是罪魁祸首。setenforce 0 解决了这个问题。$setenforce 0
答案1
正如 yoonix 指出的那样,插件本身在第 36-38 行非常清楚:它只是核心插件的包装器,并且该核心插件需要以 root 身份运行。这就是为什么当您以 root 身份运行时它工作正常的原因。包装器将通过提升权限sudo
;它被设置为执行sudo
本身,但您需要提供适当的sudo
权限。
假设您nrpe
以用户身份运行nagios
,插件会提示您需要在sudoers
文件中添加以下行:
nagios ALL=NOPASSWD:/usr/bin/puppet,/usr/lib/nagios/plugins/check_puppet_agent,/bin/kill
(我不确定为什么它需要/bin/kill
,但是它说它需要,所以你最好授予它,否则插件可能会以有趣且记录不足的方式失败。)
您没有告诉我们您的操作系统(如果是 Linux,则为发行版)是什么;如果是 CentOS 并且您使用的是 RPMforge nrpe
,它将以用户 的身份运行nagios
。您需要找出您以哪个用户身份运行,并将该用户替换为上面一行中的nrpe
前导。nagios
sudoers