告警配置

告警模块,由 yudao-module-iot 后端模块的 alert 包实现,主要有告警配置、告警记录两个功能:

  • 告警配置:定义"什么情况需要告警、通知谁"
  • 告警记录:保存每次告警的详细信息

它需要和 《场景联动》 配合使用:场景联动规则中的"告警触发"动作会根据告警配置创建告警记录,"告警恢复"动作会批量处理未处理的告警记录。关于告警触发和告警恢复动作,详见 《场景联动》 的「1.1.2 动作(Action)」小节。

1. 告警

告警由两部分组成:告警配置(定义告警规则和通知方式)和告警记录(保存每次告警的详细信息)。

表关系

1.1 告警配置

告警配置,由 IotAlertConfigController 提供接口。定义告警级别、关联的场景规则、接收人和通知方式。

1.1.1 表结构

省略 creator/create_time/updater/update_time/deleted/tenant_id 等通用字段

CREATE TABLE `iot_alert_config` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '配置编号',
  `name` varchar(255) NOT NULL DEFAULT '' COMMENT '配置名称',
  `description` varchar(500) DEFAULT NULL COMMENT '配置描述',
    
  `level` tinyint NOT NULL COMMENT '告警级别',
    
  `status` tinyint NOT NULL DEFAULT '0' COMMENT '配置状态',
    
  `scene_rule_ids` varchar(500) DEFAULT NULL COMMENT '关联的场景联动规则编号数组',
    
  `receive_user_ids` varchar(500) DEFAULT NULL COMMENT '接收的用户编号数组',
  `receive_types` varchar(255) DEFAULT NULL COMMENT '接收的类型数组',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='IoT 告警配置表';

namedescription:告警配置的基本信息,用于展示。

level:告警级别,使用数据字典 iot_alert_level,目前有 INFO(信息)、WARN(警告)、ERROR(错误)三个级别。(仅展示,无特殊逻辑)

status:配置状态,参见 CommonStatusEnum 枚举。只有开启状态的配置,才会在场景联动触发时创建告警记录。

scene_rule_ids:关联的场景联动规则编号数组,使用 LongListTypeHandler 存储。一个告警配置可以关联多个场景规则。

receive_user_ids:接收用户编号数组,关联系统用户表。receive_types:接收方式数组,使用 IntegerListTypeHandler 存储,参见 IotAlertReceiveTypeEnum 枚举。

1.1.2 管理后台

① 对应 [IoT 物联网 -> 告警中心 -> 告警配置] 菜单,由 IotAlertConfigController 提供接口,对应前端项目的 @/views/iot/alert/config 目录。

管理后台 - 告警配置列表

② 点击【新增】按钮,弹出新增告警配置对话框。

管理后台 - 创建告警配置

1.2 告警记录

告警记录,由 IotAlertRecordController 提供接口。每当场景联动规则触发"告警触发"动作时,系统会自动创建一条告警记录。

1.2.1 表结构

省略 creator/create_time/updater/update_time/deleted/tenant_id 等通用字段

CREATE TABLE `iot_alert_record` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '记录编号',
    
  `config_id` bigint NOT NULL COMMENT '告警配置编号',
  `config_name` varchar(255) NOT NULL DEFAULT '' COMMENT '告警名称',
  `config_level` tinyint NOT NULL COMMENT '告警级别',
    
  `scene_rule_id` bigint NOT NULL COMMENT '场景规则编号',
    
  `product_id` bigint DEFAULT NULL COMMENT '产品编号',
  `device_id` bigint DEFAULT NULL COMMENT '设备编号',
    
  `device_message` text COMMENT '触发的设备消息(JSON 格式)',
    
  `process_status` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否处理',
  `process_remark` varchar(500) DEFAULT NULL COMMENT '处理结果',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='IoT 告警记录表';

config_idconfig_nameconfig_level:告警配置信息。冗余存储了名称和级别,这样即使告警配置被修改,历史告警记录的信息仍然保持不变。

scene_rule_id:触发该告警的场景联动规则编号,关联 iot_scene_rule 表的 id 字段。

product_iddevice_id:触发设备的产品编号和设备编号,方便按设备维度查询告警记录。

device_message:触发的设备消息,JSON 格式存储完整的 IotDeviceMessage 对象,记录告警触发时的设备数据现场。使用 JacksonTypeHandler 进行序列化/反序列化。

process_status:处理状态,是否处理。process_remark:处理结果描述,由处理人填写。


① 告警记录的创建流程:场景联动规则触发 → IotAlertTriggerSceneRuleAction 执行 → 查询关联的告警配置 → 为每个配置创建告警记录。具体可见 IotAlertTriggerSceneRuleAction 的 #execute(...) 方法。

② 告警恢复流程:场景联动规则触发"告警恢复"动作 → IotAlertRecoverSceneRuleAction 执行 → 查询未处理的告警记录 → 批量标记为已处理。具体可见 IotAlertRecoverSceneRuleAction 的 #execute(...) 方法。

1.2.2 管理后台

① 对应 [IoT 物联网 -> 告警中心 -> 告警记录] 菜单,由 IotAlertRecordController 提供接口,对应前端项目的 @/views/iot/alert/record 目录。

管理后台 - 告警记录列表

② 点击操作列的【处理】按钮,弹出输入框输入处理原因,即可将告警标记为已处理。

管理后台 - 处理告警

2. 快速上手

以内置的 id 为 25 的 演示设备 (opens new window) 为例,演示如何配置告警:当设备上报的 height 属性大于 2000 时触发告警,并通知管理员。

2.1 步骤一:创建场景联动规则

告警需要先有场景联动规则,再由告警配置去关联它。进入 [IoT 物联网 -> 规则引擎 -> 场景联动],点击【新增】按钮创建一条规则,配置如下:

系统已预设了一条名为"高度超标触发告警"的演示规则,可直接用于体验,跳过本步骤。

快速上手 - 场景联动规则

  • 触发器:物模型属性上报 → 演示产品 → 全部设备 → height > 2000
  • 执行动作:告警触发 → 关联"高度超标告警"配置

2.2 步骤二:创建告警配置

进入 [IoT 物联网 -> 告警中心 -> 告警配置],点击【新增】按钮创建一条告警配置,配置如下:

系统已预设了一条名为"高度超标告警"的演示配置,可直接用于体验,跳过本步骤。

快速上手 - 告警配置示例

  • 告警级别:ERROR(错误)
  • 关联场景规则:高度超标触发告警
  • 接收用户:管理员
  • 接收方式:站内信(任选一种或多种即可)

2.3 步骤三:测试验证

【可选】如需调试,可在 IotAlertTriggerSceneRuleAction 的 #execute(...) 方法打断点,验证告警记录是否被创建。

① 使用设备管理的"模拟设备"功能,模拟演示设备上报 height 属性值为 2500(大于 2000)。

快速上手 - 模拟设备上报属性

② 进入 [IoT 物联网 -> 告警中心 -> 告警记录],可以看到新生成了一条告警记录,告警级别为 ERROR,说明告警触发成功。

快速上手 - 告警记录