メインコンテンツまでスキップ

plantpulse-workflow (ワークフロー)

役割​

長時間実行ジョブとデータパイプラインのオーケストレーションです。エンジン2つを同時に運用します。

エンジン用途
Temporal分散ワークフロー、長時間実行ジョブ(再試行・補償トランザクション)。管理コンソール自身のdurableワークフローもここで
Kestra宣言型データパイプライン・スケジュール。ウェアハウスアーカイバーがジョブを提出します
項目値
モジュール名plantpulse-workflow
インストールパス/opt/kopens/plantpulse-platform/plantpulse-workflow/
Temporal7233 (gRPC) · 8233 (Web UI, HTTP)
Kestra8380 (Web UI + API、TLS専用) · 8391 (管理エンドポイント、内部)
pd サービスworkflow — MASTER のみ。temporal → kestra
アーカイブワーカーはここにはありません (2026-09-06)

Aster TSDB → Iceberg アーカイバーは一時的にこのサービスの3番目のコンポーネントでしたが、プラットフォームイメージの plantpulse-warehouse-web コンテナに移されました。データレイクはインフラであり、「どのテーブルをいつ・どのようにアーカイブするか」はビジネスロジックだからです → 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, ローテーションされない値

フロー例​

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ループバックアドレスノードファイル → 設定を変更する方法

関連ドキュメント​