thingsboard/summary/26-告警规则不生效问题排查指南.md

178 lines
5.4 KiB
Markdown
Raw Normal View History

2026-01-19 11:50:37 +08:00
# 告警规则不生效问题排查指南
## 问题描述
`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