【最佳实践】无数据告警配置-阿里云(云淘科技)

背景

在对SLS的Logstore和Metricstore进行监控的过程中,有时候会出现一些无数据的情况,例如

  • 数据采集阶段出现故障

Logtail采集异常、数据导入任务异常或者SDK写入数据出错等情况都有可能导致日志库中没有数据。

  • 业务系统出现问题

例如用户的业务日志中有某个系统模块的日志,在一段时间内,由于该系统模块出现故障,导致没有日志产生,从而在SLS的日志库中也没有相关的日志数据。

  • 服务器宕机

SLS也可以采集和存储指标类数据,如果被采集指标的服务器出现宕机的情况,那么就会导致时序库中出现没有数据的情况。因此,监控SLS的存储库中无数据的情况,是保证数据成功上传到SLS的一个重要手段,本文将介绍无数据告警的常见配置方法。

操作步骤

方法一SLS提供了无数据告警这个高级功能,当创建一个监控规则时,可以选择开启该功能,当查询分析语句执行的结果为空时就会触发无数据的告警。无数据告警的标注可以单独配置,并且当有数据时,依然走的是评估触发条件的逻辑,因此,开启这个功能后,不会影响原有的告警监测内容,只是在无数据时单独执行了一条逻辑。

  • 查询语句

在Metric库中选择时间范围为5分钟(相对),执行如下PromQL语句,查询5分钟内服务器的CPU使用率。cpu_util{hostname=”hostname0″}image.png

  • 告警监控规则

基于上述语句的查询结果创建告警,检查频率设置为固定间隔1分钟,触发条件设置有数据匹配value > 80,表示当CPU使用率超过80%就会触发该告警。在高级配置中开启无数据告警,参考创建日志告警监控规则,严重度设置为中,表示当没有CPU的指标数据上传到SLS触发无数据告警。image.png

  • 通知内容

当CPU的指标数据1分钟内没有上传到SLS时,就会触发无数据告警,钉钉群中的通知内容如下所示。image.png方法二本方法不用开启无数据告警,而是创建一个专门用于监测是否有数据的告警。

  • 查询语句

选择时间范围为15分钟(相对),执行如下语句,查询15分钟内的日志条数。* | select count(*) as cnt

  • 告警监控规则

基于上述语句的查询结果创建告警监控规则,设置触发条件有数据匹配cnt===0image.png

  • 告警通知

当日志库中15分钟内没有日志写入的时候,就会触发该告警,钉钉群中的告警通知如下。image.png

常见问题

通过设置有特定条数据满足一定条件来表示无数据告警想要创建无数据告警的时候,用户因为不知道有无数据告警这个高级功能开关,所以直接将触发条件设置成有特定条数据等于0来表示无数据的情况。(同样的还有设置为有特定条数据小于等于0有特定条数据小于1等情况) image.png在无数据的情况下,告警监控并不会走到判断有特定条数据这个评估逻辑中,只会去判断有没有开无数据告警这个功能,因此无数据的情况下上述的触发条件并不会触发告警。开启无数据告警,没数据也没有触发告警如果有分析语句,并且开启了无数据告警功能,那么在无数据的情况下也是有可能不会触发告警的。例如查询分析语句如下所示:error | select count(*) as cnt这种情况下如果没有数据,那么这条语句执行的结果其实是不为空的,而是会有一条结果,如下所示:[
{
“cnt”: 0
}
]因此就不会去判断是否开启了无数据告警这个功能,也就不会触发无数据告警了。

参考文档

  • 创建日志告警监控规则
  • 无数据告警​

发表评论