本文为您介绍监控数据满足报警条件并触发报警,但触发时间晚于预期时间的原因。
首先您需要明确以下两个概念:
监控指标的Period
表示监控指标数据点的间隔时间及聚合时间,例如:大多数监控指标的Period为60秒,表示每60秒产生一个监控指标数据点,这个监控数据是过去60秒所有监控值的聚合值,或最后一个监控值。
报警的检测周期
报警的检测周期由监控指标的Period决定。对于多指标表达式且Period不同的情况,以最短的Period为准,例如:检测周期为60秒,报警服务每60秒会查询最近一次的监控数据。
每个监控指标的聚合方式不同,具体请参见附录1 云产品监控指标中的目标云产品指标列表页面中的Statistics列。
每个监控指标的周期(period)不同,具体请参见附录1 云产品监控指标中的目标云产品指标列表页面中的Min Periods列。
当报警规则中监控指标的Period较长(例如:300秒或900秒)时,由于监控数据可能延迟落盘或监控数据点略早于报警检测时间点,触发报警可能会延迟近一个检测周期。监控指标的Period较短时,一般不会有明显延迟。
应用分组的可用性监控报警和组进程监控报警、云产品监控指标报警、站点监控报警、企业云监控的promQL报警,不论单指标、多指标、复杂的表达式和同比环比等都是有固定阈值的表达式。以下两种情况均以单指标的简单表达式进行介绍。
问题1:周期的监控数据正常上报,数据连续N次满足报警条件,但延迟接近一个周期才触发报警
原因
报警检测的时间点略早于监控数据点,导致报警延迟近一个周期。
示例
假设某监控指标的Period为300秒,那么报警的一个检测周期也是300秒,报警条件是监控指标平均值连续3个周期大于阈值,即报警,监控数据点如下:
时间 | 数值 |
10:01:30 | 5 |
10:06:30 | 15 |
10:11:30 | 14 |
10:16:30 | 13 |
10:21:30 | 20 |
10:26:30 | 18 |
10:31:30 | 16 |
假设10:06:00发生第一次报警检测,该时间略早于监控数据时间点10:06:30,此时查询的监控数据为上个周期的数值5,因此没有达到阈值的监控数据。
第二次检测时间点为10:11:00,查询到监控数据为15,达到阈值,此时数据第一次满足阈值。
第三次检测时间点为10:16:00,查询到监控数据为14,达到阈值,此时数据第二次满足阈值。
第四次检测时间点为10:21:00,查询到监控数据为13,达到阈值,此时数据第三次满足阈值,发送报警通知。
从上述数据来看,用户认为第三次满足阈值的数据应该出现在10:16:30,报警延迟了4分半,接近一个周期。
问题2:监控数据非周期的稀疏上报,报警延迟一个周期
原因
非周期或稀疏上报的监控数据,数据的落盘时间会有延迟。
示例
示例1:假设某个监控指标的周期为300秒或900秒,如果数据较稀疏或非周期上报,则监控数据点最高可能有5分钟的延迟,例如:10:01:00查询10:00:00的数据,结果为空;10:05:00再查询10:00:00的数据,查询有结果。因此报警检测时间点可能拿不到当前数据,导致报警延迟一个周期。
示例2:报警条件是有一次阈值大于10,就会报警,具体报警检测过程如下:
时间 | 报警检测过程 | 数据说明 |
10:45:00 | 查询数据正常返回结果,数值为5,未触发报警。 | - |
11:00:00 | 由于数据稀疏,延迟落盘,导致在该时间未查询到数据,因此认为数据仍然是上个周期的5,未触发报警。 | 假设11:05:00再查询,数据就是10,此时再查看监控数据,认为应该触发报警。 |
11:15:00 | 查询数据正常返回结果,数据为12,触发报警。 | 由于报警检测周期为15分钟,从监控数据看,报警延迟发送15分钟。 |