본문으로 건너뛰기

plantpulse-workflow (워크플로우)

역할

장시간 실행 작업과 데이터 파이프라인의 오케스트레이션입니다. 엔진 둘을 함께 운영합니다.

엔진용도
Temporal분산 워크플로우, 장시간 실행 작업(재시도 · 보상 트랜잭션). 관리 콘솔 자신의 durable 워크플로우도 여기서
Kestra선언형 데이터 파이프라인 · 스케줄. 웨어하우스 아카이버가 잡을 제출합니다
항목
모듈명plantpulse-workflow
설치 경로/opt/kopens/plantpulse-platform/plantpulse-workflow/
Temporal7233 (gRPC) · 8233 (웹 UI, HTTP)
Kestra8380 (웹 UI + API, TLS 전용) · 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 (웹 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.shALTER ROLE 로 바꿉니다.

웹 UI http://<서버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 대상이 아닙니다 → 웹 화면 로그인 계정 — 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 retentioncold_tier · archive_job, 웨어하우스 컨테이너 로그
Temporal broadcastAddress 오류 · 렌더 exit 8루프백 주소노드 파일 → 설정 바꾸는 법

관련 문서