昨天配置好报警条件之后,今天早上检查发现昨天晚上发出了报警。但是看上去像是误报。 在凌晨2:44:02触发了警报,然后在2:44:32警报解除,持续时间30秒。如下两图:
从感觉上像是误报。
1. 误报排除
1.1 报警条件
昨天设置好的报警条件如下:
- CODE_ALL、CODE_100在最近30秒钟有数据;
- 最近300秒(5分钟)CODE_ALL总计大于30;
- 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的类型比较多,理解起来可能有些绕。所以特意画张图,应该会有助于理解的更清楚。