plantpulse-cep (复合事件处理)
角色
Complex Event Processing 层。实时检测多个事件的时间和逻辑模式,以执行报警、Flow 触发和自动化。规则使用 EQL(PlantPulse CEP SQL) 编写。
| 项目 | 值 |
|---|---|
| 模块名 | plantpulse-cep |
| 安装路径 | /opt/kopens/plantpulse-platform/plantpulse-cep/ |
| 端口 | 7400 (HTTP) · 7401 (TLS) |
| 执行引擎 | 启动时仅限一个 — Aster CEP(cep.backend=aster, 未设置时也相同) |
pd 服务 | cep — 仅 MASTER |
| API 认证 | X-API-Key: <PP_CEP_API_KEY> |
| 控制台登录 | PP_CEP_WEB_USER / PP_CEP_WEB_PASSWORD — 若为空则仅关闭控制台 |
语言 · 后端 · 运维 · 限制请参阅专用章节
本页涵盖 模块与文件。关于语句的编写和运行方法,请参阅 CEP 章节。
使用示例
“若触发报警后 30 分钟内 未收到解除信号,则上报为未解除”
SELECT a.machineId AS machine
FROM pattern [every a=AlarmEvent -> not ClearEvent for 30 min]
构成
API · 控制台 · 引擎位于同一进程。运行的引擎仅为启动时选择的 一个。
目录结构
plantpulse-cep/
├── config/plantpulse-cep.properties # 생성물 ← plantpulse-datalake-cli 의 템플릿
├── bin/start.sh
├── logs/
└── server/ # 내장 Tomcat — webapps/ROOT.war · logs/catalina.<date>.log
主要配置
# 백엔드 — 부팅 시 하나. 미설정이면 이전 것을 그대로 유지한다
cep.backend=aster
#cep.mode=native # native | portable
# 이벤트 입력 (Valkey 스트림)
cache.host=${PP_REDIS_HOST}
cache.port=${PP_REDIS_PORT}
cache.password=${PP_REDIS_PASSWORD}
cache.ssl.enabled=false
cep.stream.shard_count=16
cep.consumer.thread_count=16
# 룰 · 이벤트 타입 레지스트리 (PostgreSQL datalake DB — CEP 가 표를 스스로 만든다)
jdbc.datalake.url=jdbc:postgresql://${PP_POSTGRES_HOST}:${PP_POSTGRES_PORT}/datalake
jdbc.datalake.username=${PP_DATALAKE_DB_USER}
jdbc.datalake.password=${PP_DATALAKE_DB_PASSWORD}
# 운영 지표 (Cassandra)
storage.host=${PP_CASSANDRA_HOST}
storage.keyspace=${PP_KEYSPACE}
cep.storage.ttl_seconds=864000 # 10일
# 인증
cep.api.key=${PP_CEP_API_KEY}
cep.web.user=${PP_CEP_WEB_USER}
cep.web.password=${PP_CEP_WEB_PASSWORD}
cep.api.max_eql_text_length=100000
仅在以 Flink 启动时
cep.flink.* 才有意义同一文件中保留有 cep.flink.reconciler.enabled · cep.flink.router.enabled。若以其他后端启动,这些配置将被忽略,且名称仅在日志中记录一次。
曾出现过在开启状态下以其他后端启动,导致 同一语句在两个引擎中运行并重复发布结果 的情况 → 后端
修改值的步骤请参阅 修改配置方法,API 密钥轮换请参阅 更改密码 · API 密钥。
主要 API
| 路径 | 功能 |
|---|---|
POST /api/v1/eql/deploy | 语句注册 |
POST /api/v1/eql/validate | 仅判定 — SUPPORTED / UNSUPPORTED / UNPARSEABLE |
DELETE /api/v1/eql/undeploy/{id} | 注销注册 |
GET /api/v1/eql/registration | 注册结果表 (ACTIVE / REJECTED) |
GET /api/v1/eql/portability | 可移植性 |
GET /api/v1/eql/metrics/snapshot · /metrics/engine | 每条语句的匹配率 · 输出率,引擎指标 |
GET·POST·PUT·DELETE /api/v1/event-types | 事件类型注册 |
GET·POST·DELETE /api/v1/keys | API 密钥 |
GET /api/health | 匿名就绪状态 — 引擎 · 缓存 · 模式 |
运维命令
docker exec plantpulse-datalake pd status cep
docker exec plantpulse-datalake pd restart cep
docker exec plantpulse-datalake pd logs --lines 200 cep
# 어느 백엔드로 떴나 — 판정 지표는 로그 한 줄이다
docker exec plantpulse-datalake sh -c 'grep "CEP input path" ... | tail -1'
curl -fsS http://127.0.0.1:7400/api/health
常见问题
| 现象 | 原因 | 措施 |
|---|---|---|
注册状态为 REJECTED | 启动的后端无法接收该配置 | 在 拒绝令牌 中查找该行 |
| 注册被 400 拒绝 | 未注册的事件类型 | 事件类型注册 |
| CEP 完全无法启动 | cep.backend 拼写错误或 WAR 中缺少该运行时 | 日志会提示名称。无备选方案 |
| 无结果输出 | 订阅者为 0 | 查看日志中的 no subscriber |
| 结果重复接收 | 在 cep.flink.* 开关开启时以其他后端启动 | 后端 |
健康状态 DEGRADED,原因为表名称 | 缺失 CEP 专用表 | 查看 DB 连接(jdbc.datalake.*)并重启 — 启动时会自动创建 |
| API 401 | API 密钥不匹配 | passwd.sh PP_CEP_API_KEY |
| 控制台登录被拒绝 | PP_CEP_WEB_PASSWORD 为空 | Web 界面登录账号 |
相关文档
- CEP 章节 — 概览 · EQL · 后端 · 事件类型 · 运维 · 限制
- 数据湖概览
- CEP 控制台 (7401)
- CEP 客户端