监控系统Nagios系列(八) 抖动(falpping)检测和处理

所谓抖动,是指状态在一定时间内变化过于频繁。如果某个对象处于抖动状态,那么这时候的状态变化也是无意义的。

Nagios提供了抖动状态的检查以及针对抖动状态的处理。

1.判定抖动状态

抖动是由于状态变化过于频繁导致,但是该如何定义“频繁”?每次检查得到的状态都与上次不一样?还是一定时间内状态变化达到某个阈值?这个确实很难有统一的标准。

Nagios通过统计状态变化的频度,与用户配置的阈值比对,来判定是进入还是退出抖动状态。
Nagios在其对象配置定义中,提供了Host和Service进入、退出抖动的阈值。Nagios的全局配置项low_host_flap_threshold,high_host_flap_threshold,low_service_flap_threshold,high_service_flap_threshold 分别定义Host和Service的退出和进入抖动状态的阈值。
具体的Host和Service的配置项是low_flap_threshold,high_flap_threshold。

Nagios统计状态变化频度的方法大概描述为:

  • 存储Host或Service的21检查结果
  • 分析21次检查结果种状态变化次数
  • 统计状态变化的频率
  • 比对变化频率与抖动阈值,确定是进入还是退出

Nagios计算抖动频率的方法就是:(状态变化次数/状态可能的变化次数)*100 。但是Nagios对状态变化次数有一个权重,21次检查结果中,近期的状态变化权重比远期的高。(关于权重这点实际上意义不大,如果需要更接近当前状态,可以把21次缩短,然后增加retry,类似soft和hard状态变化,这样更准确)。

2.判定抖动的例子

下面图中有21次检查,OK状态的是绿色,WARNING状态的是黄色,CRITICAL状态的是红色。
image
图中总共有20次可能状态发生变化,也就是最大只有20次状态变化,实际上有7次状态变化,那么理论上状态变化的频度为:(7/20)*100 = 35%。
但是考虑到权重,实际要比35%小。
然后用这个频度与配置的阈值比较:如果大于阈值上限,那么判定进入抖动状态;如果小于下限,那么判定退出抖动状态。

3.Service的抖动检测
Service的抖动检测与上面例子一致无差异。

4.Host的抖动检测
Host的抖动检测比Service要复杂。因为Host可以不配置check_command(也可以配置),也就是说Host本身允许没有检查的command,Host的状态都是由它上面的Service得到的。
所以,Host的抖动检测,除了上面的Service逻辑外,还需要增加逻辑:

  • 每次检测Host(Host配置了check_command),active和passive检查类型不区分。
  • 每次检测Service的状态时候,判断当前时间距离上次抖动检测是否过了X秒。X的值是该Host上所有Service检测周期平均值。这么做就是为了适应Host上没有配置check_command的场景。

5.抖动的处理
进入抖动状态的处理:

  • 记录日志
  • 发送进入抖动的通知
  • 屏蔽其他状态变化通知

退出抖动的处理:

  • 记录日志
  • 发送退出抖动的通知
  • 清除通知屏蔽

转载请注明:运维派 » 监控系统Nagios系列(八) 抖动(falpping)检测和处理

0
3.0k
0