TDengine 查询

从实际使用场景出发,介绍夜莺 TDengine 数据源告警:用 TDengine SQL 查询做告警判定,以及指标名字段、标签字段按列类型自动推断的机制。

概述

TDengine 是常用于物联网、工业设备场景的时序数据库。接成告警数据源后,用 TDengine SQL 查询数据并判定告警。

和 MySQL 这类关系型数据源相比,TDengine 的一个便利之处是:指标名和标签默认按列的数据类型自动推断,多数情况下不用手工指定。

字段 必填 说明
数据源类型 / 数据源 TDengine 类型并选中已接入的 TDengine 数据源
查询条件 TDengine SQL 查询语句
指标名字段(辅助配置) 指定哪些列作为指标名(metricName);留空时默认把数值类型的列作为指标名
标签字段(辅助配置) 指定哪些列作为标签(label);留空时默认把非数值类型的列作为标签
时间格式(辅助配置) 时间列的格式,按此格式把时间转成时间戳,默认 2006-01-02T15:04:05
告警条件 基于查询结果写告警表达式
执行频率 多久跑一次查询
持续时长 满足条件持续多久才触发

下面按实际使用场景介绍。

场景一:查设备指标判阈值

TDengine 的查询结果会按列类型自动拆成「指标 + 标签」。例如查询返回:

used_percent: 96    host: host01
  • used_percent 是数值列 → 自动作为指标名,值为 96
  • host 是非数值列 → 自动作为标签,标签值为 host01

于是告警条件直接写阈值判定即可,比如磁盘使用率超过 90% 告警:

SELECT last(used_percent) AS used_percent, host
FROM db.disk
GROUP BY host;

告警条件写 $A > 90。写完点「数据预览」确认返回结构符合预期,再配阈值。

场景二:手工指定指标名和标签字段

自动推断不符合预期时(比如某个数值列其实是设备编号、应该当标签),在辅助配置里手工指定:

  • 指标名字段:填要作为指标的列名;
  • 标签字段:填要作为标签的列名(回车可输入多个)。

手工指定后就不再走"按类型自动推断"的默认规则,按你指定的来。

场景三:分组告警

按设备、机房等维度分组查询后,每个分组会作为独立的时序被逐条判定——每个满足阈值的分组各触发一条告警事件,事件标签里带对应的分组值(如 host=host01)。

想控制告警事件的数量和粒度,就在 SQL 的 GROUP BY 上控制分组维度。

常见问题

Q1:指标名和标签是怎么确定的?

A:默认按列的数据类型推断——数值类型的列作为指标名(及其值),非数值类型的列作为标签。要覆盖这个默认行为,在辅助配置里手工填「指标名字段」和「标签字段」。

Q2:时间格式要怎么填?

A:按 Go 的时间格式模板写,默认 2006-01-02T15:04:05。系统会按这个格式把查询结果里的时间列解析成时间戳。时间列格式与默认不一致时才需要改。

Q3:查询返回多行会怎样?

A:每行(每个分组)作为独立时序,逐条判定告警,各自产生独立的告警事件。用 GROUP BY 控制分组粒度。

Q4:告警条件的表达式语法和其它数据源一样吗?

A:一样,都是同一套告警表达式。区别只在查询语言和数据形态。

参考资料

更新时间 2026-07-17

快猫星云 联系方式 快猫星云 联系方式
快猫星云 联系方式
快猫星云 联系方式
快猫星云 联系方式
快猫星云