SLS告警的分组评估最佳实践

前言

监控系统一般包括监控目标(监控实体),监控条件,告警通知,自动修复等系模块,SLS作为云原生观测与分析平台,为Log、Metric、Trace等数据提供大规模、低成本、实时的平台化服务;SLS也提供了丰富的监控告警功能,可以针对在日志/时序/Trace数据中进行配置异常告警,比如在Nginx日志中500错误过多,主机时序数据中CPU超过90%需要告警,在告警发出时,往往需要对问题发生的原因进行追溯,需要知道哪些实体在出现了异常,比如哪个域名500错误过多,哪台主机CPU过高等。本文将介绍通过SLS告警监控中的分组评估功能找出异常的实体。

SLS告警的分组评估最佳实践


接下来就以此为背景来介绍如果使用SLS告警中的分组评估来查找出现异常告警的实体。

SLS告警监控简介

告警监控介绍

SLS告警的分组评估最佳实践

上述为SLS告警监控部分的功能结构,其中左边为监控目标指标:包括日志存储和时序存储等,在日志存储和时序存储中一般会有监控实体的信息,比如nginx日志中会有host字段表示域名,主机时序指标的labels会有hostname和ip等实体信息,通过SLS告警监控的规则中的分组评估,我们可以实现根据不同的实体,发出不同的告警。

分组评估告警效果

SLS告警的分组评估最佳实践

如上图所示,不同的主机CPU信息存储在SLS时序库中,告警规则可以同时对时序库中不同的主机进行监控。下面介绍如何在监控规则中使用分组评估。


SLS告警监控最佳实践

日志类分组评估告警

以Nginx访问日志为例,Nginx日志接入SLS可以参考使用Nginx模式采集日志,日志的字段如下图所示,其中host可以作为监控的实体,比如www.nwg.mock.com可以作为一个域名实体,每个域名背后对应着一个微服务;在日志中可以存储多个域名的访问日志,不同的域名往往意味着不同的业务,不同的开发运维团队,所以不同的业务发生问题时运维团队首先需要定位的就是哪个实体除了问题。

这种情况下,如果按照host来发出告警,就可以很容易的定位到是哪个服务除了问题。

SLS告警的分组评估最佳实践

接下来看下在SLS监控中如何按照host来分组,监控域名下的500错误:

查询分析语句使用

status >= 500 | SELECT host, COUNT(*) as err_cnt GROUP BY host;

SLS告警的分组评估最佳实践

可以查出每个host的5xx错误数,如果在15分钟内错误数大于10就发出告警,并且每个host分开发送,可以在告警规则中这样配置,分组评估选择“标签自定义”,值选择host字段,类似SQL语法中group by的效果。

SLS告警的分组评估最佳实践

告警在评估时会对每个组内的数据进行评估,是否有数据匹配 err_cnt > 10;如果该组的数据有满足err_cnt > 10,则该组可以认为满足触发条件,会产生一条告警;整个告警规则会对每个组的内容进行评估,每个组会对应一条告警。

每个组对应的告警产生的告警属性中的labels中会默认加上分组字段,例如:

labels: {"host": "www.zjn.mock.com"}

时序类分组评估告警

以主机监控时序数据为例,可以使用SLS采集主机监控数据,主要包括CPU,内存,磁盘,网络,TCP等相关指标,使用SLS的promql_range函数查询时序数据,返回的字段主要包括labels,metric, time, value;举例如下:

labels: "{\"hostname\":\"hostname0\",\"ip\":\"192.168.31.246\"}"

metric: "cpu_util"

time: "1635506700000"

value: "52.58"

其中labels字段一般用来表示监控实体,所以对于时序类数据,SLS告警提供了“标签自动”的分组选项,自动设置为labels为分组字段,当满足触发条件时,每个分组都会分开评估是否触发告警。

查询分析语句使用:

* | select promql_query('cpu_util') from metrics limit 1000

告警配置如下:

SLS告警的分组评估最佳实践

监控规则在评估时,会根据按照时序数据中的labels进行分组,然后对每个分组评估是否满足 value > 90,如果满足,将会生成一条告警,告警属性中的labels默认会加上时序中的labels,如:

labels: {"hostname":"hostname0","ip":"192.168.31.246"}

告警属性的标签

在上述的日志或者时序类分组评估,分别触发告警后,生成的告警的labels即为告警属性中的标签,告警属性可以参考文章

SLS告警的分组评估最佳实践

告警属性的标签可以用在告警管理后续的告警策略行动策略的配置。本文主要介绍分组评估的实践,告警属性的用法这里不再赘述。具体可以参考SLS告警的官方文档告警学习路径

分组评估注意事项

分组评估虽然可以实现一套告警规则同时监控多个实体的效果,在支持客户的过程中,会遇到一些客户不恰当的使用分组评估:

选择分组评估字段时,最好选择可以标识监控实体的字段,离散的字段。

例:比如slb或者nginx日志中的host,url等字段,可以用来区分不同的服务,但是request_time字段就不具有区分度,更不能用来标记实体。

使用这样的字段会产生非常多的分组,每个分组对应一个告警,造成告警风暴,这些都是由于配置不合理导致的。

总结

通过文中对分组评估的介绍,分组评估在通过告警信息推导监控实体的过程中起了很大作用,可以对多个监控实体将日志或时序同时写入一个SLS存储中的时候,可以有效的对不同实体进行监控,实现一套规则,多个实体统一监控的目标。

同时在使用分组评估后,产生的告警会自动将分组字段加入到告警属性的标签中,可供后续的告警管理使用。

近期,阿里云也发布了《基于SLS实现统一告警最佳实践》,其中详细介绍了SLS告警的各种用法,包括开放告警/内置规则告警/自定义告警,以及灵活的告警管理策略。


参考

  • 什么是日志服务告警【链接
  • 告警分组评估【链接
  • 使用Nginx模式采集日志【链接
  • 采集主机监控数据【链接
  • 创建告警策略【链接
  • 创建行动策略【链接
  • SLS告警-学习路径【链接
  • 基于SLS实现统一告警最佳实践【链接


进一步参考

SLS告警的分组评估最佳实践

上一篇:nfs服务器安装配置


下一篇:阿里云视频站服务器,使用阿里云来搭建视频直播服务教程