通过Zabbix监控业务数据(续)

昨天配置好报警条件之后,今天早上检查发现昨天晚上发出了报警。但是看上去像是误报。
在凌晨2:44:02触发了警报,然后在2:44:32警报解除,持续时间30秒。如下两图:

从感觉上像是误报。

1. 误报排除

1.1 报警条件

昨天设置好的报警条件如下:

  1. CODE_ALL、CODE_100在最近30秒钟有数据;
  2. 最近300秒(5分钟)CODE_ALL总计大于30;
  3. CODE_100/CODE_ALL<0.7

1.2 收到的数据

要确定报警是否正确,就需要查看当时收到的数据情况。所以从Zabbix的最新数据(Latest Data)中查看最近收到的数据。找到的数据如下:
首先是ERROR_CODE_100的数据:

然后看ERROR_CODE_ALL的数据:

1.3 疑问

按照之前的条件来说,表达式处理的数据应该是从2:40到2:44这5分钟的数据,也就是(2+3+6+4+6)/(2+5+7+5+7)=80%,明显不符合要求啊,怎么会报警呢?

但是仔细一看,原来是这样啊!在这5分钟之前CODE_ALL收到的最后一条数据时间是2:39:02,按照300秒的时间跨度,这一条记录也是符合表达式要求的。所以实际上进行运算的表达式变成了:(2+3+6+4+6)/(2+5+7+5+7+6)=65.6%。这样确实就触发了警报。

1.4 解决

使用300秒这种时间跨度会出现多使用一条数据的情况,这是一开始没有想到的,对Zabbix的运作机制了解的不够透彻。对于这种时效性要求比较强的报警条件,使用Zabbix还是要比较仔细考虑逻辑是否有漏洞的。
想了想,既然时间跨度不好掌握,可以限制为使用收到的记录条数进行限制。所以最后改成的条件如下,这几天再关注一下是否工作符合预期:

2. 三种模式的示意图

Zabbix Item的类型比较多,理解起来可能有些绕。所以特意画张图,应该会有助于理解的更清楚。

热评文章