Skip to main content
Monitors 通过 SLS 的 SQL 查询接口(GetLogsV3)获取数据,并根据查询结果触发告警。

核心概念

1. 阈值判定模式

此模式适用于需要对聚合后的数值进行阈值比对的场景。

配置方式

  1. 查询语句:编写 SLS SQL 聚合查询。
  • 示例:统计最近 15 分钟内,各主机的错误日志数量。
  1. 查询参数:
  • sls.project:(必填)项目名称。
  • sls.logstore:(必填)日志库名称。
  • sls.timespan.value:(选填)时间跨度数值,默认为 15。
  • sls.timespan.unit:(选填)时间跨度单位,支持 s(秒)、m(分)、h(时)、d(天)。默认为 m。
  1. 字段映射:
  • 值字段:选择 error_cnt,用于阈值判定。
  • 标签字段:选择 host,用于标识告警对象。明确选择标签字段后,其他非值字段会作为附加信息随告警携带。
  • 详细规则请参见查询结果字段映射。
  1. 阈值条件:
  • 使用 $A.field_name 引用数值。
  • 示例:Critical: $A.error_cnt > 50,Warning: $A.error_cnt > 10。

工作原理

Monitors 按配置的时间范围执行 SLS 查询,按标签字段区分告警对象,并使用值字段进行阈值判定。标签字段留空时,除值字段外的返回字段会作为标签。

恢复逻辑

2. 数据存在模式

此模式适用于将过滤逻辑直接写在 SQL 中的场景。

配置方式

  1. 查询语句:使用 HAVING 子句过滤异常数据。
  • 示例:查询错误数超过 50 的主机。
  1. 查询参数:同上,需配置 sls.project 和 sls.logstore。
  2. 判定规则:只要查询返回了数据,即触发告警。

优缺点分析

恢复逻辑

  • 数据消失即恢复:当查询结果为空时,判定恢复
  • 恢复查询:支持配置额外的查询语句
  • 手工关闭:告警保持活动,直到用户手工关闭

3. 数据缺失模式

此模式用于监控”预期应该有数据,但实际没有数据”的场景。 SLS 属于云日志类数据源,不支持按曲线(per-series)的无数据检测,只保留「所有查询均无返回数据时告警」这一种判定:
  • 界面上只有一张判定卡「所有查询均无返回数据时告警」,对应 alert_on_empty_result 与 alert_on_empty_result_severity 两个字段。
  • 「之前查到过数据,现在查不到了,就告警」那张按曲线的检测卡在 SLS 规则里不渲染,它的配置项 check_nodata.enabled 因此无从设置。
  • 同类数据源腾讯云 CLS 也禁用该判定,且在后端是硬校验(提交 check_nodata.enabled 直接返回 400);SLS 目前由前端禁用,后端未加拦截。

配置方式

  1. 查询语句:编写一个预期应该持续返回数据的查询。
  • 示例:查询所有主机的日志上报心跳。
  1. 判定规则:所有查询在连续 N 次检测中都返回空结果时,触发”数据缺失”告警。N 由该页签共享的「触发条件」决定。

存量已启用按曲线检测的规则

以 SLS 为数据源、且已开启按曲线无数据检测的存量规则,打开编辑页时该判定会被自动关闭(check_nodata.enabled 以关闭状态回填),并弹出提示:
当前数据源类型不支持「之前查到过数据,现在查不到了,就告警」,该判定已自动关闭,保存后生效
规则详情页是只读的,不弹这条提示。这条判定是在编辑页里被关掉的:不打开编辑页,规则配置不会变;打开并保存后,关闭状态才会写回规则。自动关闭只作用于这一项判定,保存时:
  • 规则若还有其它已启用的判定(阈值判定、数据存在),「至少启用一项」校验不会拦下这次降级,按曲线检测会随这次保存一起失效——上面那条提示就是为此而弹的。
  • 规则若只有这一项判定,保存会被「阈值判定、数据缺失、数据存在至少启用一项」校验拦下,必须显式改配才能保存。
建议打开这类规则后,把无数据检测改为「所有查询均无返回数据时告警」,确认告警判定里至少有一项已启用,再保存。

恢复逻辑

「所有查询均无返回数据时告警」的恢复方式不可配置,引擎固定为任一查询重新查到数据后自动恢复,界面上以只读文本展示: 原先的恢复方式下拉(数据重新出现后自动结束 / 数据恢复或超时后自动结束 / 仅允许手工关闭)只存在于按曲线的检测卡内部,SLS 下不可用。无数据页签里可配置的共享项只有触发与恢复条件(触发方式、触发条件、恢复条件)。

4. 高级配置

如果需要使用 SLS 的增强 SQL 语法,在查询参数中添加:sls.powersql: true
默认查询最近 15 分钟的数据。可通过参数调整:
不要在 SQL 中使用 __time__ 进行过滤,引擎会自动根据参数设置时间范围。
原始日志检索模式下,通过 sls.lines 控制单次查询最多返回的日志条数。每返回一条日志,就可能生成一条告警。该参数仅对原始日志检索有效;查询中包含 SQL 时,阿里云会忽略该配置。
仅用于调试,不要配置在生产规则中: