Skip to content

告警管理

ThinkLink 内置告警系统,允许设备和资产产生、追踪和清除告警事件。告警由触发模型通过调用 ALARM RPC 触发,并可选择性地向配置的通知组发送邮件提醒。

1.1. 概述

告警工作流程分为三个部分:

  1. 触发模型 — 每次上行数据到达后执行,评估条件,调用 alarm RPC 并传入 action: "new"action: "clear"
  2. ALARM RPC — 内置的 ALARM 函数处理调用,在平台中创建或清除告警记录。
  3. 告警管理界面 — 运维人员查看当前告警、历史记录,并在必要时手动清除告警。

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"。这样每次上行数据到达,若条件已恢复正常,告警便会自动消除,无需人工干预。

javascript
let action = ACTION.clear;   // 默认:消除告警

if (tdata.temperature >= 80) {
    action = ACTION.new;     // 条件满足:产生告警
}

1.6.2. 判断告警是否已发生

RPC 脚本中(非触发脚本),可通过入参 alarms 查看当前设备的活跃告警:

javascript
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. 进入告警 → 告警列表
  2. 找到目标告警条目。
  3. 点击操作列的清除按钮。
  4. 告警状态变更为已解除,从活跃告警视图中移除。

1.7. 完整配置示例

以下是一个液位传感器的完整告警配置示例。

设备 server_attrs(通过 RPC 或平台界面设置):

json
{
    "alarm_depth": 20,
    "notify": ["ops-team"]
}

触发模型脚本:

javascript
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 代表一种独立的告警事件,同一设备可同时存在多种告警类型。