背景
在对SLS的Logstore和Metricstore进行监控的过程中,有时候会出现一些无数据的情况,例如
- 数据采集阶段出现故障
Logtail采集异常、数据导入任务异常或者SDK写入数据出错等情况都有可能导致日志库中没有数据。
- 业务系统出现问题
例如用户的业务日志中有某个系统模块的日志,在一段时间内,由于该系统模块出现故障,导致没有日志产生,从而在SLS的日志库中也没有相关的日志数据。
- 服务器宕机
SLS也可以采集和存储指标类数据,如果被采集指标的服务器出现宕机的情况,那么就会导致时序库中出现没有数据的情况。
因此,监控SLS的存储库中无数据的情况,是保证数据成功上传到SLS的一个重要手段,本文将介绍无数据告警的常见配置方法。
操作步骤
方法一
SLS提供了无数据告警这个高级功能,当创建一个监控规则时,可以选择开启该功能,当查询分析语句执行的结果为空时就会触发无数据的告警。无数据告警的标注可以单独配置,并且当有数据时,依然走的是评估触发条件的逻辑,因此,开启这个功能后,不会影响原有的告警监测内容,只是在无数据时单独执行了一条逻辑。
- 查询语句
在Metric库中选择时间范围为5分钟(相对),执行如下PromQL语句,查询5分钟内服务器的CPU使用率。
cpu_util{hostname="hostname0"}
- 告警监控规则
基于上述语句的查询结果创建告警,检查频率设置为固定间隔1分钟,触发条件设置有数据匹配value > 80,表示当CPU使用率超过80%就会触发该告警。在高级配置中开启无数据告警,参考创建日志告警监控规则,严重度设置为中,表示当没有CPU的指标数据上传到SLS触发无数据告警。
- 通知内容
当CPU的指标数据1分钟内没有上传到SLS时,就会触发无数据告警,钉钉群中的通知内容如下所示。
方法二
本方法不用开启无数据告警,而是创建一个专门用于监测是否有数据的告警。
- 查询语句
选择时间范围为15分钟(相对),执行如下语句,查询15分钟内的日志条数。
* | select count(*) as cnt
- 告警监控规则
基于上述语句的查询结果创建告警监控规则,设置触发条件为有数据匹配cnt===0。
- 告警通知
当日志库中15分钟内没有日志写入的时候,就会触发该告警,钉钉群中的告警通知如下。
常见问题
通过设置有特定条数据满足一定条件来表示无数据告警
想要创建无数据告警的时候,用户因为不知道有无数据告警这个高级功能开关,所以直接将触发条件设置成有特定条数据等于0来表示无数据的情况。(同样的还有设置为有特定条数据小于等于0、有特定条数据小于1等情况)
在无数据的情况下,告警监控并不会走到判断有特定条数据这个评估逻辑中,只会去判断有没有开无数据告警这个功能,因此无数据的情况下上述的触发条件并不会触发告警。
开启无数据告警,没数据也没有触发告警
如果有分析语句,并且开启了无数据告警功能,那么在无数据的情况下也是有可能不会触发告警的。例如查询分析语句如下所示:
error | select count(*) as cnt
这种情况下如果没有数据,那么这条语句执行的结果其实是不为空的,而是会有一条结果,如下所示:
[
{
"cnt": 0
}
]
因此就不会去判断是否开启了无数据告警这个功能,也就不会触发无数据告警了。