前言
SLS新版告警支持多种监控目标,如SLS的日志存储,时序存储;也支持对外部系统如Promethus,Grafana,Zabbix产生的告警进行管理;在对SLS的存储进行监控时,用户可以自定义告警监控规则或者使用内置的告警规则。自定义告警监控规则主要包括监控目标,触发条件,行动配置等。本文主要介绍在创建自定义告警规则时,如何使用统一的查询分析语法来查询并定义监控目标。
各类设备/系统
VariousEquipments)
叫眶
日志存储
告警管理
通知(行动)管理
告警监控
(Logstore)
(AlertCheck/Monitor)
(ActionManagement)
(AlertManagement)
CA
个!
AI
SearchSQL
检查恢复协同分组评估
升级用户组节假日
分派
抑制去重静默
路由
时序存储
个高
(Metricstore
具
编排资源数据规则库ML巡检
代班WebHK
值班组轮岗化
合并
事务管理
处理人
PromOLSQLAI
N
链路中心规则中心
语音钉钉短信邮件
PrometheusAlert
开放告警
(AIertHub)
GrafanaAlert
9
运维
运营
研发
安全
各类监控系统
(ItOps
(BizOps)
(SecOps)
(DevOps)
ariousMonitoring)
查询分析语法概览
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等字段的索引。
查询分析
Logstore名称
ngnx-acoess-bg
日志聚类
全文索引
大小写敏感
包含中文
分词符
":0007@&OAnlt
指定字段查询
自动生成索引
开启查询
字段名称
别除
开启统计
包含中文
分词符
别名
类型
大小写敏感
bodybytessent
bodybytessent
long
KXXXXXXXXXX
bytessent
long
bytessent
long
connection
connection
long
connectionrequests
connectionrequests
long
contentlength
contentlength
0000o
":20007@&O/Anlttr
contenttype
text
contenttype
"0007@&OAnity
host
text
host
":0007@o/nity
text
hostname
hostname
":20007@&/Anittr
httpreferer
httpreferer
text
http_user_agent
http-user_agent
text
:20007C&O/nltv
httpxforwarded_for
httpx_forwarded_for
text
":000@/Anlttr
查询分析语法
基本语法
查询语句|分析语句
SLS的查询分析语法包含两部分,一部分是查询语句,一部分是分析语句,两者之间用小竖线(|)来分隔,查询语法为SLS专有语法,可以参考查询语法;分析语句支持标准的SQL92语法并且包含SLS增强的函数,可以参考分析概述。查询语句和分析语句区别如下:
语句类型 | 说明 |
查询语句 | 查询语句用于指定日志查询时的过滤规则,返回符合条件的日志。 查询语句可以为关键词、数值、数值范围、空格、星号(*)等。 如果为空格或星号(*),表示无过滤条件。 |
分析语句 | 分析语句用于对查询结果或全量数据进行计算和统计。 |
比如需要查询一个nginx的5xx错误的次数,可以使用如下查询语句,其中查询语句用查询status超过500的日志,分析语句是一条标准的SQL聚合语句。
status >=500|SELECTcount(1)as err_cnt from log
告警监控查询场景
SLS新版告警自定义告警规则完全支持SLS的查询分析语法,通过SLS的查询分析语句,可以根据业务和监控需求,查询出需要监控的数据,然后设置相应的触发条件,来触发告警。
场景1:查询语句
比如在监控Nginx日志时,需要查询5xx的错误日志,并且想要把这些错误相关的日志通过告警发出来,我们可以直接使用status >= 500,查询出来的结果包含错误的request_uri, host,request_method等,这里的字段包含所有的日志索引字段。
status>-500
0
45分45
38分45秒
39分45秒
44分45秒
40分45秒
43分45秒
42分45秒
41分45秒
37分45秒
36分54秒
日志总条数:21查询状态:结果精确
日志聚类
原始日志
统计图表
表格
时间
原始
业向
换行
快速分析
g
摆宋字段
106-2516:50:53
0127.0.0.1
1624611068nginxaccesso
bodybytessent:2721
bodybvtessent
host:oss.aliyun.com
host
http-referer:wwo.ju.mock.com
时m3.mmto
httpreterer
http-x_forwarded_tor:110.196.41.22
httpuseragent
remote-addr:123.73.236248
remoteuser:9krj7
httpxforwarded_for
reguestlength:4262
remoteaddr
reguestnethod:GET
remote_user
request-time:12
requesturt:/request/path-i/file-5
requestlength
status:501
requestmethod
timeLocal:25/Jun/2021:08:50:53
upstrean_response-time:0.69
requesttime
根据上面的查询语句,我们可以直接另存为新版告警,触发条件设置为有数据。告警监控在评估时如果查询到有5xx的错误,就会触发告警。在内容模板中引用${fire_results}或者${fire_results_as_kv}即可展示错误信息。
规则名称:
13/64
Nginx5xx错误监控
分钟
检宣频率:
固定间隔
15
Q
查询统计:
添加
500
status
15分钟(相对)
不分组
分组评估:
?
有数据
触发条件:
场景2:查询语句|分析语句
跟场景1中的例子相似,我们可能在告警中不需要把每个字段都通知出来,只需要最关键的字段比如host,request_method,request_uri,status。这时候我们可以机上分析语句筛选出特定的字段
status >=500|SELECT host, request_method, request_uri, status
查询结果示例如下
status>500SELECTHotmeu
3.2
56分15秒
50分15秒
49分17秒
54分15秒
53分15秒
51分15秒
52分15秒
55分15秒
日志总条数:21查询状态:结果精确扫描行数:21查询时间:113ms结果行
原始日志
统计图表
日志聚类
123
年:
下载日志
添加到仪表盘
创建ScheduledSQL
预览图表
requesturl
host
requestmethod
status
Q
POST
lrequest/path-2/file-2
501
sls.alilyun.com
POST
501
lrequest/path-o/rile-4
www.allyun.com
GET
500
oss-test.aliyun.com
lrequest/path-o/file-9
GET
500
lrequest/path-3/ile-7
www.aliyun.com
GET
501
request/path-o/file-8
oss-test.aliyun.com
GET
500
lreguest/path-2/file-8
www.aliyun.com
GET
501
lrequest/path-o/file-8
oss.aliyun.com
GET
500
sls.allyun.com
lrequest/path-2/rile-2
GET
501
test.aliyun.com
lrequest/path-1/file-7
在配置告警时,触发条件同样选择有数据,在内容模板中引用${fire_results}或者${fire_results_as_kv}即可展示select后的字段信息。
规则名称:
13/64
Nginx5xx错误监控
固定间隔
分钟
检查频率:
15
查询统计:
添加
status>500SELECThotm
15分钟(相对)
分组评估:
不分组
触发条件:
有数据
场景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'groupby element_at(__labels__,'hostname')
查询结果如图,在配置告警规则时,触发条件可以配置为有数据匹配,条件写avg_cpu_util > 80,即可实现对平均使用率超过80%的主机进行监控,可以使用${fire_results}或者${fire_results_as_kv}引用平均使用率高于80%的主机数据。
ecs-metric
1*SELECT
stCLemnteCiabetsh
asavg-cpu-util
123
98
添加到仪表盘
下载日志
创建ScheduledSQL
预览图表
Q
Q
avg_cpuutil
hostname
max_cpuutil
Q
569.1
66.61
hostnameo
62.93
484.1
hostname1
hostname2
485.0
94.99733333333333
46.004
261.7
hostname4
58.43
31.197333333333338
hostname3
51.349333333333337
hostname5
244.3
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)函数返回的表的结构如下表所示
字段名 | 字段类型 | 说明 |
metric | varchar | 时序名称。如果查询分析中使用了Group By语法,那么该值可能为空。 |
labels | map<varchar, varchar> | Lables信息,Map类型。 |
time | bigint | 时间。 |
value | double | 某个时间点对应的值。 |
这里以promql_query_range函数为例介绍查询CPU使用率高于80%的时序点。告警规则配置为有数据。分组评估选择“标签自动”,即会
*|select promql_query_range('cpu_util')from metrics having value >80limit1000
规则名称:
主机CPU监控
7/64
固定间隔
检查频率:
分钟
15
查询统计:
添加
seLectpromql-query-rangeuutmin
limit1000
15分钟(相对)
分组评估:
标签自动
有数据
触发条件:
场景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__ %30as stamp,count(1)as value from log GROUPBY stamp orderby stamp)
如下图,红色圆圈表示通过机器学习算法找到的异常点,对应查找结果中的anomaly_prob=1.0,其中src表示原始值,predict表示预测值,可以在告警规则配置中对这些异常点进行检测。
告警配置如下:触发条件选择有大于2条数据满足anomaly_prob > 0,表示在过取4小时内,有两个异常点即告警。
规则名称:
12/64
OSS访问PV异常点检查
小时
固定间隔
检查频率:
?
你?
查询统计:
添加
Selecttpredicateimm
time----time_%30asstampcuom
BYsTamporDerbysTamP)
4小时(相对)
分组评估:
不分组
条
有特定条数据匹配
触发条件:
anomalyprob2o
参考
进一步参考
- SLS(日志服务)云原生观测分析平台:https://www.aliyun.com/product/sls
- SLS新版告警文档首页:https://help.aliyun.com/document_detail/207609.html
- 欢迎扫群加入阿里云-日志服务(SLS)技术交流(集团同学请直接搜索群号11702236加入), 获得第一手资料与支持
- 后续系列直播与培训视频会同步到B站,敬请留意