NRPE远程调用check_apt与本地执行结果不一致求助
NRPE远程调用check_apt结果与本地执行不一致的问题
我查过同主题的帖子,但没解决当前问题。我在亚马逊云搭建了Nagios 4服务器,用来监控三个地点的系统。现在正在配置新主机devbox通过NRPE被监控,配置和之前十几台已完成的主机类似,但远程调用check_apt的结果和本地执行的结果完全不一样。
devbox上的NRPE配置
command[check_apt]=/usr/lib/nagios/plugins/check_apt
本地执行check_apt的结果(普通用户或root执行结果一致)
$ sudo /usr/lib/nagios/plugins/check_apt APT OK: 0 packages available for upgrade (0 critical updates). |available_upgrades=0;;;0 critical_updates=0;;;0
Nagios服务器端的监控配置
define host { use linux-server host_name devbox alias DevBox address 192.168.0.30 _PORT 5666 check_command check_ping notifications_enabled 1 notification_period 24x7 notification_options d,u,r contact_groups alert } define service { use generic-service host_name devbox service_description APT Updates check_command check_nrpe_lto!check_apt }
从Nagios服务器远程调用check_apt的结果
$ /usr/lib/nagios/plugins/check_nrpe -H 192.168.0.30 -t 30 -c check_apt APT WARNING: 13 packages available for upgrade (0 critical updates). |available_upgrades=13;;;0 critical_updates=0;;;0
排查与解决办法
- NRPE用户的APT缓存未更新
NRPE默认以nagios用户运行,你本地执行时用了sudo,但nagios用户的APT缓存可能是旧的。先切换到nagios用户验证:
su - nagios -s /bin/bash # 手动更新缓存(若需权限先配置sudo) sudo apt-get update # 再执行check_apt /usr/lib/nagios/plugins/check_apt
如果执行后结果和远程调用一致,说明是缓存问题。可以修改NRPE的check_apt命令,让它先更新缓存再检查:
command[check_apt]=/usr/bin/sudo /usr/lib/nagios/plugins/check_apt
然后在/etc/sudoers里添加nagios用户免密权限:
nagios ALL=(ALL) NOPASSWD: /usr/lib/nagios/plugins/check_apt, /usr/bin/apt-get update
- 检查用户环境下的APT源差异
nagios用户和root用户的APT源配置可能不同,执行以下命令对比:
# 查看nagios用户的源配置 su - nagios -s /bin/bash cat /etc/apt/sources.list /etc/apt/sources.list.d/*.list # 查看root用户的源配置 cat /etc/apt/sources.list /etc/apt/sources.list.d/*.list
如果有差异,统一配置即可。
- NRPE环境变量限制
NRPE运行时可能会限制环境变量,导致check_apt无法正常读取APT状态。在NRPE配置文件中添加环境变量设置:
env[PATH]=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
然后重启NRPE服务:
systemctl restart nrpe
内容的提问来源于stack exchange,提问作者Scott
相关产品推荐
相关产品推荐

