操作场景
基于日志配置告警策略,在出现符合特定条件的日志时发送告警,例如 error 日志数量过多,接口响应时间过长等。
前提条件
- 日志已上传到某个日志主题,且已 配置索引。
- 告警策略需使用 SQL 语句,建议对日志进行结构化处理。
操作步骤
登录日志服务控制台,并进入监控告警 > 告警策略页面,单击新建,配置如下主要信息。
1. 基本信息
- 告警名称:字符长度为1至255个字符。
- 启用状态:是否启用当前告警策略,告警策略不启用时不产生任何告警及通知。
- 标签:为当前创建的告警策略设定标签,便于从不同维度对资源分类管理。
2. 监控对象
选择需要监控的日志主题:
- 所有执行语句使用相同的日志主题:支持多选,最多可选择20个日志主题,不支持跨地域。每个日志主题单独判断是否满足触发条件,同时有多个日志主题满足触发条件时将同时产生多条告警。
- 在每个执行语句中单独选择日志主题:可为每个执行语句单独设置日志主题,单选,不支持跨地域。每个执行语句的结果合并在一起判断是否满足触发条件。例如 A 主题错误日志数 + B 主题错误日志数 > 10时触发一条告警。
3. 监控任务
- 执行语句:作用于日志主题的执行语句,执行语句需包含分析语句(即 SQL 语句)。
- 例1:统计出现 error 的日志条数
status:error | select count(*) as ErrCount - 例2:统计域名 domain:aaa.com 的平均响应时间
domain:"aaa.com" | select avg(request_time) as Latency
- 例1:统计出现 error 的日志条数
- 查询时间范围:执行语句需要查询的数据时间范围,最大时间范围为最近24小时。
- 触发条件:满足触发条件时进行告警。触发条件最多可配置10个,且触发条件之间为或的关系,每个触发条件均会单独进行告警。
- 告警级别:支持提醒、警告和紧急三种级别,默认为警告。可根据告警级别在通知渠道组中设定不同的通知规则,例如“紧急”告警使用电话进行通知,“警告”告警使用短信进行通知,“提醒”告警不通知。
- 条件表达式:使用
$N.keyname引用执行语句结果,其中$N表示当前告警策略中的第N个执行语句,keyname表示对应的字段名称。表达式语法参见 触发条件表达式语法。- 例1:出现 error 的日志条数大于10即触发告警,
$1.ErrCount > 10,其中$1表示第一个执行语句,ErrCount表示统计结果中的 ErrCount 字段。 - 例2:域名 domain:aaa.com 的平均响应时间大于5s即触发告警,
$2.Latency > 5,其中$2表示第二个执行语句,Latency表示统计结果中的 Latency 字段。
- 例1:出现 error 的日志条数大于10即触发告警,
- 分组触发:触发条件表达式是否需要使用分组触发功能。
- 使用分组触发功能时,如果某一个执行语句有多条结果,将根据指定的分组字段对这多条结果进行分组,按组分别判断是否满足告警触发条件,满足触发条件的每个组分别单独触发告警。
- 分组字段:从执行语句执行结果中选择需要作为分组依据的字段,至少选择1个字段。
- 示例:
- 执行语句:
* | select avg(request_time) as request_time, domain group by domain order by request_time desc limit 5 - 触发条件:
$1.request_time > 5 - 执行语句结果:
以$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分钟,粒度:分钟级
- 固定时间:按固定的时间点执行一次监控任务时间点范围:00:00 - 23:59,粒度:分钟级
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) 等通知方式。详情参见 管理通知渠道组。 - 附加分类字段:
对告警进行分类。采用键值对的形式(key:value)进行配置,key 仅支持字母、数字及下划线,且需以字母开头。key 最多可配置50字符,value 最多可配置200字符。可在通知渠道组中根据该字段配置不同的通知规则,也可在附加通知内容及自定义接口回调中使用{{.Label}}引用该字段。
例如设置分类字段为 service:payService(代表当前告警对应的服务名称为 payService):- 在通知渠道组中配置通知规则,当 service 包含 payService 时将告警发送至对应的团队。
- 在自定义接口回调配置中使用
{{.Label}}或{{.Label.service}}获取该字段的值(分别为{"service":"payService"}、payService),第三方平台收到接口回调时即可识别出该告警对应的服务名称。
- 附加通知内容:
在告警通知中额外增加一部分文字,使告警通知内容更加丰富,可使用 告警通知变量 动态生成。通知内容最长为200个英文字母或66个中文汉字,超出长度后将会截断。自定义接口回调中使用{{.Message}}变量引用该字段时,无长度限制。 - 自定义接口回调配置:
如果选中的通知渠道组里包含自定义接口回调,则会显示自定义回调接口配置输入框。在输入框中可自定义请求头(Request Header)和请求内容(Request Body),触发告警时 CLS 将使用该请求头和请求内容调用指定的接口。请求头及请求内容中可使用 告警通知变量,将触发告警时的一些数据发送至指定接口。
执行周期与查询时间范围详细说明
日志服务在执行告警策略时会自动调度告警策略的实际执行时间,避免较多的告警策略集中在同一时刻执行而出现缓慢情况,因此告警策略的实际执行时间会在指定的告警执行周期基础上进行秒级别的变化。
例如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 |