如何让Check_MK插件仅运行一次而非按主机实例化?
完全可行!是配置方式没找对路子
你的需求(运行单个全局实例的监控服务)在Check_MK里是完全能实现的,问题出在你用了常规的主机绑定式检查配置——Check_MK默认是按主机维度生成服务的,所以才会每个主机都出现这个服务。下面给你两种靠谱的实现方法:
方法1:用Check_MK原生的「全局服务」功能(推荐)
这是最符合Check_MK设计逻辑的方式,操作起来也简单:
- 先确保你的插件已经放在
/omd/sites/<你的站点名>/local/lib/nagios/plugins/,权限设为nagios:nagios且有执行权限(chmod +x 你的插件名),然后执行cmk -R让Check_MK加载新插件。 - 打开WATO配置界面,走这个路径:Setup > Services > Other services > Global services
- 点击「Add rule」,选择「Check command」类型
- 配置规则时注意这几个关键点:
- 给规则起个好认的名字,比如「全局REST API监控」
- 在「Check command」下拉框里找到你的插件(如果没出现,再跑一遍
cmk -R) - 最关键的「Apply to」部分,选**「All sites」**(或者指定你的目标站点),绝对不要选任何主机相关的匹配条件
- 按需设置检查间隔、告警阈值这些参数
- 保存规则后,点击「Activate changes」生效。
这样配置完,这个监控服务只会在站点层面运行单个实例,不会跟任何主机绑定。
方法2:直接修改Nagios核心配置(适合特殊场景)
如果第一种方法满足不了你的特殊需求,也可以直接操作Nagios的配置文件:
- 新建或编辑
/omd/sites/<你的站点名>/etc/nagios/conf.d/global_rest_api.cfg - 写入类似下面的配置(把占位符换成你的实际信息):
define service { use generic-service host_name localhost service_description 全局REST API监控 check_command 你的插件名!可选参数1!可选参数2 check_interval 5 # 每5分钟检查一次 retry_interval 1 # 告警后每分钟重试一次 }
- 这里用
localhost当占位符是因为Nagios要求服务必须绑定到某个主机,你完全可以把它当成一个"虚拟主机"来用,不会影响实际监控逻辑。 - 配置完后执行
cmk -R和omd restart nagios让配置生效。
为啥你之前的配置会失败?
你之前用的「常规主动&被动监控检查」规则,本质是给匹配的每台主机都生成一个服务实例——这是Check_MK按主机管理监控项的默认逻辑,所以才会每个主机都出现这个服务。你需要的是脱离主机维度的全局服务,自然不能用这种配置方式。
最后提个小提醒:确保你的插件本身是为单实例运行设计的,比如不要依赖主机IP、主机名这类和特定主机绑定的参数哦。
内容的提问来源于stack exchange,提问作者Riley
相关产品推荐
相关产品推荐

