运营
CEP 是 pd 的 cep 服务之一 — API · 控制台 · 引擎处于同一进程中。
| 项目 | 值 |
|---|---|
| 端口 | 7400 (HTTP) · 7401 (TLS) |
pd 服务 | cep — 仅限 MASTER |
| 配置 | plantpulse-cep.properties (已渲染) |
| 规则 · 事件类型 | PostgreSQL datalake DB |
| 输入 · 输出 | Valkey |
docker exec plantpulse-datalake pd status cep
docker exec plantpulse-datalake pd restart cep
docker exec plantpulse-datalake pd logs --lines 200 cep
启动在哪个后端 — 一行日志即是答案
CEP input path: aster.
ingest.rate_1m 不是证据无论在哪个引擎上启动,流入量都会增加。「正在运行」与「什么在运行」是不同的问题。
选择后端的方法和切换顺序请参阅 后端。
读取注册结果
语句被注册,且注册具有结果。
curl -fsS -H "X-API-Key: ${PP_CEP_API_KEY}" http://127.0.0.1:7400/api/v1/eql/registration
| 结果 | 含义 |
|---|---|
| ACTIVE | 已启动的后端已接收并正在运行 |
| REJECTED | 已保存但不运行。随附令牌说明是由哪项配置导致 |
REJECTED 不是«缺陷»而是列表该数值不一定必须为 0 才正常。被拒绝的语句是下一步操作的输入 — 例如去掉相关配置重新编写、更换后端或请求该功能。
关键在于并非静默处理。拒绝记录会被保存、命名并可查询。
可移植性另行询问。
curl -fsS -H "X-API-Key: ${PP_CEP_API_KEY}" http://127.0.0.1:7400/api/v1/eql/portability
主要 API
| 路径 | 功能 |
|---|---|
POST /api/v1/eql/deploy | 语句注册 |
POST /api/v1/eql/validate | 仅判定 |
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 | 匿名就绪检查 (readiness) — 引擎 · 缓存 · 架构 (schema) |
服务器统计每条语句的匹配与输出,并通过上述两个端点输出。无论在哪个后端启动,结果均一致。
不输出每条语句的 CPU · 墙钟时间 (wall-clock time) — 将无法测量的数值输出为 0 会被误读为「快速」。
规则的正本 — 意图在 DB,事实在引擎
| 问题 | 正本 |
|---|---|
| 「应该有哪些规则」 | cep_statement (datalake DB) |
| 「正在运行哪些规则」 | 已启动的引擎自身 |
CREATE TABLE IF NOT EXISTS cep_statement (
statement_name VARCHAR(200) NOT NULL,
eql TEXT NOT NULL,
updated_at_ms BIGINT NOT NULL DEFAULT 0,
updated_by VARCHAR(64) NOT NULL DEFAULT '',
CONSTRAINT cep_statement_pkey PRIMARY KEY (statement_name)
);
一条语句对应一行,注册即写入,注销即删除。
CEP 是规则引擎而非资产管理系统。因此,它将«应该运行什么»记录在自己的表中。
enabled 列是刻意设计停止运行的唯一信号是不存在该行,而这正是注销操作创建的状态。永远为真的列会被误读为不存在的开关。
statement_name 作为主键也是出于此考虑 — 拒绝并解决同一个名称拥有两个正文的情况。
updated_at_ms · updated_by 不被代码读取 — 仅供故障期间坐在 psql 前的人员使用。
三张表(cep_statement · cep_event_type · cep_api_key)在 CEP 启动时由其自行创建。 全部采用«若存在则保留»的形式,因此同样适用于已有数值的安装环境。
输入 — Valkey 流 (Stream)
| 配置 | 默认值 |
|---|---|
| 流前缀 | PP:CEP-IN-STREAM |
| 分片数 | 16 (cep.stream.shard_count) |
| 单次读取数量 | 1000 |
| TLS | 关闭 — 数值来自 cache.ssl.enabled |
tls 默认值为«关闭»是基于实测结果Platform Valkey 配置中没有 TLS 端口声明,使用明文提供服务。
🔴 若该值错误,不会触发明显的失败。 尝试使用 TLS 连接明文服务器会导致握手超时 (handshake timeout),这会被误读为网络故障而非配置问题。
失败或积压的事件将保存在死信队列 (dead letter) 中 — 请勿将其改为静默丢弃。
输出 — 每条语句对应一个主题 (Topic)
结果将发送至每个语句名称对应的唯一 Valkey 主题中。
- 若订阅者为 0,仅记录日志。 由于发布操作在没有订阅者时也能成功,因此此处是结果静默消失的地方。
- 重新部署时,请在停止消费者之后清空注册表。若顺序相反,每次重新部署都会堆积死信。
时区
| 层级 | 值 | 决定方 |
|---|---|---|
| 传输 (wire) | epoch ms | 无时区。 在任何 PP_TZ 中数值均相同 |
| 窗口边界 | 语句 > PP_TZ > 拒绝 | WINDOW TUMBLING … AT TIME ZONE |
注册响应中将包含实际使用的时区及其来源 — 以便后续追溯「是哪个零点」。
不进行推测选择。静默选择的时区会导致每个部署主机产生不同的答案。
配置值
| 键 | 默认值 | 说明 |
|---|---|---|
cep.backend | aster | 后端 — aster · flink。若不配置,则启动为 aster。其他值(包括 esper · siddhi 等旧值)会导致启动停止并提示名称 |
cep.mode | native | 若为 portable,则询问基准后端 (Aster CEP) |
cep.stream.shard_count | 16 | 输入分片 |
cep.consumer.thread_count | 16 | 消费者线程 |
cep.api.max_eql_text_length | 100000 | 语句长度上限 |
cep.storage.ttl_seconds | 864000 (10天) | 运营指标保留周期 |
cep.api.key | 管理 API 的 X-API-Key | |
cep.web.user · cep.web.password | 控制台登录 — 若为空则关闭控制台 |
更改数值的流程请参阅 更改配置方法,密钥轮转请参阅 更改密码 · API 密钥。
正本是部署时渲染的模板。