简介:
服务和主机依赖是nagios高级行为,它允许你利用主机和服务的状态来控制主机和服务。以下我将解释依赖报警是怎么工作以及主机和服务依赖之间的不同。
一、服务依赖概述
你需要知道的服务依赖的事情:
1.一个服务可以依赖于一个或者多个其他服务
2.一个服务可以依赖于不在同一个主机上的服务。
3.服务依赖不能继承除非特殊配置
4.服务依赖可以在不通情况下压制服务检测和服务通知
5.服务依赖可以定义一定时间内有效
定义服务依赖
首先,最基础的事情是在objects配置文件中增加一个服务依赖。在你指定的依赖服务中定义压制执行失败或者通知失败的状态。
你可以给个服务创建多个依赖,但你必须为你创造的每个依赖,添加定义一个单独的服务依赖的。
以下举例说明服务依赖:
下边这个图展示该例子服务的通知和执行依赖的逻辑结构。不同的服务都要依赖于其他服务通告和检查执行
在这个例子中,定义一个主机C的服务F依赖关系:
define servicedependency{
host_name HostB
service_description ServiceD
dependent_host_name HostC
dependent_service_description ServiceF
execution_failure_criteria o
notification_failure_criteria w,u
}
define servicedependency{
host_name HostB
service_description ServiceE
dependent_host_name HostC
dependent_service_description ServiceF
execution_failure_criteria n
notification_failure_criteria w,u,c
}
define servicedependency{
host_name HostB
service_description ServiceC
dependent_host_name HostC
dependent_service_description ServiceF
execution_failure_criteria w
notification_failure_criteria c
}
上面图中其他的依赖定义如下:
define servicedependency{
host_name HostA
service_description ServiceA
dependent_host_name HostB
dependent_service_description ServiceD
execution_failure_criteria u
notification_failure_criteria n
}
define servicedependency{
host_name HostA
service_description ServiceB
dependent_host_name HostB
dependent_service_description ServiceE
execution_failure_criteria w,u
notification_failure_criteria c
}
define servicedependency{
host_name HostB
service_description ServiceC
dependent_host_name HostB
dependent_service_description ServiceE
execution_failure_criteria n
notification_failure_criteria w,c
}
怎样测试服务依赖哪?
在nagios在执行一个服务检测和发送一个服务通知之前,nagios会检查一下该服务是否存在依赖关系。如果该服务没有任何依赖关系,
那么nagios将正常检测和通知。如果该服务有一个或者多个依赖关系,那么nagios将按照依赖规则检查依赖:
1.nagios取得该服务所依赖服务当前所有状态
2.nagios 拿被依赖服务的当前状态与执行或者通知失败的选项对比。
3.如果当前的被依赖的服务状态与失败选项中的其中一个匹配,那么这个依赖关系已经失败并且nagios将打破这个依赖检查循环
4.如果当前的被依赖的服务状态与失败选项中的任何一项都不匹配,那么依赖通过,nagios将一如既往的检查下一个依赖关系。
直到该服务的所有依赖被检查或者其中一个依赖失败这个循环检查才停止。
注意:
一个重要的事情需要注意,默认情况下,Nagios将使用被依赖服务的当前硬状态。
如果你想使用当前服务的状态(不论其软、硬态),请使用soft_state_dependencies选项。
执行依赖======》
执行依赖用来限制服务的主动检查,被动检查不受限制。
如果所有的执行依赖检查都通过了,那么nagios将像正常一样检查该服务。即使有一个执行依赖失败,
那么Nagios将暂时阻止执行检查(依赖)服务.直到将来所有的执行依赖都共通过检测,这时,nagios将再次开始检查。
以上例子中 如果Service B 的状态是WARNING or UNKNOWN 中的一种,那么service E的执行依赖将失败。
通知依赖===========》
如果该服务的所有通知依赖都检查通过,nagios正常发送通知。即使有一个通知依赖失败,那么nagios也将暂时抑制该服务的
通知。将来该服务的所有的通知依赖都通过检测了,nagios将开始恢复正常的通知策略。
以上的例子中 如果 Service C 处于 CRITICAL 状态,或者 Service D处于WARNING 或者 UNKNOWN 状态,
或者是Service E 处于 WARNING,UNKNOWN,or CRITICAL状态
那么 Service F 的通知依赖失败。这种情况下,这个服务的通知将不可能被发送出去。
依赖的继承=========>
就像上边说的一样,服务依赖默认是不能继承的。上边的例子可以看到 Service F依赖Service E,
然后他们不能够自动进程 Service E与 ServiceB和C的依赖关系。为了能使Service F与C产生依赖关系,
还需要添加一个F到C的依赖。这里没有定义F与B的依赖,那么F的服务将于B没有依赖关系。
如果你真想让服务依赖产生继承,你必须使用inherits_parent指令在服务依赖的定义。当这个指令开启的时候,它指示表示依赖关系
被继承下拉。换句话说,主服务依赖的其他的和任何其他的依赖都失败的情况下,依赖也将失败。
就上边的例子讲,你想创建一个F与A之间的依赖。你可以创建一个依赖指定F 作为一个依赖服务并且指定A为一个主服务。
你可以修改D和F的服务的依赖的定义如下:
define servicedependency{
host_name HostB
service_description ServiceD
dependent_host_name HostC
dependent_service_description ServiceF
execution_failure_criteria o
notification_failure_criteria n
inherits_parent 1
}
因为inherits_parent指令开启,所以A和D之间的依赖关系测试通过后,才会进行F和D之间的检查。
依赖关系可以被多层继承。
(注释:
define servicedependency{
dependent_host_namehost_name
dependent_hostgroup_namehostgroup_name
dependent_service_descriptionservice_description
host_name host_name
hostgroup_namehostgroup_name
service_descriptionservice_description
inherits_parent [0/1]
execution_failure_criteria[o,w,c,p,n] o是在OK状态下失败.w是WARNING u是unknow,c是CRITICAL p是 pending state 未检查状态 n是none
notification_failure_criteria[o,n]
dependency_periodtimeperiod_name
}
)
二、主机依赖=====================================》
主机依赖和服务依赖很相似,都是不可以继承。主机依赖检查的是宕机 down 和不可达unreache. up
一个主机可以依赖多个。
主机依赖不继承。
主机依赖可以压制执行和通知。
主机依赖可以指定依赖期间。
一下举例----------------------》
define hostdependency{
host_name HostA
dependent_host_name HostC
notification_failure_criteria d
}
define hostdependency{
host_name HostB
dependent_host_name HostC
notification_failure_criteria d,u
}
define hostdependency{dependent_host_name host_namedependent_hostgroup_name hostgroup_namehost_name host_namehostgroup_name hostgroup_nameinherits_parent [0/1]execution_failure_criteria[o,d,n] o是UP状态,d是down状态,u是unreache p是pending 未检测状态notification_failure_criteria [o,n]dependency_period timeperiod_name }