有时候,一台主机的可用性取决于另一台主机。例如,如果一台路由设备宕机,则路由设备后端的服务器全部会变得无法访问。如果这两者都设置了触发器,你可能会收到关于这两者宕机的报警,而事实上只有路由设备是真正存在故障的。
这就是主机之间某些依赖关系可能有用的地方,依赖关系设置的通知可能会被抑制,而只发送根本问题的通知。
虽然Zabbix不支持主机之间的直接依赖关系,但是它们可以定义另外一种更加灵活的方式——触发器依赖关系。一个触发器可能有多个依赖于它的触发器。
所以在上面提到的例子中,我们打开服务器的触发器配置的窗口,并设置依赖于路由设备的相应触发器。有了这样的依赖关系,只要它所依赖的触发器处于“PROBLEM”状态,服务器触发器就不会改变状态,因此不会执行依赖的动作,同时也不会发送通知。
如果路由设备和服务器同时宕机,如果有依赖关系,那么Zabbix将不会执行服务器的触发动作。
如果当前触发器所依赖的触发器的状态从“PROBLEM”变更为“UNKNOWN”,那么则不会执行这个依赖触发器的动作。
值得注意的是,如果触发器所依赖的触发器被禁用、监控项,甚至主机被禁用,则依赖触发器的事件/动作将不会被抑制。
同样的
要定义触发器依赖,打开触发器configuration form的Dependencies选项卡,在“Dependencies”选项卡点击Add进行添加,并选择所依赖的一个或多个触发器。
点击Update更新,就可以看到所依赖的触发器列表。
例如, 主机的前面有Router1,Router2的前面有Router1。
如果Router1宕掉,那么很明细那Host和Router2就不可达了,但我们并不想收到关于Host、Router1和Router2宕掉的这三个通知。
于是我们定义了如下两个依赖关系:
'Host is down' trigger depends on 'Router2 is down' trigger
'Router2 is down' trigger depends on 'Router1 is down' trigger
在改变“Host is down”触发器的状态之前,Zabbix将会检查相应触发器的依赖关系,如果找到,并且一个触发器处于“Problem”状态,则触发器状态将不会发生改变,因此不会执行actions动作,也不会发出相应的通知。
Zabbix递归执行此检查,如果Router1或Router2是不可达的状态,那么Host触发器则不会更新。