You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Nagios主机不可达时禁用服务检查的配置问询

解决Nagios主机宕机时服务监控误报的方案

作为常年和Nagios打交道的老运维,我太懂你说的这种烦人的情况了——主机一挂,所有服务监控齐刷刷变红,控制台全是告警,根本分不清到底是主机问题还是服务本身出故障。下面给你几个经过生产环境验证的可行方案,按推荐程度排序:

方案1:主机依赖关系(最推荐,配置简单)

这是Nagios官方提供的原生解决方案,核心思路是让所有属于该主机的服务依赖主机的存活状态。当主机被check-host-alive检测为DOWN/UNREACHABLE时,Nagios会自动跳过该主机上所有服务的检查,自然不会产生一堆无用告警。

配置步骤:

在你的Nagios配置文件(比如hostdependencies.cfg)中添加如下定义:

host_name               你的目标主机名  # 被依赖的主机(就是你监控的那台服务器)
    dependent_host_name     你的目标主机名  # 依赖方:这里因为服务属于该主机,所以依赖自身的存活状态
    execution_failure_criteria n  # n代表主机处于非UP状态(DOWN/UNREACHABLE)时,跳过依赖项的检查
    notification_failure_criteria n  # 同时禁用服务的通知,避免收到服务告警
}

配置完成后,重启Nagios生效。以后主机宕机时,该主机下的所有服务都会显示为“依赖状态未满足”,不会执行检查也不会发告警。

方案2:服务依赖关系(精细控制)

如果你不想让所有服务都依赖主机存活,只想针对特定几个服务做配置,可以用服务依赖。比如某些服务即使主机宕机也需要监控(不过这种场景很少见),或者你想单独控制某几个服务的依赖逻辑。

配置步骤:

在servicedependencies.cfg中为每个需要依赖的服务添加定义:

host_name               你的目标主机名
    service_description     check-host-alive  # 依赖的服务:主机存活检测
    dependent_host_name     你的目标主机名
    dependent_service_description  CPU使用率  # 需要被控制的服务名称
    execution_failure_criteria n
    notification_failure_criteria n
}

重复这个配置块,把所有需要依赖的服务都加进去就行。这个方案适合精细化管理,但配置量会大一些。

方案3:自定义事件处理器(灵活度最高)

如果上面两种原生方案满足不了你的需求(比如你需要在主机宕机时执行额外操作,比如暂停相关的自动化任务),可以用事件处理器。核心逻辑是:当主机被检测为DOWN时,执行一个自定义脚本,通过Nagios的命令管道禁用该主机下的所有服务监控;当主机恢复时,再执行脚本启用服务监控。

配置步骤:

  1. 编写事件处理脚本(比如/usr/local/nagios/libexec/host_down_handler.sh):
#!/bin/bash
HOSTNAME=$1
CMD_PATH="/var/lib/nagios/rw/nagios.cmd"

# 获取当前主机的所有服务名称
SERVICES=$(grep -A5 "host_name $HOSTNAME" /etc/nagios/conf.d/services.cfg | grep "service_description" | awk '{print $2}')

# 根据主机状态执行对应操作
if [ "$NAGIOS_HOSTSTATE" = "DOWN" ]; then
    # 禁用所有服务检查
    for SERVICE in $SERVICES; do
        echo "[`date +%s`] DISABLE_SVC_CHECK;$HOSTNAME;$SERVICE" > $CMD_PATH
    done
elif [ "$NAGIOS_HOSTSTATE" = "UP" ]; then
    # 恢复所有服务检查
    for SERVICE in $SERVICES; do
        echo "[`date +%s`] ENABLE_SVC_CHECK;$HOSTNAME;$SERVICE" > $CMD_PATH
    done
fi
  1. 给脚本添加执行权限,并确保Nagios用户能读写nagios.cmd:
chmod +x /usr/local/nagios/libexec/host_down_handler.sh
chown nagios:nagios /usr/local/nagios/libexec/host_down_handler.sh
  1. 在主机定义中添加事件处理器:
host_name               你的目标主机名
    ...
    event_handler           host_down_handler.sh!你的目标主机名
    event_handler_enabled   1
}
  1. 重启Nagios生效。

注意事项:

  • 脚本中的服务配置路径要根据你的实际环境修改
  • 确保nagios.cmd的权限正确(通常是srw-rw----,属主nagios:nagios)

总结

  • 优先用主机依赖,配置简单,维护成本最低,完全满足你的需求
  • 有精细化控制需求时用服务依赖
  • 需要额外操作时用事件处理器

内容的提问来源于stack exchange,提问作者Amperclock

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 08:23:20