plantpulse-workflow (工作流)
角色
长时间运行任务和数据管道的编排。同时运行两个引擎。
| 引擎 | 用途 |
|---|---|
| Temporal | 分布式工作流、长时间运行任务(重试·补偿事务)。管理控制台自身的 durable 工作流也在此处 |
| Kestra | 声明式数据管道·调度。仓库归档程序向其提交作业 |
| 项目 | 值 |
|---|---|
| 模块名 | plantpulse-workflow |
| 安装路径 | /opt/kopens/plantpulse-platform/plantpulse-workflow/ |
| Temporal | 7233 (gRPC) · 8233 (Web UI, HTTP) |
| Kestra | 8380 (Web UI + API, TLS only) · 8391 (管理端点,内部) |
pd 服务 | workflow — 仅 MASTER。temporal → kestra |
此处不包含归档工作线程 (2026-09-06)
Cassandra → Iceberg 归档程序曾是该服务的第三个组件,后来已迁移至平台镜像中的 plantpulse-warehouse 容器。数据湖是基础设施,而"何时何地如何归档哪个表"是业务逻辑 → warehouse 模块
架构
目录结构
plantpulse-workflow/
├── temporal/
│ ├── bin/
│ ├── config/workflow.yaml # 생성물 ← /etc/kopens/conf/workflow.yaml.template
│ └── logs/
└── kestra/
├── bin/
├── config/application.yaml # 생성물 ← /etc/kopens/conf/application.yaml.template
└── logs/
Temporal
| 项目 | 值 |
|---|---|
| 端口 | 7233 (frontend gRPC) · 8233 (Web UI) · 7243 (HTTP API) · 7234/7235/7239 (内部服务) |
| 后端 | PostgreSQL DB temporal · temporal_visibility,账户 temporal (PP_TEMPORAL_USER / PP_TEMPORAL_PASSWORD) |
| 通告地址 | broadcastAddress = PP_TEMPORAL_HOST — 如果为回环地址则拒绝渲染 |
| 指标 | 8244 (仅 127.0.0.1,管理控制台读取) |
PP_TEMPORAL_PASSWORD 不是 Temporal 自身账户,而是后端 PostgreSQL 账户。passwd.sh 将其替换为 ALTER ROLE。
Web UI http://<server-ip>:8233/ 没有登录。仅在隔离网络中开放。
docker exec plantpulse-datalake bash -c 'cd /opt/kopens/plantpulse-platform/plantpulse-workflow/temporal && ./bin/temporal --address 127.0.0.1:7233 workflow list'
Kestra
| 项目 | 值 |
|---|---|
| 端口 | 8380 — 仅 TLS,http:// 无响应。/ 重定向至 /ui/ |
| 登录 | PP_KESTRA_ADMIN_EMAIL / PP_KESTRA_ADMIN_PASSWORD (basic-auth) |
| 后端 | PostgreSQL DB kestra,账户 kestra (PP_KESTRA_DB_USER / PP_KESTRA_DB_PASSWORD) — 与登录账户值不同 |
| 存储 | /data1/pp-data/kestra/storage |
两个密码都不属于 passwd.sh 范围 → Web 控制台登录账户 — Kestra,不可轮换的值
示例 Flow
id: daily-report
namespace: plantpulse
description: 매일 새벽 2시에 보고서 스크립트 실행
triggers:
- id: every-2am
type: io.kestra.plugin.core.trigger.Schedule
cron: "0 2 * * *"
tasks:
- id: run
type: io.kestra.plugin.scripts.shell.Commands
commands:
- echo "report"
运维命令
docker exec plantpulse-datalake pd status workflow
docker exec plantpulse-datalake pd restart workflow # Temporal + Kestra
docker exec plantpulse-datalake pd logs --lines 100 workflow
常见问题
| 症状 | 原因 | 处理 |
|---|---|---|
| Temporal 启动失败 | PostgreSQL 未就绪·temporal 角色密码不匹配 | pd status storage,passwd.sh PP_TEMPORAL_PASSWORD |
| Kestra 启动失败 | kestra 角色密码不匹配 | 边车的 PP_KESTRA_DB_PASSWORD — 启动时 pd 将其与角色同步 |
http://…:8380 无法打开 | 仅 TLS | https:// |
| 归档未运行 | 仓库端问题 | pd retention 中的 cold_tier·archive_job,仓库容器日志 |
Temporal broadcastAddress 错误·渲染 exit 8 | 回环地址 | 节点文件 → 配置修改方法 |