pd — DataLake CLI
pd(PlantPulse DataLake) ist ein Einzeleinstiegspunkt-Befehl zum Starten · Stoppen · Diagnostizieren von acht Diensten im DataLake-Container, zum Rendern von Konfigurationen und zum Erstellen von Sicherungen. Nahezu alles, was die Verwaltungskonsole anzeigt, ist die --json-Ausgabe dieses Befehls.
| Element | Wert |
|---|---|
| Modul | plantpulse-datalake-cli |
| Speicherort | Im Container /opt/kopens/plantpulse-platform/plantpulse-datalake-cli/bin/pd (in PATH) |
| Auf dem Host | nicht vorhanden — muss docker exec plantpulse-datalake pd … |
docker exec plantpulse-datalake pd status # 하나만 칠 때
/opt/kopens/plantpulse-platform-docker/bin/shell.sh # 여러 개 칠 때 — 셸을 열고 pd … 만 친다
Das Starten/Stoppen/Neustarten der gesamten Plattform erfolgt über /opt/kopens/plantpulse-platform-docker/bin/ auf dem Host — up.sh · down.sh · restart.sh · restart-datalake.sh · status.sh. pd ist ein Werkzeug eine Ebene darunter, das die Dienste im Container verwaltet. Da der Container selbst beim Hochfahren pd start und beim Herunterfahren pd stop ausführt, müssen Operatoren pd start selten von Hand aufrufen. Meistens geht es um »Status anzeigen« und »einen Dienst neu starten«.
30-Sekunden-Zusammenfassung
Sicherheitsgrad: Lesen = ändert nichts · Ändern = ändert Status · Destruktiv = löscht Daten oder Prozesse.
| Verb | Eine Zeile | Grad |
|---|---|---|
pd status [서비스] [--wait] | Porttabelle. Exit 0 nur wenn alle Zeilen RUNNING | Lesen |
pd doctor | Umgebung · Secrets · Templates · Runtime-Baum prüfen (PASS / FAIL / N/A) | Lesen |
pd env | Verzeichnis · Image-Identität dieses Knotens — nur Deklaration, keine Messung | Lesen |
pd logs [--list] [--lines N] [서비스…] | Service-Logs verfolgen | Lesen |
pd storage | Volumen · WAL · Replikationslots · Speichergröße · Kafka-Aufbewahrung | Lesen |
pd retention | Tabellen-TTL · Topic-Aufbewahrung · Cold Tier · Archive-Jobs | Lesen |
pd flow | Kafka Consumer Group Lag | Lesen |
pd downtime | Ungeplante Ausfallzeiten — nur Neustart | Lesen |
pd config list · diff · diff --templates | Template → Pfadtabelle · Runtime vs. Render · Host-Template vs. Image-Defaults | Lesen |
pd node status · info · cql · psql … | Cassandra / PostgreSQL Abfragen und Shell | Lesen |
pd backup list · schedule · status | Physische Backup-Sets · Timer · Aktuell laufend | Lesen |
pd backup restore … --dry-run | Nur Restore-Plan | Lesen |
pd start [서비스] · stop · restart [--clean] | Nacheinander starten · in umgekehrter Reihenfolge stoppen (mit Stopp-Beweis) · beides | Ändern |
pd config render | Konfigurationsartefakte tatsächlich schreiben | Ändern |
pd secret rotate VAR=값 | Credential-Rotation — vom Host aus passwd.sh aufgerufen. Nicht manuell aufrufen | Ändern |
pd backup · pd backup run --engine E --type full|diff | Logisches Dump · physisches Backup einmalig | Ändern |
pd backup schedule set|reset | Backup-Timer planen | Ändern |
pd node add · repair · compact · flush · drain … | Cassandra-Wartung | Ändern |
pd clean | Logs gestoppter Module · temporäre Dateien löschen | Destruktiv (Logs) |
pd kill [--dry-run] | Alle Prozesse unter PP_HOME mit SIGKILL | Destruktiv |
pd recover [파일] | DROP der pp Datenbank und Restore mit logischem Dump | Destruktiv |
pd backup restore … --yes | Datenverzeichnis auf physisches Backup zurücksetzen | Destruktiv |
pd node cleanup · remove <host-id> | Snapshots löschen · Knoten aus Ring entfernen | Destruktiv |
Optionssätze haben bei jedem Verb die gleiche Bedeutung.
| Option | Bedeutung |
|---|---|
--json | Ein JSON-Dokument statt Tabelle für Menschen. Das Format, das die Konsole liest. Nur bestimmte Verben akzeptieren dies; wenn an andere angehängt, exit 2 ablehnen |
--show-secrets | Nur config diff. Passwörter nicht mit *** maskieren. Kann nicht mit --json verwendet werden |
PD_DEBUG=1 | DEBUG-Logs. Prefix wie PD_DEBUG=1 pd start |
Services und Startreihenfolge
Die acht Services starten in festgelegter Reihenfolge. Die Quelle ist ein einziges services/order.txt. pd start geht von oben nach unten, pd stop in umgekehrter Reihenfolge.
| Reihenfolge | Service | MASTER | WORKER | Komponenten darin | pd status Zeile (Ports) |
|---|---|---|---|---|---|
| 1 | storage | ○ | ○ | valkey → postgres → cassandra → minio (nur MASTER) | 6379 · 5432 · 9042 · 9000 |
| 2 | analytics | ○ | ○ | spark-master → hive → gravitino → kyuubi (WORKER: spark-worker · kyuubi) | 7077 · 4440 · 9083 · 19001 · 10000 |
| 3 | messaging | ○ | — | kafka · mqtt (HiveMQ) | 9092 · 1883 |
| 4 | timeseries | ○ | — | engine (TSE) · dashboard (Grafana) | 7800 · 3000 |
| 5 | cep | ○ | — | Tomcat | 7400 |
| 6 | workflow | ○ | — | temporal → kestra | 7233 · 8233 · 8380 |
| 7 | data-gateway | ○ | — | Tomcat | 5500 |
| 8 | admin-api | ○ | ○ | Admin Console Backend | 4949 |
- Nach dem Start jedes Service wird gewartet, bis die Healthcheck UP zurückgibt, bevor zum nächsten übergegangen wird (Limits: storage 1800 Sekunden, analytics 600 Sekunden, Rest 300 Sekunden).
storageundanalyticssind Gatekeeper. Falls sie nicht starten, wird nicht versucht, die nachfolgenden zu starten, und exit 5. Die restlichen geben eine Warnung aus und fahren fort (am Ende exit 6).timeseriesist ab 2026-09-05 nur noch MASTER.plantpulse-sqlwird am 2026-09-07 eingestellt und fehlt in der Liste.
Lebenszyklus
pd status # 전체 표 — 마지막 줄 "0 STOPPED" 면 정상
pd status storage # 서비스 하나의 헬스체크
pd status storage --wait # UP 이 될 때까지 대기
pd start cep # 죽은 서비스 하나 다시 띄우기
pd stop cep # 서비스 하나 내리기 — «멈췄다» 를 증명한다 (30초 + SIGTERM 15초 + SIGKILL 10초)
pd restart cep # stop → (정지가 증명되면) 5초 → start
pd restart cep --clean # 사이에 pd clean
pd restart # 전부 — 몇 분 걸린다. storage 가 먼저 돌아온다
Der Status von pd status hat vier Zustände.
| Status | Bedeutung |
|---|---|
RUNNING | Port ist offen |
STOPPED | Port ist geschlossen. Kurz nach dem Start ist dies ein Fenster — nach 1 Minute neu prüfen |
UNKNOWN | nicht gemessen — Meßwerkzeug nicht vorhanden. Bedeutet nicht »tot« |
DISABLED | Mit PD_OPTIONS beendet. Exit-Code nicht geändert |
pd stop exit 7 ist, nicht sofort pd start ausführenSTILL RUNNING bedeutet, dass der Stop nicht nachgewiesen werden konnte. Das Starten auf überlebende Prozesse führt zu Portkonflikten und Datenbeschädigung. Mit pd kill --dry-run prüfen, was noch läuft, dann mit pd kill, pd status Leerstand bestätigen, dann pd start. FORCE=1 pd start nicht verwenden.
Die Docker HEALTHCHECK des Containers selbst ruft nicht pd status auf (zu langsam und manchmal instabil). Stattdessen prüft er, ob postgres · cassandra auf echte Abfragen antworten und ob alle Ports offen sind. Deshalb ist »docker ps ist healthy, aber pd status ist STOPPED« ein Startfenster oder eine verpasste Messung, und »unhealthy, aber pd status alle RUNNING« bedeutet, dass Ports offen sind, aber auf Abfragen nicht antworten (pd logs storage).
Diagnose
pd doctor # 여섯 절 검사. 마지막 줄 FAIL 0 이면 된다
pd env # 디렉터리 · 이미지 정체 (0.25초)
pd logs --list # 따라갈 파일 목록만
pd logs --lines 50 cep # cep 만, 마지막 50줄부터
pd storage # 볼륨 90% 이상이면 FAIL
pd retention # 왜 안 줄어드나 — TTL · 토픽 보존 · 콜드 티어
pd flow # 데이터가 안 들어온다 — 컨슈머 lag
pd downtime # 자꾸 죽는 것 같다 — 계획 밖 정지 기록
Die sechs Abschnitte von pd doctor: [1] inputs (Secrets · Knotendateien · Image) · [2] tools · [3] config templates (alles gerendert?) · [4] runtime tree · [5] TLS material · [6] core ports. N/A ist »hier nicht messbar«, und der Grund steht in Klammern. Fehlende Sidecar-Dateien im Container sind normal — Werte kommen über Umgebungsvariablen.
pd flow von NA bedeutet nicht »hinterhängig«, sondern »nie gelesen«. Wenn die Spalte MEMB 0 ist, läuft der Consumer nicht. Wenn sie größer als 0 ist und das Topic leer ist, ist das normal (nichts zum Lesen). Wenn sie größer als 0 ist und das Topic Daten enthält, ist das ein echtes Warnsignal.
Konfiguration
pd config list # 이 모드의 템플릿 → 경로 표
pd config diff # 런타임 파일 vs 지금 렌더하면 나올 것 (0 같음 / 1 다름 / 3 시크릿 없음 / 4 렌더 실패)
pd config diff --templates # 호스트 템플릿 vs 이미지 기본값 (same / differs / local / missing)
pd config render # 실제로 쓴다 — 그 뒤 pd restart <서비스> 까지가 한 세트
Das Verfahren zum Ändern von Werten und »was muss ich anpassen« befindet sich unter Konfiguration ändern. Artefakte im Container nicht direkt bearbeiten — sie verschwinden beim nächsten pd start.
Cassandra · PostgreSQL Knoten manipulieren
pd node status # nodetool status — UN 이 정상, DN 이면 죽은 노드
pd node status --json # + PostgreSQL 복제 · Valkey 복제 · 워커 명부
pd node info # 노드 상세
pd node cql # cqlsh (cassandra 계정)
pd node psql # psql (postgres OS 사용자)
pd node errors # cassandra debug.log 의 최근 WARN/ERROR
pd node topic # kafka 토픽 "event" describe
pd node tpstats | compactionstats | proxyhistograms | table-stats [ks] | table-histograms <ks> <tbl> | sstable-size <ks> <tbl> | disk
| Verb (ändert) | Grad | Eine Zeile |
|---|---|---|
pd node add | Ändern | RF des Keyspace an Anzahl lebender Knoten anpassen (max. 3) und repair durchführen. Nach Hinzufügen eines Workers einmal auf dem Master ausführen |
pd node repair · repair-table <ks> <tbl> | Ändern (intensiv) | Datenunsicherheiten zwischen Knoten abstimmen |
pd node flush · drain | Ändern | Schreibvorgänge aus dem Speicher auf die Festplatte. drain lehnt dann Schreibvorgänge ab, also nur vor dem Stopp |
pd node compact [ks] [tbl] | Ändern (intensiv) | SSTable-Verdichtung |
pd node cleanup | Destruktiv | Alle Snapshots löschen + Daten löschen, die dieser Knoten nicht mehr besitzt |
pd node remove <host-id> | Destruktiv | Toten Knoten aus dem Ring entfernen. Nicht auf lebenden Knoten schreiben |
pd node upgrade · init-cms · train-zstd · cache-clear | Ändern | Installationsprozess · Upgrade · OS-Seiten-Cache leeren |
Backup · Restore
pd backup # PostgreSQL 논리 덤프 → /data1/pp-data/postgres/dump/
pd backup list | schedule | status
pd backup run --engine postgres --type diff
pd backup restore --engine postgres --set <세트> --dry-run # 계획 먼저
pd recover [덤프파일] # pp DB 하나를 논리 덤프로 되돌림 (파괴적)
Das Verfahren befindet sich unter Backup · Restore.
Exit-Codes
| Code | Bedeutung |
|---|---|
| 0 | Erfolg. status alle RUNNING, doctor FAIL count 0, config diff keine Unterschiede |
| 1 | Allgemeiner Fehler · »unterscheidet sich« · »Problem vorhanden« |
| 2 | Nutzungsfehler — unbekanntes Verb · Service · Option, --json abgelehnt, PP_HOME nicht angegeben |
| 3 | Erforderliche Secrets fehlen — Nachricht mit allen Namen. In backup run · restore: »anderes Backup läuft bereits« |
| 4 | Render-Fehler — unersetzte ${PP_*}, alle Namen aufgelistet |
| 5 | Gatekeeper-Service (storage · analytics) konnte nicht starten; Start abgebrochen |
| 6 | Start abgeschlossen, aber einige Services nicht bereit |
| 7 | Stop nicht nachgewiesen (STILL RUNNING) |
| 8 | Advertise-Adresse ist Loopback (127.0.0.1) — Render abgelehnt |
Log-Format und Journal
Jede Zeile, die pd schreibt, hat ein Format — [시각] [DATALAKE-CLI] [레벨] [동사] 메시지. INFO geht zu stdout, der Rest zu stderr.
pd start · stop · restart · backup schreiben jeweils eine JSON-Zeile als Event ins Journal plantpulse-datalake-admin-api/logs/pd-events.jsonl, das die Konsole als Event-Timeline anzeigt. Von der Konsole ausgeführte Befehle werden von actor als operator:<name> protokolliert.
Altes Namen-Mapping
Die Skriptsammlung plantpulse-startup wurde am 2026-09-03 in pd zusammengeführt, und das alte Verzeichnis existiert im Image nicht mehr.
| Altes Skript | Jetzt |
|---|---|
start-daemon.sh · start.sh | pd start |
stop.sh | pd stop |
restart.sh · restart-<module>.sh | pd restart [서비스] |
restart-monitor.sh | pd restart admin-api |
status.sh | pd status |
kill.sh · clean.sh | pd kill · pd clean |
configure.sh | pd config render |
log-viewer.sh | pd logs |
node-<동사>.sh · node-added.sh · node-error.sh | pd node <동사> · pd node add · pd node errors |
secrets/rotate.sh | pd secret rotate (vom Host aus durch passwd.sh aufgerufen) |
env.sh · env-reset.sh · env-validate.sh | Entfernt — Werte werden durch Host-Sidecar · Knotendateien und Compose abgestimmt |
prepare-ssl.sh | Container plantpulse-certs behandelt das → Sicherheitskonfiguration |
PP_OPTIONS | PD_OPTIONS (2026-09-07). Der alte Name wird nicht gelesen |
Server · Batch · Warehouse · OPC-UA · AASX werden in ihren eigenen Containern verwaltet. Der DataLake-Container hat diese Module nicht. Starten Sie Apps vom Host aus neu.
cd /opt/kopens/plantpulse-platform-docker/bin
./restart-server.sh # 또는 restart-batch.sh · restart-warehouse.sh · restart-one.sh <서비스>
Verwandte Dokumentation
- Start · Stop · Restart — Verhältnis zwischen Host-Verben und
pd - Logs und Health
- Konfiguration ändern