SLS新版告警入门-统一的查询分析语法-阿里云开发者社区

开发者社区> 豁朗> 正文

SLS新版告警入门-统一的查询分析语法

简介: SLS新版告警支持多种监控目标,如SLS的日志存储,时序存储;也支持对外部系统如Promethus,Grafana,Zabbix产生的告警进行管理;在对SLS的存储进行监控时,用户可以自定义告警监控规则或者使用内置的告警规则。自定义告警监控规则主要包括监控目标,触发条件,行动配置等。本文主要介绍在创建自定义告警规则时,如何使用统一的查询分析语法来查询并定义监控目标。
+关注继续查看

前言

SLS新版告警支持多种监控目标,如SLS的日志存储,时序存储;也支持对外部系统如Promethus,Grafana,Zabbix产生的告警进行管理;在对SLS的存储进行监控时,用户可以自定义告警监控规则或者使用内置的告警规则。自定义告警监控规则主要包括监控目标,触发条件,行动配置等。本文主要介绍在创建自定义告警规则时,如何使用统一的查询分析语法来查询并定义监控目标。

image.png

查询分析语法概览

SLS支持可观测性的Log,Metric,Trace的存储,对于不同类型的存储,SLS支持使用统一的查询分析语法来查询分析数据。本文主要介绍下查询日志,查询时序,机器学习等语法。

配置索引

对于SLS中的数据日志服务采用半结构化的数据模式定义一条日志,包含日志主题(Topic)、时间(Time)、内容(Content)、来源(Source)和标签(Tags)五个数据域,其中内容数据域记录了日志的具体内容,有一个或多个内容项组成,每一个内容项为一个键值对(Key:Value)。

对于日志内容中的键值对,只有配置索引后,才能进行查询和分析操作,索引类型主要包括全文索引和字段索引。其区别如下

索引类型说明
全文索引日志服务根据您设置的分词符将整条日志拆分成多个词并构建索引。在查询时,字段名称(KEY)和字段值(Value)都是普通文本。例如查询语句error,表示查询包含error关键字的日志。
字段索引配置字段索引后,您可以指定字段名称和字段值(Key:Value)进行查询,缩小查询范围。例如查询语句level:error,表示查询level字段值包含error的日志。

如果您要使用分析功能,必须配置字段索引且开启对应字段的统计功能。开启统计功能不会产生额外的索引流量和索引存储空间。


在SLS控制台查询页面,可以配置索引,如下示例是nginx的日志索引配置,包括日志中的host,http_referer等字段的索引。

image.png

查询分析语法

基本语法

查询语句|分析语句

SLS的查询分析语法包含两部分,一部分是查询语句,一部分是分析语句,两者之间用小竖线(|)来分隔,查询语法为SLS专有语法,可以参考查询语法;分析语句支持标准的SQL92语法并且包含SLS增强的函数,可以参考分析概述。查询语句和分析语句区别如下:

语句类型说明
查询语句查询语句用于指定日志查询时的过滤规则,返回符合条件的日志。

查询语句可以为关键词、数值、数值范围、空格、星号(*)等。 如果为空格或星号(*),表示无过滤条件。

分析语句分析语句用于对查询结果或全量数据进行计算和统计。


比如需要查询一个nginx的5xx错误的次数,可以使用如下查询语句,其中查询语句用查询status超过500的日志,分析语句是一条标准的SQL聚合语句。

status >= 500 | SELECT count(1) as err_cnt from log


告警监控查询场景

SLS新版告警自定义告警规则完全支持SLS的查询分析语法,通过SLS的查询分析语句,可以根据业务和监控需求,查询出需要监控的数据,然后设置相应的触发条件,来触发告警。

场景1:查询语句

比如在监控Nginx日志时,需要查询5xx的错误日志,并且想要把这些错误相关的日志通过告警发出来,我们可以直接使用status >= 500,查询出来的结果包含错误的request_uri, host,request_method等,这里的字段包含所有的日志索引字段。

image.png

根据上面的查询语句,我们可以直接另存为新版告警,触发条件设置为有数据。告警监控在评估时如果查询到有5xx的错误,就会触发告警。在内容模板中引用${fire_results}或者${fire_results_as_kv}即可展示错误信息。

image.png

场景2:查询语句|分析语句

跟场景1中的例子相似,我们可能在告警中不需要把每个字段都通知出来,只需要最关键的字段比如host,request_method,request_uri,status。这时候我们可以机上分析语句筛选出特定的字段

status >= 500 | SELECT host, request_method, request_uri, status

查询结果示例如下

image.png

在配置告警时,触发条件同样选择有数据,在内容模板中引用${fire_results}或者${fire_results_as_kv}即可展示select后的字段信息。

image.png

场景3:时序数据监控

对于时序数据,SLS支持两种查询方式,SQL查询分析和SQL + PromQL查询分析

SQL查询分析

使用SLS时序存储接入了主机监控。现在查询主机在过去5分钟内的最大和平均CPU使用率,可有使用SQL查询分析,例句如下:

*| SELECT element_at(__labels__, 'hostname') as host_name, max(__value__) as max_cpu_util, avg(__value__) as avg_cpu_util
FROM "ecs-metric.prom" 
WHERE __name__ = 'cpu_util' 
group by element_at(__labels__, 'hostname')

查询结果如图,在配置告警规则时,触发条件可以配置为有数据匹配,条件写avg_cpu_util > 80,即可实现对平均使用率超过80%的主机进行监控,可以使用${fire_results}或者${fire_results_as_kv}引用平均使用率高于80%的主机数据。

image.png

SQL+PromQL方式

SLS支持使用PromQL语法对时序数据进行查询链接,支持5个PromQL函数,promql_query、promql_query_range、promql_labels、promql_label_values和promql_series。


promql_query(string)、promql_query_range(string, string)函数返回的表的结构如下表所示

字段名字段类型说明
metricvarchar时序名称。如果查询分析中使用了Group By语法,那么该值可能为空。
labelsmap<varchar, varchar>Lables信息,Map类型。
timebigint时间。
valuedouble某个时间点对应的值。


这里以promql_query_range函数为例介绍查询CPU使用率高于80%的时序点。告警规则配置为有数据。分组评估选择“标签自动”,即会

* | select promql_query_range('cpu_util') from metrics having value > 80 limit 1000

image.png


场景4:机器学习语法

SLS机器学习功能为您提供多种功能丰富的算法和便捷的调用方式,您可以在日志查询分析中通过分析语句和机器学习函数调用机器学习算法,分析某一字段或若干字段在一段时间内的特征。

接下来以一个异常检测函数ts_predicate_simple为例介绍下查询分析方。

函数格式:

select ts_predicate_simple(x, y, nPred, isSmooth) 

参数说明如下:

参数说明取值
x时间列,从小到大排列。格式为Unixtime时间戳,单位为秒。
y数值列,对应某时刻的数据。-
nPred预测未来的点的数量。long类型,取值大于等于1。
isSmooth是否需要对原始数据做滤波操作。bool类型,默认为true表示对原始数据做滤波操作。


以OSS访问日志为例,查询每30秒的pv波动情况,并找出异常点

 * | select ts_predicate_simple(stamp, value, 6) from (select __time__ - __time__ % 30 as stamp, count(1) as value from log GROUP BY stamp order by stamp) 

如下图,红色圆圈表示通过机器学习算法找到的异常点,对应查找结果中的anomaly_prob=1.0,其中src表示原始值,predict表示预测值,可以在告警规则配置中对这些异常点进行检测。

image.png

告警配置如下:触发条件选择有大于2条数据满足anomaly_prob > 0,表示在过取4小时内,有两个异常点即告警。

image.png


参考

  • SLS查询概述【链接
  • SLS分析概述【链接
  • 查询和分析日志【链接
  • 时序数据查询分析简介【链接
  • 预测与异常检测函数【链接

进一步参考

image

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
对《神奇的C语言》文中例子 5 代码的分析讨论
  在春节前,我曾经参与在《神奇的C语言》一文中的例子(5)的讨论,但限于评论内容的有限,现在本文再次对这个问题单独讨论。(此问题原貌,详见《神奇的C语言》,这里我将原文中的代码稍做轻微改动,并重新给出如下)   原问题给出如下代码:   #include void func1(char a[]) {  //这里的参数 a 为指向数组的指针,因此 &a 和 a 的意义不同(前者为指针变量的地址,后者为指针变量的值)  //&a 表示指针变量的地址。
848 0
React源码分析5 -- 组件通信,refs,key,ReactDOM
React源码系列文章,请多支持: [React源码分析1 — 组件和对象的创建(createClass,createElement)](https://www.atatech.org/articles/72905) [React源码分析2 — React组件插入DOM流程](http://www.atatech.org/articles/72908) [React源码分析3 — React
3641 0
android(cm11)状态栏源码分析(一)
版权声明:您好,转载请留下本人博客的地址,谢谢 https://blog.csdn.net/hongbochen1223/article/details/50216563 (一):写在前面 最近由于工作需要,需要了解CM11中的有关于StatusBar相关的内容。
946 0
[软考考点解析]软件设计师--词法、语法、语义分析
1. 题目 编译过程中进行的语法分析主要是分析____。 A 源程序中的标识符是否合法 B 程序语句的含义是否合法 C 程序语句的结构是否合法 D 表达式的类型是否合法
7 0
CM android的CMUpdater分析(一)
版权声明:您好,转载请留下本人博客的地址,谢谢 https://blog.csdn.net/hongbochen1223/article/details/51123507 (一):写...
648 0
CM android的CMUpdater分析(二)
版权声明:您好,转载请留下本人博客的地址,谢谢 https://blog.csdn.net/hongbochen1223/article/details/51159435 至于为何要在这里讲解android系统源码中的系统更新,我已经在上一篇《 CM android的CMUpdater分析(一)》中介绍了。
872 0
+关注
25
文章
0
问答
来源圈子
更多
阿里云存储基于飞天盘古2.0分布式存储系统,产品包括对象存储OSS、块存储Block Storage、共享文件存储NAS、表格存储、日志存储与分析、归档存储及混合云存储等,充分满足用户数据存储和迁移上云需求,连续三年跻身全球云存储魔力象限四强。
+ 订阅
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载