plantpulse-workflow (ワークフロー)
役割
長時間実行タスクとデータパイプラインのオーケストレーションです。2つのエンジンを共に運用します。
| エンジン | 用途 |
|---|---|
| Temporal | 分散ワークフロー、長時間実行タスク(再試行・補償トランザクション)。管理コンソール自体の durable ワークフローもここで |
| Kestra | 宣言型データパイプライン・スケジュール。ウェアハウスアーカイバがジョブを投入します |
| 項目 | 値 |
|---|---|
| モジュール名 | plantpulse-workflow |
| インストールパス | /opt/kopens/plantpulse-platform/plantpulse-workflow/ |
| Temporal | 7233 (gRPC) · 8233 (ウェブ UI、HTTP) |
| Kestra | 8380 (ウェブ UI + API、TLS のみ) · 8391 (管理エンドポイント、内部) |
pd サービス | workflow — MASTER のみ。temporal → kestra |
アーカイブワーカーはここにありません (2026-09-06)
Cassandra → Iceberg アーカイバはかつてこのサービスの3番目のコンポーネントでしたが、プラットフォームイメージの 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 (ウェブ 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 に置き換わります。
ウェブ 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 |
2つのパスワードとも passwd.sh の対象ではありません → ウェブ画面ログインアカウント — Kestra、ローテーションされない値
フロー例
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 | ループバックアドレス | ノードファイル → 設定変更方法 |