配置告警策略

最近更新时间:2024-08-23 10:01:01

我的收藏

操作场景

基于日志或指标配置告警策略,在出现符合特定条件的日志或指标时发送告警,例如 error 日志数量过多、接口响应时间过长等。

前提条件

数据已上传到日志或指标主题。
日志主题已 配置索引,且不支持 低频存储

操作步骤

登录日志服务控制台,并进入 告警策略 管理页面,在左上角单击新建,配置如下主要信息。

1. 基本信息

告警策略名称:字符长度为1至255个字符。
启用状态:是否启用当前告警策略,告警策略不启用时不产生任何告警及通知。
标签:为当前创建的告警策略设定标签,便于从不同维度对资源分类管理。

2. 监控对象

选择需要监控的日志或指标主题,支持两种选择方式:
所有执行语句使用相同的监控对象(默认):支持多选,最多可选择20个主题,不支持跨地域。每个主题单独判断是否满足触发条件,同时有多个主题满足触发条件时将同时产生多条告警。
在每个执行语句中单独选择监控对象:可为每个执行语句单独设置主题,单选,不支持跨地域。每个执行语句的结果合并在一起判断是否满足触发条件。例如A 主题错误日志数 + B 主题错误日志数 > 10时触发一条告警。

3. 监控任务

执行语句:作用于日志或指标主题的查询语句,
日志主题
指标主题
执行语句:日志检索分析语句,详见 语法规则
例1:状态为 error 日志 status:error
例2:统计域名 domain:aaa.com 的平均响应时间 domain:"aaa.com" | select avg(request_time) as Latency
查询时间范围:最大时间范围为最近24小时
执行语句:PromQL,详见 语法规则
例1:文件系统空间占用率大于 50% 时触发告警 filesystem_usage_pct > 0.5
例2:最近5分钟 CPU 负载最大值大于 1 时触发告警 max_over_time(node_load1[5m]) > 1
触发条件:满足触发条件时进行告警,支持“交互模式”及“语句模式”两种配置方式。
交互模式:
依次选择告警等级、执行语句、变量名称和比较方式,然后设定告警阈值。
支持设定多个告警等级,满足条件式触发对应等级的告警,同时满足多个条件时将触发多个告警。可根据告警级别在通知渠道组中设定不同的通知规则,例如“紧急”告警使用电话进行通知,“警告”告警使用短信进行通知,“提醒”告警不通知。
语句模式:
告警等级:支持提醒、警告和紧急三种级别,满足条件时触发对应等级的告警,同时满足多个条件时将触发多个告警。
表达式:语法规则参见 触发条件表达式
分组触发:是否需要使用分组触发功能。
使用分组触发功能时,如果某一个执行语句有多条结果,将根据指定的分组字段对这多条结果进行分组,按组分别判断是否满足告警触发条件,满足触发条件的每个组分别单独触发告警。
分组字段:从执行语句执行结果中选择需要作为分组依据的字段,至少选择1个字段。
例如:
执行语句:* | select avg(request_time) as request_time, domain group by domain order by request_time desc limit 5
触发条件:$1.request_time > 5
执行语句结果:
不使用分组触发
使用分组触发
共触发一条告警:
domain
request_time
执行结果
aaa.com
12.56
满足触发条件,共触发一条告警
bbb.com
9.45
ccc.com
7.23
ddd.com
5.21
eee.com
4.78
不满足触发条件,不触发告警
$1.domain作为分组字段,分为5组,组1~组4满足触发条件,各单独触发一条告警,共触发4条告警:
domain
分组结果
request_time
执行结果
aaa.com
组1
12.56
满足触发条件,单独触发一条告警
bbb.com
组2
9.45
满足触发条件,单独触发一条告警
ccc.com
组3
7.23
满足触发条件,单独触发一条告警
ddd.com
组4
5.21
满足触发条件,单独触发一条告警
eee.com
组5
4.78
不满足触发条件,不触发告警
注意:
使用分组触发功能时,一次告警执行可能会有大量的执行结果满足触发条件,进而同时产生大量告警,造成告警风暴。请合理设定分组字段及触发条件。
指定分组字段时,最多可将执行结果分为1000个组,超出范围的组将不触发告警。
执行周期:监控任务的执行频率,提供如下两种周期配置方式:
周期配置方式
说明
示例
固定频率
按固定的时间间隔执行一次监控任务,支持1~1440分钟
每隔5分钟执行一次监控任务
固定时间
按固定的时间点执行一次监控任务,支持00:00~23:59
每天02:00点执行一次监控任务
Cron 表达式
按照 Cron 表达式 执行监控任务,最小粒度为分钟
*/5 8-20 * * *
每天的8点 - 20点,每5分钟执行一次监控任务

4. 多维分析

触发告警时,可通过多维分析对原始日志做进一步的分析,并将分析结果附加在告警通知中,以辅助定位告警原因。多维分析不会影响告警触发条件。
多维分析类型
说明
相关原始日志
获取符合执行语句检索条件的原始日志,可配置需要展示的日志字段、条数及展示形式。
例如 error 日志过多触发告警时,在告警中查看对应的详细日志。
字段 TOP5 及占比统计
针对触发告警时间范围内的全部日志,按指定字段分组统计日志条数,获取前5项字段值及其占比。
例如 error 日志过多触发告警时,日志对应的 Top5 URL、Top5 响应状态码等。
自定义检索分析
针对触发告警时间范围内的全部日志,执行自定义检索分析语句。 例1:通过* | select avg(timeCost) as time,URL group by URL获取每个接口请求耗时。 例2:通过status:>499获取错误日志。
说明
“相关原始日志”和“字段 TOP5 及占比统计”支持自动关联指定的执行语句中的检索条件(不包含 SQL 中的过滤条件,例如 where),表示需要对符合条件的原始日志进行多维分析。
指标主题暂不支持多维分析。

5. 告警通知

告警频率
持续周期:当持续满足触发条件达到一定次数(默认为1,有效值范围:1 - 10)以后才发送通知。
间隔时间:上一次发送通知后,指定间隔时间内不再发送通知。例如,每15分钟告警一次,表示15分钟内最多只会收到一次告警通知。
通知渠道组: 通过关联通知渠道组,设置发送通知的方式及对象,支持短信、邮件、电话、微信、企业微信、钉钉、飞书、自定义接口回调(webhook) 等通知方式。详情参见 管理通知渠道组
如果选中的通知渠道组中包含自定义接口回调,则会显示“单独设置自定义接口回调参数”开关。未启用该功能时自定义接口回调将使用通知内容模板中的配置作为请求头(Request Header)和请求内容(Request Body)。启用该功能时可在告警策略中单独定义请求头和请求内容,其中可使用 告警通知变量
附加分类字段
对告警进行分类。采用键值对的形式(key:value)进行配置,key 仅支持字母、数字及下划线,且需以字母开头。key 最多可配置50字符,value 最多可配置200字符。可在通知渠道组中根据该字段配置不同的通知规则,也可在附加通知内容及自定义接口回调中使用{{.Label}}引用该字段。
例如设置分类字段为 service:payService(代表当前告警对应的服务名称为 payService):
在通知渠道组中配置通知规则,当 service 包含 payService 时将告警发送至对应的团队。
在自定义接口回调配置中使用{{.Label}}{{.Label.service}}获取该字段的值(分别为{"service":"payService"}payService),第三方平台收到接口回调时即可识别出该告警对应的服务名称。
附加通知内容: 在告警通知中额外增加一部分文字,使告警通知内容更加丰富,可使用 告警通知变量 动态生成。

执行周期与查询时间范围详细说明

日志服务在执行告警策略时会自动调度告警策略的实际执行时间,避免较多的告警策略集中在同一时刻执行而出现缓慢情况,因此告警策略的实际执行时间会在指定的告警执行周期基础上进行秒级别的变化。
例如12:00:00同时创建了两个告警策略,均为每分钟执行一次,但实际执行时间并不完全一致:
第一个告警策略的实际执行时间为12:01:12、12:02:12、12:03:12、12:04:11、12:05:11...
第二个告警策略的实际执行时间为12:01:27、12:02:27、12:03:27、12:04:27、12:05:27...
同时为了保证在自动调度的情况下,告警不遗漏,告警查询时间范围会自动取整并额外增加30秒查询延迟(数据上报一般会有10秒左右延迟,严格按实际时间执行告警时,很可能因为最新的数据尚未上报而出现告警遗漏,因此额外增加30秒查询延迟)。
例如告警策略每分钟执行一次,每次查询最近一分钟的数据,实际执行时间及对应的查询时间范围如下:
执行时间
查询时间范围
12:01:12
11:59:30 ~ 12:00:30
12:02:12
12:00:30 ~ 12:01:30
12:03:12
12:01:30 ~ 12:02:30
12:04:11
12:02:30 ~ 12:03:30
12:05:11
12:03:30 ~ 12:04:30

Cron 表达式

告警策略执行周期支持最小粒度为分钟的 Cron 表达式,由五个空格分隔的时间字段组成,每个字段代表一个时间单位。结构如下:
* * * * *
各字段含义如下:
第1个字段:分钟(0 - 59)
第2个字段:小时(0 - 23)
第3个字段:日(1 - 31)
第4个字段:月(1 - 12)
第5个字段:星期(0 - 6)(星期天为0)
注意:
在所有的地域中,Cron 表达式执行时区均为 UTC+8 时区。
表达式中可以使用一些特殊字符来表示更复杂的时间规则:
*:表示匹配任意值。假如在分钟字段使用*,即表示每分钟都将执行一次。
?:表示无指定字段,只能用在日和星期两个字段。
-:表示匹配范围。例如在分钟字段使用5-20,表示在5分到20分钟之间,每分钟执行一次 。
/:表示从起始时间开始执行,每隔固定时间执行一次。例如在分钟字段使用5/20,表示从5分开始,每隔20分钟执行一次,也即25分、45分各执行一次。
,:表示列出枚举值。例如:在分钟字段使用5,20,表示在5分和20分各执行一次。
示例:
表达式
含义
0 12 * * *
每天中午12:00执行一次
15 10 * * *
每天上午10:15执行一次
* 14 * * *
每天的14:00 - 14:59时间段,每隔1分钟执行一次
0/5 14 * * *
每天的14:00 - 14:55时间段,每隔5分钟执行一次
0/5 14,18 * * *
每天的14:00 - 14:55,18:00 - 18:55,每隔5分钟执行一次
0-5 14 * * *
每天的14:00 - 14:05时间段,每隔1分钟执行一次
10,44 14 * 3 3
三月份每周三的下午14:10和14:44各执行一次
15 10 * * 1-5
每周周一至周五每天上午10:15执行一次

最佳实践