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 个自定义元数据过滤器,分别检查设备类型、位置、版本、电量、连接状态。
✅ 高效方案:将设备类型和位置通过设备类型和标签过滤,版本和电量通过自定义元数据过滤,连接状态通过触发条件中的“连接状态”字段处理。

3.8 过滤器调试技巧

在配置过滤器时,可以使用 ThingsBoard 的“测试”功能验证过滤条件是否生效。以下是调试步骤:

  1. 在告警规则编辑器中,点击“测试”按钮。
  2. 选择一个模拟设备或输入设备 ID。
  3. 系统会显示该设备是否通过当前过滤器的所有条件。
  4. 如果未通过,检查过滤器中的键名、运算符和值是否与设备属性完全匹配(注意大小写)。
常见错误:自定义元数据过滤中,如果引用的属性键在设备上不存在,过滤器会默认返回“不通过”。确保设备已经上报了过滤条件中使用的所有属性。