3. 告警规则过滤器:设备类型过滤、设备名称/标签过滤、客户/租户过滤、自定义元数据过滤
告警规则过滤器是 ThingsBoard 告警引擎中用于缩小触发范围、提升告警精度的核心组件。在触发条件(如温度 > 50°C)满足后,过滤器会进一步判断该数据点是否属于“需要关注”的设备或实体。只有同时满足触发条件 和 所有过滤器条件的消息,才会真正进入告警创建流程。
核心原则:过滤器之间是“与(AND)”关系。一条告警规则可以配置多个过滤器,消息必须通过全部过滤器才算匹配。如果不需要过滤,可以跳过此步骤,规则将对所有设备生效。
3.1 过滤器类型总览
ThingsBoard 提供了四种内置过滤器,覆盖了从设备属性到租户层级的常见过滤场景:
| 过滤器类型 | 过滤依据 | 典型场景 |
|---|---|---|
| 设备类型过滤 | 设备配置的“类型”字段(如 temperature、humidity) | 只对温度传感器触发告警,忽略湿度传感器 |
| 设备名称/标签过滤 | 设备名称或标签(支持通配符) | 只监控特定区域或特定编号的设备 |
| 客户/租户过滤 | 设备所属的客户或租户层级 | 只对某个客户的设备生成告警 |
| 自定义元数据过滤 | 设备属性、服务器属性或最新遥测值 | 根据设备固件版本、安装位置等动态条件过滤 |
3.2 设备类型过滤
设备类型是 ThingsBoard 设备配置中的一个基础字段。通过设备类型过滤,你可以将告警规则限定在某一类设备上,避免跨类型误报。
- 配置方式:在告警规则编辑器的“过滤器”步骤中,选择“设备类型”过滤器,输入目标类型名称(如
temperature_sensor)。 - 匹配规则:严格匹配设备注册时的类型字段值,不支持通配符。
- 适用场景:当平台同时管理多种设备(如温度、湿度、电压)时,为每种设备类型创建独立的告警规则。
示例:告警规则“高温告警”配置设备类型过滤器为
temperature_sensor,触发条件为温度 > 60°C。此时,湿度传感器即使上报 80°C(假设存在),也不会触发此告警。
3.3 设备名称/标签过滤
设备名称和标签提供了更灵活的过滤方式。标签是设备上的键值对属性,可以在设备配置中自定义添加。
- 设备名称过滤:支持精确匹配和通配符匹配(
*表示任意字符序列,?表示单个字符)。例如floor-*匹配所有以floor-开头的设备。 - 设备标签过滤:基于设备标签键值对进行过滤。例如标签
location=building_a,只有该标签的设备才会触发告警。 - 组合使用:可以同时配置名称和标签过滤器,两者为“与”关系。
// 设备名称通配符示例
// 匹配规则:设备名称以 "sensor-" 开头,以数字结尾
// 有效匹配:sensor-01, sensor-99, sensor-abc123
// 无效匹配:sensor-, sensor-abc-xyz
过滤器配置:
类型:设备名称
模式:sensor-*
3.4 客户/租户过滤
在多租户架构中,客户/租户过滤允许告警规则只对特定租户或客户下的设备生效。这是实现租户隔离告警的关键机制。
| 过滤层级 | 过滤对象 | 配置方式 |
|---|---|---|
| 租户过滤 | 设备所属的租户 | 选择特定租户,或选择“当前租户” |
| 客户过滤 | 设备所属的客户(租户下的子账户) | 选择特定客户,或选择“当前客户” |
| 租户+客户组合 | 同时限定租户和客户 | 先选租户,再选该租户下的客户 |
注意:如果告警规则是在租户级别创建的,客户过滤只对该租户下的客户有效。跨租户的客户过滤不会生效。
3.5 自定义元数据过滤
自定义元数据过滤器是 ThingsBoard 中最强大的过滤方式。它允许你基于设备的属性(客户端属性、共享属性、服务器属性)或最新遥测值来编写过滤条件。
- 支持的元数据来源:
- 客户端属性(client attributes)
- 共享属性(shared attributes)
- 服务器属性(server attributes)
- 最新遥测值(latest telemetry)
- 支持的运算符:等于、不等于、大于、小于、包含、正则匹配等。
- 动态过滤:可以根据设备上报的实时数据(如当前电量)决定是否触发告警。
// 自定义元数据过滤示例
// 场景:只对固件版本低于 2.0 且安装位置为 "机房A" 的设备触发告警
过滤器 1:
键:firmwareVersion
来源:共享属性
运算符:小于
值:2.0
过滤器 2:
键:location
来源:客户端属性
运算符:等于
值:机房A
3.6 过滤器执行流程
下面的 SVG 图展示了告警规则中过滤器的执行顺序和逻辑关系:
3.7 过滤器配置最佳实践
在实际项目中,合理组合过滤器可以显著减少无效告警。以下是几条经过验证的配置建议:
- 优先使用设备类型过滤:将告警规则按设备类型拆分,避免在一条规则中混合多种设备。
- 标签过滤用于动态分组:利用设备标签(如
environment=production、priority=high)实现灵活的告警范围控制。 - 自定义元数据过滤用于复杂条件:当需要根据设备属性(如固件版本、安装日期)或实时状态(如电量 < 20%)过滤时,使用自定义元数据。
- 避免过度过滤:过多的过滤器会增加规则匹配的计算开销。建议将常用过滤条件固化到设备类型或标签中。
案例对比:
❌ 低效方案:一条告警规则包含 5 个自定义元数据过滤器,分别检查设备类型、位置、版本、电量、连接状态。
✅ 高效方案:将设备类型和位置通过设备类型和标签过滤,版本和电量通过自定义元数据过滤,连接状态通过触发条件中的“连接状态”字段处理。
❌ 低效方案:一条告警规则包含 5 个自定义元数据过滤器,分别检查设备类型、位置、版本、电量、连接状态。
✅ 高效方案:将设备类型和位置通过设备类型和标签过滤,版本和电量通过自定义元数据过滤,连接状态通过触发条件中的“连接状态”字段处理。
3.8 过滤器调试技巧
在配置过滤器时,可以使用 ThingsBoard 的“测试”功能验证过滤条件是否生效。以下是调试步骤:
- 在告警规则编辑器中,点击“测试”按钮。
- 选择一个模拟设备或输入设备 ID。
- 系统会显示该设备是否通过当前过滤器的所有条件。
- 如果未通过,检查过滤器中的键名、运算符和值是否与设备属性完全匹配(注意大小写)。
常见错误:自定义元数据过滤中,如果引用的属性键在设备上不存在,过滤器会默认返回“不通过”。确保设备已经上报了过滤条件中使用的所有属性。