Nagios:使用 nrpe 执行插件产生的结果与本地运行的结果不同

Nagios:使用 nrpe 执行插件产生的结果与本地运行的结果不同

我正在尝试添加 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前导。nagiossudoers

相关内容