plantpulse-workflow (Workflow)
Rolle
Orchestrierung von lang laufenden Aufgaben und Datenpipelines. Betrieb von zwei Engines gemeinsam.
| Engine | Verwendung |
|---|---|
| Temporal | Verteilte Workflows, lang laufende Aufgaben (Retry · kompensierende Transaktionen). Auch die durable Workflows der Verwaltungskonsole laufen hier |
| Kestra | Deklarative Datenpipelines · Zeitplanung. Der Warehouse-Archiver übermittelt Jobs |
| Element | Wert |
|---|---|
| Modulname | plantpulse-workflow |
| Installationspfad | /opt/kopens/plantpulse-platform/plantpulse-workflow/ |
| Temporal | 7233 (gRPC) · 8233 (Web-UI, HTTP) |
| Kestra | 8380 (Web-UI + API, nur TLS) · 8391 (Verwaltungs-Endpunkt, intern) |
pd Dienst | workflow — nur MASTER. temporal → kestra |
Archiv-Worker ist hier nicht mehr vorhanden (2026-09-06)
Aster TSDB → Iceberg-Archiver war kurzzeitig eine dritte Komponente dieses Dienstes und wurde in den Plattform-Container plantpulse-warehouse-web des Plattform-Images verschoben. Das Data Lake ist Infrastruktur, «welche Tabelle wann und wie archiviert wird» ist Geschäftslogik → Warehouse-Modul
Konfiguration
Verzeichnisstruktur
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
| Element | Wert |
|---|---|
| Port | 7233 (Frontend-gRPC) · 8233 (Web-UI) · 7243 (HTTP-API) · 7234/7235/7239 (interne Dienste) |
| Backend | PostgreSQL-DB temporal · temporal_visibility, Konto temporal (PP_TEMPORAL_USER / PP_TEMPORAL_PASSWORD) |
| Werbungsadresse | broadcastAddress = PP_TEMPORAL_HOST — bei Loopback wird Rendering verweigert |
| Metrik | 8244 (nur 127.0.0.1, von Verwaltungskonsole gelesen) |
PP_TEMPORAL_PASSWORD ist kein Temporal-eigenes Konto, sondern Backend-PostgreSQL-Konto. passwd.sh ändert ALTER ROLE.
Das Web-UI http://<server-ip>:8233/ hat keine Anmeldung. Nur im privaten Netzwerk öffnen.
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
| Element | Wert |
|---|---|
| Port | 8380 — nur TLS, http:// antwortet nicht. / wird auf /ui/ umgeleitet |
| Anmeldung | PP_KESTRA_ADMIN_EMAIL / PP_KESTRA_ADMIN_PASSWORD (basic-auth) |
| Backend | PostgreSQL-DB kestra, Konto kestra (PP_KESTRA_DB_USER / PP_KESTRA_DB_PASSWORD) — anderer Wert als das Anmeldekonto |
| Speicher | /data1/pp-data/kestra/storage |
Beide Passwörter sind nicht Ziel von passwd.sh → Web-UI-Anmeldekonto — Kestra, Nicht rotierte Werte
Beispiel-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"
Betriebsbefehle
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
Häufig auftretende Probleme
| Symptom | Ursache | Maßnahme |
|---|---|---|
| Temporal-Start fehlgeschlagen | PostgreSQL nicht bereit · temporal Rollen-Passwort stimmt nicht überein | pd status storage, passwd.sh PP_TEMPORAL_PASSWORD |
| Kestra-Start fehlgeschlagen | kestra Rollen-Passwort stimmt nicht überein | PP_KESTRA_DB_PASSWORD des Sidecars — beim Booten passt pd an die Rolle an |
http://…:8380 öffnet nicht | Nur TLS | https:// |
| Archivierung funktioniert nicht | Auf Warehouse-Seite | pd retention cold_tier · archive_job, Warehouse-Container-Logs |
Temporal broadcastAddress Fehler · Rendering exit 8 | Loopback-Adresse | Knotendatei → Einstellungen ändern |