Naemon中check_ldap插件手动正常但Thruk UI显示Critical的问题咨询
排查Naemon中check_ldap插件宏传密码导致Critical告警的问题
从现象判断,手动执行正常但Naemon/Thruk执行时密码验证失败,核心原因是宏传递的密码未正确生效,按以下步骤逐一排查:
1. 检查宏定义与配置权限
- 确认密码宏(如自定义
$LDAP_PASSWORD$或系统宏)的定义文件(通常是/etc/naemon/resource.cfg)格式正确,宏值不要加多余引号:
若写成$LDAP_PASSWORD$=YourActualLDAPPassword$LDAP_PASSWORD$="YourActualLDAPPassword",插件会把引号当成密码的一部分,导致验证失败。 - 检查配置文件权限:确保
resource.cfg权限为600,属主/属组为naemon:naemon,避免Naemon运行用户无法读取宏值。
2. 验证命令定义中的宏引用
- 查看命令配置(如
commands.cfg)中的check_ldap命令,确认密码参数(-P)后的宏引用拼写完全正确(Naemon宏区分大小写):
避免出现宏名拼写错误(比如把define command { command_name check_ldap_custom command_line $USER1$/check_ldap -H $HOSTADDRESS$ -b $ARG1$ -p $ARG2$ -D $ARG3$ -3 -P $LDAP_PASSWORD$ -a $ARG4$ -S }$LDAP_PASSWORD$写成$LDAP_PASSWD$)。 - 不要给宏添加额外引号,除非密码包含空格或特殊字符,此时可尝试用单引号包裹(需测试插件是否支持):
-P '$LDAP_PASSWORD$'。
3. 查看Naemon运行日志定位实际执行命令
- 查看Naemon主日志(
/var/log/naemon/naemon.log),搜索对应服务的检查日志,找到实际执行的命令行,例如:
如果日志中[1699999999] SERVICE CHECK: ldap-server;LDAP Check;CRITICAL;HARD;1;LDAP bind failed: Invalid credentials [1699999999] EXECUTING COMMAND: /usr/lib64/nagios/plugins/check_ldap -H ldap.example.com -b dc=example,dc=com -p 636 -D cn=monitor,dc=example,dc=com -3 -P -a uid -S-P后为空,说明宏未被正确加载;如果显示错误值,检查naemon.cfg中是否包含宏定义文件(如cfg_file=/etc/naemon/resource.cfg)。
4. 以Naemon用户身份测试命令
- 切换到Naemon运行用户,手动执行命令验证环境:
如果执行失败,说明Naemon用户存在权限或环境问题(比如无法访问LDAP端口,需检查防火墙/SELinux规则);如果执行成功,回到宏配置排查。su - naemon -s /bin/bash /usr/lib64/nagios/plugins/check_ldap -H your-ldap-host -b your-base-dn -p your-port -D your-bind-dn -3 -P YourActualLDAPPassword -a uid -S
5. 处理密码中的特殊字符
- 如果密码包含
!@#$%^&*()等特殊字符,需做对应处理:- 对于
$这类shell特殊字符,宏定义中需用反斜杠转义,比如$LDAP_PASSWORD$=Pass\$word123 - 也可以在命令定义中用单引号包裹宏,避免shell解析特殊字符:
-P '$LDAP_PASSWORD$'
- 对于
6. 确认Thruk配置同步
- 修改Naemon配置后,重启Naemon服务:
systemctl restart naemon - 在Thruk UI中刷新配置(通常在「Configuration」菜单下的「Reload」选项),确保Thruk使用最新配置。
内容的提问来源于stack exchange,提问作者Anniya
相关产品推荐
相关产品推荐

