# 告警规则不生效问题排查指南 ## 问题描述 在 `default` 设备配置下配置了一个告警规则 `HT`: - 条件:`airport.temperature >= 10` - 重复次数:3次 - 设备:`7CTDM7H00B5EM1` 但该设备没有看到告警。 ## 排查步骤 ### 1. 检查设备使用的 Device Profile **在 ThingsBoard Web UI 中:** 1. 进入 **Devices** → 找到设备 `7CTDM7H00B5EM1` 2. 查看设备的 **Device Profile** 字段 3. 确认是否使用的是 `default` Device Profile **如果设备使用的不是 `default` Device Profile:** - 需要在该设备实际使用的 Device Profile 中配置告警规则 - 或者将设备切换到 `default` Device Profile ### 2. 检查遥测数据的 Key 名称 **关键问题:遥测数据的 Key 名称必须与告警规则中配置的 Key 名称完全匹配!** 从日志中观察到: - 设备 `7CTDM7H00B5EM1` 发送的遥测数据中,有些消息包含 `drone.temperature` - 告警规则配置的是 `airport.temperature` **检查方法:** 1. **在 Web UI 中查看遥测数据:** - 进入设备详情页 → **Latest Telemetry** - 查看实际收到的遥测数据 key 名称 - 确认是否有 `airport.temperature` 这个 key 2. **通过日志检查:** ```bash docker logs mytb 2>&1 | grep -A 5 "7CTDM7H00B5EM1" | grep -E "data=|airport\.temperature|drone\.temperature" ``` 3. **常见问题:** - 遥测数据 key 是 `drone.temperature`,但告警规则配置的是 `airport.temperature` - 遥测数据 key 是 `airport.temperature`,但告警规则配置的是 `Airport.Temperature`(大小写敏感) - 遥测数据 key 是 `airport_temperature`,但告警规则配置的是 `airport.temperature`(下划线 vs 点号) ### 3. 检查告警规则配置 **在 Device Profile 中检查告警规则:** 1. 进入 **Device Profiles** → 选择 `default` 2. 进入 **Alarms** 标签页 3. 找到告警规则 `HT`,检查: - **Alarm Type**: `HT` - **Key**: `airport.temperature`(必须是 `TIME_SERIES` 类型) - **Condition**: `>= 10` - **Repeat Count**: `3` - **Severity**: 已配置(如 `CRITICAL`, `WARNING` 等) ### 4. 检查遥测数据是否满足条件 **确认设备实际发送的数据:** ```bash # 查看设备发送的遥测数据 docker logs mytb 2>&1 | grep "7CTDM7H00B5EM1" | grep "airport.temperature" | tail -10 ``` **确认要点:** - 数据中是否有 `airport.temperature` 字段 - 该字段的值是否 >= 10 - 是否有连续 3 次满足条件的数据 ### 5. 检查 Device Profile Alarm 节点 **确认 Root Rule Chain 中有 Device Profile Alarm 节点:** 1. 进入 **Rule Chains** → **Root Rule Chain** 2. 检查是否有 **Device Profile Alarm** 节点 3. 如果没有,需要添加: - 添加节点类型:**Device Profile Alarm** - 连接到 **Save Timeseries** 节点之后 ### 6. 检查告警规则状态持久化 **如果告警规则配置了 "Persist alarm rules state":** - 告警规则的状态会被持久化 - 如果之前有告警状态,可能需要清除状态 - 在设备详情页 → **Alarms** 中查看是否有旧的告警状态 ### 7. 启用调试日志 **如果需要更详细的调试信息,可以启用告警相关的日志:** ```bash # 查看告警相关的日志 docker logs mytb 2>&1 | grep -iE "alarm|device.*profile.*alarm|HT" | tail -50 ``` ## 常见问题及解决方案 ### 问题1:遥测数据 Key 不匹配 **症状:** - 设备发送的是 `drone.temperature` - 告警规则配置的是 `airport.temperature` **解决方案:** - 方案1:修改告警规则,将 key 改为 `drone.temperature` - 方案2:修改设备发送的数据,将 key 改为 `airport.temperature` ### 问题2:设备使用的不是配置告警规则的 Device Profile **症状:** - 告警规则配置在 `default` Device Profile - 设备使用的是其他 Device Profile(如 `TuoHengAirport`) **解决方案:** - 方案1:在设备实际使用的 Device Profile 中配置告警规则 - 方案2:将设备的 Device Profile 改为 `default` ### 问题3:告警规则条件不满足 **症状:** - 告警规则配置 `>= 10`,重复 3 次 - 但数据中 `airport.temperature` 的值是 18、19 等,应该满足条件 **可能原因:** - 数据中确实没有 `airport.temperature` 字段 - 或者数据中该字段的值 < 10 **解决方案:** - 检查实际遥测数据,确认字段名和值 - 调整告警规则条件 ### 问题4:重复次数未达到 **症状:** - 告警规则配置重复 3 次 - 但只有 1-2 次满足条件的数据 **解决方案:** - 等待更多数据 - 或者降低重复次数要求 ## 验证步骤 1. **确认设备配置:** - 设备使用 `default` Device Profile - Device Profile 中有告警规则 `HT` 2. **确认遥测数据:** - 设备发送的数据中包含 `airport.temperature` 字段 - 该字段的值 >= 10 3. **发送测试数据:** ```bash # 使用 MQTT 发送测试数据 mosquitto_pub -h localhost -p 1883 \ -t "v1/devices/me/telemetry" \ -u "YOUR_ACCESS_TOKEN" \ -m '{"airport.temperature":15}' ``` 4. **检查告警:** - 在设备详情页 → **Alarms** 中查看 - 应该能看到告警 `HT` ## 参考信息 - ThingsBoard 告警规则文档:https://thingsboard.io/docs/user-guide/device-profiles/#alarm-rules - 告警规则配置示例:https://thingsboard.io/docs/user-guide/device-profiles/#alarm-rule-configuration