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 | 部署/解除 徽章 |
| 触发器 ID | 110px | 系统自动分配 ID |
| 触发器名称 | 说明 | 自动 | 运营人员指定元数据 |
| MQ 流传输 | 70px | 是否使用 MQ 发布 (Y/N) |
| 存储保存 | 70px | 是否将结果加载到存储 (Y/N) |
| 总执行次数 | 70px | 累积匹配次数 |
| 最后执行日期 | 110px | 最近一次匹配时间 |
| 错误 | 70px | 累积错误计数 |
| 注册日 | 110px | 注册时间 |
| 最后修改日 | 110px | 最后修改时间 |
| 操作 | 80px | 修改·删除按钮 |
页面底部显示提示框。
自定义触发器的使用 可以添加在符合特定条件时执行动作的自定义触发器。此外,可以通过 MQ 进行流传输或将其保存到存储中。
触发器添加/修改表单
通过顶部 添加触发器 按钮进入表单画面(/trigger/form)。
1) 基本信息 fieldset
| 输入 | path | 宽度 | 备注 |
|---|---|---|---|
| 触发器 ID | trigger_id | 200px | 只读 — 系统自动分配 |
| 触发器名称 | trigger_name | 450px | 易于识别的名称 |
| 说明 | trigger_desc | 600 × 100px (textarea) | 触发器用途 |
2) EQL fieldset
| 输入 | path | 说明 |
|---|---|---|
| EQL | epl | 8 行 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 (复选框) | 是否将结果数据加载到存储 |
存储表名·列定义区域由于触发器结果存储表固定,当前处于禁用状态。
提交表单
| 按钮 | 动作 |
|---|---|
| 列表(☰) | 返回触发器列表画面 |
| 保存 (蓝色) | 输入验证后保存。仅保存尚未部署,必须在列表画面点击 部署选中触发器 实际动作才开始 |
全部重新部署
| 按钮 | 位置 | 动作 |
|---|---|---|
| 全部重新部署 | 列表面板页眉右侧 (🔁) | 批量重新部署所有注册的触发器。用于规则引擎重启后或系统巡检后 |
运营流程
- 添加触发器 → 输入 EQL·流传输·存储选项 → 保存
- 在列表中勾选该触发器 → 点击 部署选中触发器 → 状态变更为 "部署"
- 运行中如需暂时停止,点击 解除 → 状态变更为 "解除"
- 巡检后通过 全部重新部署 批量重新启动
语句画面 (/statement/index)
这是一个用于查询按资产单位注册的领域规则(状态/聚合/事件/命令)的状态和执行统计的画面。
顶部搜索·筛选
√ 스테이트먼트 [유형 ▼] [검색 ...] [조회] [↻]
| 控件 | 选项 | 说明 |
|---|---|---|
类型选择器 (search_type) | 所有类型·状态(CONTEXT)·聚合(AGGREGATION)·事件(EVENT)·命令(COMMAND) | 4 种规则类型筛选 |
搜索输入 (txt) | (250px) | placeholder: "搜索 ..." — 规则名/适用资产 ID/说明关键字 |
| 查询 | (红色 + 🔍) | search() — 按条件更新列表 |
| 刷新 | (红色 + ↻) | refresh() — 刷新画面 |
4 种规则类型
| 代码 | 含义 |
|---|---|
CONTEXT | 状态 |
AGGREGATION | 聚合 |
EVENT | 事件 |
COMMAND | 命令 |
列表表格
| 列 | 宽度 | 说明 |
|---|---|---|
| 状态 | 80px | 激活/禁用 徽章 |
| 适用资产 ID | 150px | 规则赋予的资产标识符 |
| 类型 | 80px | 4 种类型之一 (参考上表) |
| 语句名称 | 自动 | 规则名称 |
| 说明 | 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)。