如何通过NRPE让Nagios仅在客户端NRPE在线时监控其其他服务?
实现Nagios与NRPE的依赖监控及故障联动
完全可以实现你描述的场景!核心是利用Nagios的**服务依赖(Service Dependencies)**功能,让客户端的所有业务服务检查都依赖于NRPE状态检查,从而实现「NRPE离线时暂停其他服务监控+仅发送NRPE故障通知」的逻辑。下面是具体的实现步骤:
1. 配置NRPE状态检查服务
首先在Nagios服务器上为客户端创建一个专门检查NRPE是否存活的服务。你可以直接用check_nrpe命令本身(如果NRPE离线,该命令会返回CRITICAL状态),或者用check_tcp检查5666端口,这里推荐前者:
服务器端服务定义:
use generic-service # 继承通用服务模板 host_name your-client-host # 替换为你的客户端主机名 service_description NRPE Status check_command check_nrpe!check_ping # 调用NRPE的check_ping插件(只要能连通NRPE即可) check_interval 1 # 1分钟检查一次,比其他服务更频繁 retry_interval 1 notifications_enabled 1 notification_options c,r # 仅在CRITICAL(离线)和RECOVERY(恢复)时发通知 notification_interval 30 # 避免重复刷屏,30分钟重发一次通知 }
2. 配置服务依赖关系
接下来,让客户端的所有其他服务都依赖这个「NRPE Status」服务。这样当NRPE离线时,Nagios会自动暂停这些依赖服务的检查,并且不会发送它们的通知。
服务依赖定义:
host_name your-client-host service_description NRPE Status dependent_host_name your-client-host dependent_service_description * # 匹配该客户端下的所有服务 execution_failure_criteria c,u,p # 当NRPE服务处于CRITICAL/UNKNOWN/PENDING时,不执行依赖服务的检查 notification_failure_criteria c,u,p # 同样状态下,不发送依赖服务的通知 }
3. 验证与调整
- 确认Nagios配置文件中已启用服务依赖:检查
nagios.cfg里的enable_service_dependencies=1(默认是开启的) - 测试NRPE离线场景:手动停止客户端的NRPE服务,观察Nagios是否停止检查其他服务,且仅发送「NRPE Status」的故障通知
- 自定义通知内容:可以修改NRPE Status服务的通知模板,明确告知运维人员「NRPE已离线,该客户端其他服务监控已暂停」
额外注意事项
- 确保客户端NRPE配置文件(
nrpe.cfg)中已添加Nagios服务器的IP到allowed_hosts列表,避免因权限问题导致误判NRPE离线 - 如果客户端有大量服务,也可以按服务组来配置依赖,不用逐个服务设置
内容的提问来源于stack exchange,提问作者Paresh Gandhare
相关产品推荐
相关产品推荐

