跳到主要内容

CEP (复合事件处理)

目录​


概述​

CEP(Complex Event Processing) 功能是一个规则引擎,用于在实时事件流中发现有意义的模式并立即执行动作(保存·发布·报警)。目前在左侧菜单中通过自动化组的 EQL 查询和语句进行展示。

子菜单内部 URL用途
EQL 查询/query/index将 EQL(Event Query Language) 临时查询发送至实时流并立即查看结果
语句/statement/index查询资产单位的领域规则(状态/聚合/事件/命令)

CEP 规则的结果也会自动连接至 流程 的资产触发器(如 flow_on_asset_event 等)。


画面构成 — 自动化组的 EQL 画面​

画面主要用户一句话摘要
查询运营分析师立即执行一行 EQL,在实时流中查看结果
语句运营人员查询注册到资产的领域规则状态和执行统计

查询画面 (/query/index)​

这是一个编写 EQL 临时查询,并通过 ▶ 按钮立即执行,从而在实时流中查看结果的画面。

顶部 — 查询保存·历史​

🔍 쿼리 [💾 이 쿼리를 저장] [↩ 마지막 쿼리] [▼ 이력 ▼]
按钮动作
保存此查询saveQueryHistory() — 将当前 EQL 保存至收藏夹
最后一次查询loadLastQuery() — 调用最近一次执行的查询
历史下拉菜单loadQueryHistory() — 以下拉菜单形式显示保存的查询历史(最大 400px 滚动)

在顶部或左侧菜单 EQL 输入窗编写的查询可以自动传递至此画面进行执行。

EQL 输入面板​

黑色边框的大输入框(textarea[name=epl], 高度 8 行) + 右上角两个图标。

图标动作
▶ (播放, 白色)runQuery() — 执行 EQL
⚙ (齿轮, 灰色)resultConfig() — 结果显示选项对话框 (display_count·expire_time·result_format·图表选项等)

执行结果面板​

结果面板的页眉显示以下内容:

项目显示
左侧⚪ "查询执行结果" + (若是保存的查询) [배치시간=..., EQL ID=...]
右侧▶ 开始 / ⏸ 停止 按钮 (暂停接收实时结果)

结果图表 (query_result_chart, 160px)​

  • 右上角显示输入计数(input_count_cur) 和每分钟输入数(input_count_min)
  • 当结果数据开始进入时,图表开始填充。形式为实时折线图
  • 数据到达前显示 "等待接收图表数据..." (旋转图标)

结果表格 (query_result_table)​

列说明
#行号
输出时间EQL 发出(emit)结果的时间
行数单次 emit 的行数
数据JSON 或表格形式的结果正文

如果不停止执行,结果表格将持续累积。点击 停止 按钮或执行新查询后,累积将停止。


触发器画面参考​

左侧菜单中没有单独的 触发器 菜单。在运行 /trigger/index 画面或内部 API 的安装环境中,请将以下内容仅作为旧版参考。新自动化优先使用 流程 的触发器节点与 自动化 > EQL 查询 / 语句 流程。

用于管理将 EQL 匹配结果发布到外部消息通道或保存到存储中的自定义触发器。

顶部工具​

⚡ 트리거 [➕ 트리거 추가] [↻]

列表表格​

列表面板页眉右侧有 部署选中触发器 / 解除 / 全部重新部署 三个按钮。

列宽度说明
选择50px批量部署/解除用复选框
状态80px部署/解除 徽章
触发器 ID110px系统自动分配 ID
触发器名称 | 说明自动运营人员指定元数据
MQ 流传输70px是否使用 MQ 发布 (Y/N)
存储保存70px是否将结果加载到存储 (Y/N)
总执行次数70px累积匹配次数
最后执行日期110px最近一次匹配时间
错误70px累积错误计数
注册日110px注册时间
最后修改日110px最后修改时间
操作80px修改·删除按钮

页面底部显示提示框。

自定义触发器的使用 可以添加在符合特定条件时执行动作的自定义触发器。此外,可以通过 MQ 进行流传输或将其保存到存储中。

触发器添加/修改表单​

通过顶部 添加触发器 按钮进入表单画面(/trigger/form)。

1) 基本信息 fieldset​

输入path宽度备注
触发器 IDtrigger_id200px只读 — 系统自动分配
触发器名称trigger_name450px易于识别的名称
说明trigger_desc600 × 100px (textarea)触发器用途

2) EQL fieldset​

输入path说明
EQLepl8 行 textarea — 编写 EQL 查询 (SELECT ... FROM ... WHERE ...)
▶ 试运行(图标)runQuery() — 立即试运行编写的 EQL。结果显示在下方的 查询结果 表(graph_query_result)中

查询结果表(试运行结果预览):

列说明
输出时间EQL 发出(emit)结果的时间
数据结果正文

3) 流传输 fieldset​

输入path说明
MQ 输出与否use_mq (复选框)是否将结果数据发布到外部消息通道
协议mq_protocol (选择器)MQTT 或 KAFKA
目标地址mq_destination (450px)发布目标 Topic/Channel — 分隔符: KAFKA -, MQTT /. 例: device-machine-topic-1 或 device/machine/topic_1

4) 存储保存 fieldset​

输入path说明
存储保存与否use_storage (复选框)是否将结果数据加载到存储

存储表名·列定义区域由于触发器结果存储表固定,当前处于禁用状态。

提交表单​

按钮动作
列表(☰)返回触发器列表画面
保存 (蓝色)输入验证后保存。仅保存尚未部署,必须在列表画面点击 部署选中触发器 实际动作才开始

全部重新部署​

按钮位置动作
全部重新部署列表面板页眉右侧 (🔁)批量重新部署所有注册的触发器。用于规则引擎重启后或系统巡检后

运营流程​

  1. 添加触发器 → 输入 EQL·流传输·存储选项 → 保存
  2. 在列表中勾选该触发器 → 点击 部署选中触发器 → 状态变更为 "部署"
  3. 运行中如需暂时停止,点击 解除 → 状态变更为 "解除"
  4. 巡检后通过 全部重新部署 批量重新启动

语句画面 (/statement/index)​

这是一个用于查询按资产单位注册的领域规则(状态/聚合/事件/命令)的状态和执行统计的画面。

顶部搜索·筛选​

√ 스테이트먼트 [유형 ▼] [검색 ...] [조회] [↻]
控件选项说明
类型选择器 (search_type)所有类型·状态(CONTEXT)·聚合(AGGREGATION)·事件(EVENT)·命令(COMMAND)4 种规则类型筛选
搜索输入 (txt)(250px)placeholder: "搜索 ..." — 规则名/适用资产 ID/说明关键字
查询(红色 + 🔍)search() — 按条件更新列表
刷新(红色 + ↻)refresh() — 刷新画面

4 种规则类型​

代码含义
CONTEXT状态
AGGREGATION聚合
EVENT事件
COMMAND命令

列表表格​

列宽度说明
状态80px激活/禁用 徽章
适用资产 ID150px规则赋予的资产标识符
类型80px4 种类型之一 (参考上表)
语句名称自动规则名称
说明300px规则备注
总执行次数80px规则匹配的累积次数
最后执行日期120px最近一次匹配时间
错误60px累积错误计数
注册日120px规则注册时间
详细50px点击进入规则详细查看画面(/statement/view)

创建语句 — 各类型必填项​

语句是挂载到设备上的。在资产树中选择设备,通过 注册表 选项卡的 添加语句 打开(仅对 ADMIN 可见)。本画面(/statement/index)用于查询和运营。

EQL 的 SELECT 必须输出各类型规定的所有必填项才能保存。 因为 Platform 将通过该名称读取值。除此之外的项可自由定义。

类型对话框名称必填项
EVENT事件timestamp · plugin · name · color · from_timestamp · to_timestamp · value
CONTEXT上下文timestamp · plugin · key · value
AGGREGATION聚合timestamp · plugin · key · value
COMMAND命令timestamp · plugin · key · value
项含义
timestamp事件时间(epoch ms)
plugin来源插件(OEE·RAM·EMS 等)
key项名称(状态·聚合·命令的名称)
value值
name事件名称
color显示颜色
from_timestamp · to_timestamp开始 · 结束时间(epoch ms)

项可以通过 ... AS 칸 输出,或直接选择同名的项。SELECT * 因为语句中没有项名称,所以无法通过验证。选择类型后,该类型应输出的项 引导将随之改变,如果编辑器为空,则填充该类型的模版。

SELECT
timestamp AS timestamp,
'-' AS plugin,
'' AS key,
'' AS value
FROM Point(tag_id = '...')

对话框在保存前需先通过 EQL 执行(▶)进行验证。如果缺失必填项,保存将被拒绝(HTTP 422, asset_statement.eql.missing_columns),并在 EQL 编辑器下方的橙色方框中列出缺失项。

AGGREGATION 语句的 EQL 中缺少必填项: key. SELECT 的输出名称(... AS 项)必须全部输出 timestamp, plugin, key, value。

同样的规则适用于控制台 · V5 · ISO 插件应用 · 插件模板 · MCP validate_eql。非上述四种类型的值将通过 asset_statement.eql.unknown_type 被拒绝。

详细查看​

点击列表中的 详细 按钮可进入独立画面(/statement/view/{asset_id}/{statement_name})查看以下内容(参考下方 语句详细画面)。

  • 规则的 EQL 正文
  • 执行结果历史
  • 执行趋势/聚合
  • 分析性能趋势
  • 状态历史

语句详细画面​

通过详细按钮进入的分析视图(statement/view.jsp, 715 行)。将一个规则的所有运营信息汇总在一个画面中。

顶部 — 识别页眉​

√ 스테이트먼트 | {statement_name} [ {asset_id} ] [← 목록] [↻]
按钮动作
列表(←)返回 /statement/index
刷新重新加载画面

面板 1 — 语句信息 (5 列表)​

列宽度说明
状态250px激活/禁用 + 最后执行时间
语句名称自动规则名称
适用资产200px资产领域徽章 — 点击跳转至 资产树
类型200px状态(CONTEXT)·聚合(AGGREGATION)·事件(EVENT)·命令(COMMAND)
注册日160px规则注册时间

EQL 正文 fieldset​

直接显示规则的 EQL 查询正文。可以从文本区域复制并粘贴到 查询画面 进行试运行。

输入·输出 fieldset​

区域显示
输入序列规则作为输入使用的标签·事件类型列表
输出序列规则发布的领域事件类型
错误计数重置仅将累积错误计数重置为 0(resetErrorCount(asset_id, statement_name))

面板 2 — 执行结果历史 (4 列表)​

列宽度说明
执行时间160px规则执行时间
结果60px成功(绿色) / 错误(红色)
结果值 / 错误消息自动成功则显示结果正文,错误则显示错误消息
复制50px📋 — 将结果值/错误消息复制到剪贴板

面板 3 — 执行趋势图表​

项目说明
页眉📊 "执行趋势"
按钮今天(switchTrendDay(0)) / 昨天(switchTrendDay(-1)) 切换
图表24 小时时间段成功的/错误累积柱状图 (序列: 成功·错误)

面板 4 — 执行聚合​

项目说明
页眉📊 "执行聚合"
按钮今天(switchAggDay(0)) / 昨天(switchAggDay(-1)) 切换
fieldset 1分单位聚合(按时间段计数·平均处理量等)
fieldset 2优先级或结果分布

面板 5 — 分析性能趋势​

项目说明
页眉🖥 "分析性能趋势"
按钮今天(switchCpuDay(0)) / 昨天(switchCpuDay(-1)) 切换
图表规则处理所使用的 CPU/处理时间时序 — 用于识别沉重规则

面板 6 — 状态历史表​

列说明
变更时间规则状态变更时间 (激活·解除·重新部署等)
状态变更后的状态

用于追踪规则生命周期(何时激活·解除·修改)。

应用模式​

分析流程画面流程
错误规则诊断执行结果历史 → 错误消息 → 复制 → EQL 正文审查 → 在 查询画面 试运行
沉重规则识别分析性能趋势 → CPU 使用量大时间段 → 简化 EQL 正文
规则匹配分布分析执行趋势 + 聚合 → 按时间段的匹配模式
运营规则整治状态历史 → 追踪激活/解除时间点

应用场景​

场景画面步骤
立即确认当前线运行状态查询EQL 输入窗输入 SELECT * FROM AssetData.win:time(1 sec) WHERE asset_id='LINE-A' → ▶
测试并部署新报警规则触发器添加 → 编写 EQL → ▶ 试运行 → 确认结果 → 保存 → 部署
将资产事件中继至外部 SCADA触发器将 EQL 匹配消息发布到 MQTT Topic scada/line-a/events
资产单位规则巡检语句类型=EVENT + 搜索资产 ID → 激活规则列表 + 执行次数
怀疑规则暴走语句从总执行次数大的规则开始确认 → 在详细中审查 EQL/输入
通过自动化接收规则结果流程通过 flow_on_asset_event 触发器直接接收领域规则结果

常见问题​

Q. EQL 和 SQL 是一样的吗? A. 虽然使用相似的语法,但 EQL 是一种增加了 时间窗 和 流 概念的事件处理语言。例如:Point.win:time(5 sec) 仅处理最近 5 秒的数据,Point.win:length(100) 仅处理最近 100 条数据。

Q. 在查询画面执行的查询会自动保存吗? A. 仅点击 ▶ 执行是临时的,必须点击 保存此查询 按钮才会保存到收藏夹。如果是单次分析,无需保存。

Q. 触发器只保存了但没有动作。 A. 保存仅是注册了定义。必须在列表中勾选该触发器并点击 部署选中触发器,实际规则引擎才会注册并开始匹配。

Q. 触发器的目标地址应该如何设定? A. 根据 协议 不同,分隔符也不同。

  • KAFKA: 使用连字符(-) 分隔 — 例: device-machine-topic-1
  • MQTT: 使用斜杠(/) 分隔 — 例: device/machine/topic_1

Q. 语句画面搜索不到结果。 A. 请确认类型选择器中是否选择了 "类型" (全部)。此外,仅输入资产 ID 的一部分即可进行部分匹配搜索。

Q. 总执行次数异常大。 A. 很可能是规则的输入窗太窄或匹配条件太宽泛。请通过 详细 按钮审查 EQL,或使用 流程 的触发器模式(*_pattern)对消息进行预过滤。

Q. 触发器的 EQL 试运行结果为空。 A. 可能是试运行时间点没有数据流入,或者 EQL 的时间窗太长导致首次匹配较慢。建议试运行 1 分钟左右后再查看,或将时间窗调短 (win:time(1 sec)) 后再次测试。

Q. 如何暂时停止触发器? A. 在列表中勾选该触发器,点击 解除。如需重新启动,点击 部署选中触发器。

Q. 资产会自动赋予规则吗? A. 在注册资产时,根据运营环境设置,有时会自动赋予基础领域规则。当前适用的规则可在语句画面确认,如需添加/删除,请联系系统管理员或在资产별设置画面中进行。

Q. 我想自动处理 EQL 结果。 A. 可以通过 流程 的资产触发器(flow_on_asset_event/flow_on_asset_alarm 等)自动接收领域规则结果,并连接至后续动作(发布工作指示·邮件·调用外部 API)。


相关画面​

  • 数据点 — 作为 EQL 输入的时序标签数据
  • 报警 — 触发器引发的报警运营画面
  • 流程 — 通过资产触发器自动处理规则结果
  • 工厂管理 — 在资产树中赋予规则
  • 状态码定义 — 规则评估的状态码(NORMAL/WARN/ERROR)
  • 诊断 — 规则处理中的错误日志