告警管理
ThinkLink 内置告警系统,允许设备和资产产生、追踪和清除告警事件。告警由触发模型通过调用 ALARM RPC 触发,并可选择性地向配置的通知组发送邮件提醒。
1.1. 概述
告警工作流程分为三个部分:
- 触发模型 — 每次上行数据到达后执行,评估条件,调用
alarmRPC 并传入action: "new"或action: "clear"。 - ALARM RPC — 内置的
ALARM函数处理调用,在平台中创建或清除告警记录。 - 告警管理界面 — 运维人员查看当前告警、历史记录,并在必要时手动清除告警。
1.2. 告警等级
| 等级 | 说明 |
|---|---|
low | 提示。无需立即处理。 |
mid | 警告。需要关注和排查。 |
high | 错误。需要及时处理。 |
urgent | 紧急。需要立即响应。 |
1.3. 配置告警
第一步 — 挂载 ALARM RPC
ThinkLink 内置了名为 ALARM 的通用告警 RPC,将其挂载到目标设备或资产上:
操作路径:运维管理 → 设备管理 → 选择目标设备 → 详情 → RPC → 新增
从列表中选择 ALARM。ALARM RPC 接收以下参数(均由触发模型传入):
| 参数 | 说明 |
|---|---|
name | 唯一的告警事件名称。 |
action | "new" 产生告警,"clear" 清除告警。 |
title | 在界面中显示的告警标题。 |
desc | 告警描述信息。 |
level | 告警等级:"low"、"mid"、"high" 或 "urgent"。 |
notify | 通知组名称数组 [...]。告警产生/清除时按该数组逐项分发到对应通知组。 |
第二步 — 配置触发模型
编写触发脚本,对设备遥测数据进行条件判断,并返回调用 alarm 方法的 actions 数组。将触发模型挂载到同一设备上。
完整的脚本说明和示例请参考触发模型。
第三步 — (可选)配置邮件通知组
如需接收邮件告警,请在以下路径配置通知组:
操作路径:系统管理 → 通知组
建议在设备 server_attrs 中以数组形式存放通知组名称(例如 device.server_attrs.notify),在触发脚本中读取后直接作为 notify 参数传入告警 RPC。
1.4. 告警事件生命周期
上行数据到达
│
▼
触发脚本执行
│
条件满足? ──否──▶ return null(无操作)
│ 是
▼
action = "new"
调用 ALARM RPC
│
告警已存在且完全相同? ──是──▶ 抑制(不重复创建)
│ 否
▼
告警记录创建
发送邮件(若已配置通知组)
│
▼
条件恢复正常
action = "clear"
调用 ALARM RPC
│
▼
告警记录解除1.5. 查看告警
操作路径:告警 → 告警列表
告警列表展示所有当前活跃和历史告警事件,包含以下字段:
| 字段 | 说明 |
|---|---|
| 告警名称 | 事件的唯一 alarm_name。 |
| 设备 | 产生告警的设备或资产。 |
| 标题 | 告警标题。 |
| 等级 | 告警等级,带颜色区分。 |
| 描述 | 告警详细描述信息。 |
| 创建时间 | 告警首次产生的时间戳。 |
| 状态 | 活跃 或 已解除。 |
1.6. 消除告警
1.6.1. 通过触发脚本自动消除
推荐的做法是在同一触发脚本中同时处理告警的产生与消除:将 action 默认设为 "clear",只在条件满足时才切换为 "new"。这样每次上行数据到达,若条件已恢复正常,告警便会自动消除,无需人工干预。
let action = ACTION.clear; // 默认:消除告警
if (tdata.temperature >= 80) {
action = ACTION.new; // 条件满足:产生告警
}1.6.2. 判断告警是否已发生
在 RPC 脚本中(非触发脚本),可通过入参 alarms 查看当前设备的活跃告警:
function rpc_script({ device, params, alarms, logger }) {
let alarmInfo = alarms["high_temp_alarm"];
if (alarmInfo !== undefined) {
// 该告警当前处于活跃状态
// 可访问 alarmInfo.title、alarmInfo.level、alarmInfo.desc 等字段
} else {
// 该告警名称对应的告警不存在或已消除
}
}alarms 是以 alarm_name 为键的映射对象。键存在表示告警活跃,键不存在(undefined)表示未产生或已消除。
ALARM RPC 内部同样使用 alarms 做去重判断:若相同的告警(名称、标题、描述、等级均相同)已存在,重复的 "new" 动作会被自动抑制。
1.6.3. 手动清除告警
若触发条件已恢复但平台告警未被自动清除(例如未配置 clear 动作),运维人员可手动清除告警:
- 进入
告警 → 告警列表。 - 找到目标告警条目。
- 点击操作列的清除按钮。
- 告警状态变更为
已解除,从活跃告警视图中移除。
1.7. 完整配置示例
以下是一个液位传感器的完整告警配置示例。
设备 server_attrs(通过 RPC 或平台界面设置):
{
"alarm_depth": 20,
"notify": ["ops-team"]
}触发模型脚本:
function trigger_script(device, thingModelId) {
const ACTION = { no: "no", new: "new", clear: "clear" };
let tdata = device?.telemetry_data?.[thingModelId];
if (tdata?.depth === undefined) { return null; }
let name = "low_level_alarm";
let title = "液位告警: [" + device.name + "]";
let level = "high";
let desc = "";
let action = ACTION.clear;
let notify = device?.server_attrs?.notify ?? [];
if (tdata.depth <= device.server_attrs?.alarm_depth) {
desc = "[" + device.name + "] 液位过低,请及时处理";
action = ACTION.new;
}
return {
delayms: 0,
abort_previous_timer: true,
actions: [{
method: "alarm",
params: {
_eui: device.eui,
action: action,
name: name,
title: title,
level: level,
desc: desc,
notify: notify
}
}]
};
}ALARM RPC(内置,无需修改)挂载到设备上,Method 名称为 alarm。
✅ 配置完成后,每当
depth低于阈值时自动产生告警,恢复后自动清除。每个唯一的name代表一种独立的告警事件,同一设备可同时存在多种告警类型。