CEP (复合事件处理)
目录
概述
CEP(Complex Event Processing) 功能是一种规则引擎,可从实时事件流中发现有意义的模式并立即执行动作(存储·发布·报警)。当前在左侧菜单中以 Automation 组的 EQL 查询 与 语句 形式呈现。
| 子菜单 | 内部 URL | 用途 |
|---|---|---|
| EQL 查询 | /query/index | 向实时流投递 EQL(Event Query Language) 临时查询并即时查看结果 |
| 语句 | /statement/index | 查询以资产为单位的领域规则(状态/聚合/事件/命令) |
CEP 规则的结果也会自动连接到流程的资产触发器(flow_on_asset_event 等)。
界面构成 — Automation 组的 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 的安装环境中,请仅将以下内容作为遗留参考。新的自动化应优先使用流程的触发器节点与 Automation > 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) | 发布目标主题/通道 — 分隔符: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 | 状态 | 用 EQL 定义资产当前状态(运行/停止/异常) |
AGGREGATION | 聚合 | 在一定窗口内进行平均值/最大值等聚合 |
EVENT | 事件 | 发生特定模式(超阈值等)时发布领域事件 |
COMMAND | 命令 | 规则匹配时向资产发布命令(flow_on_asset_command) |
列表表格
| 列 | 宽度 | 说明 |
|---|---|---|
| 状态 | 80px | 启用/停用徽标 |
| 应用的资产 ID | 150px | 规则所赋予的资产标识符 |
| 类型 | 80px | 4 种类型之一(参考上表) |
| 语句名 | 自动 | 规则名称 |
| 说明 | 300px | 规则备注 |
| 总执行次数 | 80px | 规则匹配的累计次数 |
| 最后执行日期 | 120px | 最近一次匹配时刻 |
| 错误 | 60px | 累计错误计数 |
| 注册日期 | 120px | 规则注册时刻 |
| 详情 | 50px | 点击进入规则详情界面(/statement/view) |
详情查看
点击列表中的 详情 按钮会进入独立界面(/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 主题 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)。