阿里云 SLS 查询 (商业版)
从实际使用场景出发,介绍夜莺阿里云 SLS 日志告警:用 SLS 查询分析语法统计日志、提取值判阈值,以及多语句联合判定与成本控制。
[PLUS] 阿里云 SLS 作为告警数据源是夜莺企业版(PLUS)独有功能。
概述
阿里云 SLS 日志告警用 SLS 的查询分析语法查询日志、提取统计值(ValueKey),再判阈值。查询语法和你在 SLS 控制台里用的一致,区别只是告警查询是周期性执行的。
| 字段 | 必填 | 说明 |
|---|---|---|
| 数据源类型 / 数据源 | 是 | 选 SLS(log)类型并选中已接入的 SLS 数据源 |
| 查询分析语句 | 是 | SLS 检索 + SQL 分析语句,结果的某列作为提取值 |
| 提取值(ValueKey) | 是 | 取哪一列作为 $A 参与告警判定 |
| 告警条件 | 是 | 基于提取值判阈值,如 $A > 0 && $A != 3 |
| 执行频率 | 是 | 多久跑一次查询,建议 ≥ 1 分钟 |
下面按实际使用场景介绍。
场景一:单语句统计判阈值
「查询代理日志中状态码 404 和 405 的数量,结果大于 0 且不等于 3 时告警」:
status:404 OR status:405 | SELECT status AS status, count(*) AS count GROUP BY status
提取值取 count,告警条件用 $A > 0 && $A != 3。
场景二:多语句联合判定
要对不同指标分别判定,填两条查询分析语句,分别用 $A、$B 取值比较。「status:404 的量 > 100 且 status:405 的量 > 1 才告警」,写两条查询后:
$A > 100 && $B > 1
和 PromQL 一样,如果两条语句返回的数据标签不一致,会被视为两条不同的曲线,无法直接比较运算。
常见问题
Q1:SLS 查询返回的字段怎么映射?
A:和 MySQL 告警 类似——提取值(ValueKey)选 SQL 返回的某列作为 $A 参与数值判定;如需分组,把分组列作为标签注入告警事件。
Q2:SLS 的 SQL 语法和标准 SQL 有差异吗?
A:SLS 增强 SQL 支持时序、统计、JSON 解析等扩展函数,如 time_series(...)(时序填充)、numeric_histogram(...)(数值分桶)。详见 SLS 查询分析。
Q3:执行频率和查询性能怎么平衡?
A:SLS 单查询有成本,执行频率建议 ≥ 1 分钟;时间范围用相对短的窗口;复杂聚合尽量在 SLS 端算完,n9e 告警条件只做布尔判定。
Q4:能用 SLS 的 ScheduledSQL 替代 n9e 告警吗?
A:看场景。ScheduledSQL 适合纯 SLS 内部聚合 + 数据回写;n9e 告警的优势在于联动整套告警治理体系(屏蔽/订阅/工作流/通知)。日常告警用 n9e,归档统计用 ScheduledSQL。