Property-Referenz
Dieses Dokument wird aus den bereitgestellten physischen Konfigurationsvorlagen (
*.properties) regeneriert. Das Original der Vorlage istplantpulse-datalake-cli/config/templates, und das/etc/kopens/confdes Hosts wird dorthin per Bind-Mount eingebunden. Welche Vorlage an welcher Stelle gerendert wird, bestimmt ein Kapitel inconfig/render.map. Das Original der Ladepriorität befindet sich inplantpulse-core/src/plantpulse/core/engine/utils/PropertiesUtils.java.Wenn Schlüssel hinzugefügt, gelöscht oder umbenannt wurden, ist die Vorlage und nicht dieses Dokument das Original. Bitte füllen Sie das Dokument nicht manuell aus, sondern extrahieren Sie es erneut aus der Vorlage. Die „Standardwerte“ in jeder Tabelle entsprechen den Angaben in der Vorlage, und
${PP_XXX}ist der Platzhalter, der beim Rendern durch den Wert der Umgebungsvariablen ersetzt wird.
Woher kommen die Werte und wohin gehen sie
| Was | Wo | Berechtigung | Änderungsmodus |
|---|---|---|---|
| Secrets — DB-Passwörter · API-Keys | /etc/kopens/plantpulse-platform.env | 0600 | bin/passwd.sh (Server-Konto ändern → Sidecar aktualisieren → Neu rendern → Neustart als ein Befehl) |
Box-spezifische Werte — PP_MASTER_IP · Kafka Advertise-Adressen · Image-Tag-Pins | /etc/kopens/platform.node.env | 0600 | Direkte Bearbeitung, dann bin/restart-datalake.sh |
| Konfiguration — Ports · Image-Tags · Locales · Datenpfade | .env im Repo (.env.example nur commiten) | — | Direkte Bearbeitung, dann Neustart |
«Zeilen» der Engine-Konfiguration — postgresql.conf Parameter, Kafka-Retention, Aster TSDB Heap | /etc/kopens/conf/<파일>.template | — | Vorlage bearbeiten → pd config render → pd restart <서비스> |
pd start rendert die Vorlagen jedes Mal neu und überschreibt die Konfigurationspfade der Komponenten. Selbst wenn cassandra.yaml, postgresql.conf oder kafka.properties geöffnet und geändert werden, kehren sie beim nächsten Start in den ursprünglichen Zustand zurück.
Änderungen müssen in der Vorlage erfolgen → Konfiguration ändern
Secret-Dateien werden bei der Split-Installation auf App-Nodes kopiert, Node-Dateien dürfen nicht kopiert werden. Bei einer Zusammenführung würden PP_MASTER_IP einer Box und Image-Tag-Pins an andere Boxen gelangen.
Das Format ist einheitlich gemäß VAR=값 — das Hinzufügen von export führt dazu, dass env_file: dies nicht parsen kann.
Standardverfahren für Vorlagenänderungen
Werte am Host ändern und in den Container in pd übernehmen.
vi /etc/kopens/conf/<템플릿> # 1. 호스트의 템플릿을 고칩니다
docker exec plantpulse-datalake pd doctor # 2. 검사 (선택)
docker exec plantpulse-datalake pd config diff # 3. 무엇이 달라지는지 봅니다
docker exec plantpulse-datalake pd config render # 4. 실제로 씁니다
docker exec plantpulse-datalake pd restart <서비스> # 5. 재시작
docker exec plantpulse-datalake pd status # 6. 확인
pd config renderschreibt nur die Konfigurationsdateien neu und startet die Dienste nicht neu. Bis zum Neustart liegt die neue Konfiguration nur auf der Festplatte, während der alte Prozess weiterläuft. Daher bilden Schritt 4 und 5 eine Einheit.
Ladepriorität von Konfigurationsdateien
Webanwendungen (server / batch / cep / sql / data-gateway) suchen Konfigurationsdateien in folgender Reihenfolge. Die Implementierung erfolgt über PropertiesUtils.readExternalFirst().
- Verzeichnis, das als
-Dpp.conf.dirSystemproperty angegeben wurde (KonstantePropertiesUtils.CONF_DIR_SYSTEM_PROPERTY = "pp.conf.dir") ${catalina.base}/../config—config/Verzeichnis des Moduls- Webapp-Classpath (Standardwerte in WAR) — Fallback
Externe Dateien werden in UTF-8 gelesen. Wenn die externe Konfiguration erfolgreich geladen wird, erscheint Folgendes im Startlog:
Properties loaded from external conf: <absolute-path>
Bei einem Fehler beim Lesen externer Dateien wird ein Error-Log erstellt und auf den Classpath zurückgegriffen (Fallback).
Auch die Logging-Konfiguration (log4j2.xml) ist über dieselbe Kette externalisiert (Self-Seeding — falls keine externe Datei vorhanden ist, wird der WAR-Standardwert einmalig in das Modul config/log4j2.xml kopiert und verwendet). Bei Anwendung erscheint Logging reconfigured from external conf: <absolute-path> im Startlog. Änderungen des Log-Levels erfolgen durch Bearbeitung des Moduls config/log4j2.xml und anschließenden Neustart, was auch bei einer WAR-Neuinstallation erhalten bleibt. Details siehe Konfigurations- und Deployment-Guide.
Achtung: Interne Webapp-Dateien (
server/webapps/ROOT/WEB-INF/classes/etc.) nicht direkt ändern — sie gehen bei einer WAR-Neuinstallation verloren.
${ENV:기본값} Ersetzung erfolgt zweimal
Die Notationen ${PP_XXX} / ${PP_XXX:기본값} in der Vorlage werden zu zwei Zeitpunkten interpretiert.
| Zeitpunkt | Akteur | Aktion |
|---|---|---|
| Beim Start | pd config render | Ersetzung durch Sidecar(plantpulse-platform.env · platform.node.env) und Container-Umgebung. Reihenfolge: Umgebungsvariable → :기본값 → Original beibehalten. Verschachtelte Placeholder nicht unterstützt |
| Zur Laufzeit | PropertiesUtils.resolveEnvPlaceholders | Interpretation von ${ENV_VAR[:default]} für alle Werte der geladenen Properties |
Das bedeutet, dass auch nach dem Deployment verbleibende ${...} durch Umgebungsvariablen des Prozesses gefüllt werden können. Dies ist der Grund, warum Docker -e VAR=... Injektionen Vorrang vor den Standardwerten der Vorlage haben.
PP_* Variablen, die nicht im Sidecar vorhanden sind (Standardwerte der Vorlage gelten)
Die folgenden Variablen werden in der Vorlage als ${PP_XXX:기본값} referenziert, aber in der Sidecar-Datei nicht definiert. Ohne separate Injektion wird daher immer der Standardwert der Vorlage verwendet.
PP_EXTERNAL_DB_PASSWORD · PP_MAIL_SMTP_HOST · PP_MAIL_SMTP_PORT · PP_MAIL_SMTP_AUTH · PP_MAIL_SMTP_USER · PP_MAIL_SMTP_PASSWORD · PP_MAIL_SMTP_STARTTLS · PP_DIAGNOSTIC_EMAIL
PP_AI_* war in dieser Liste, ist aber jetzt funktionslosWerte für PP_AI_OPENAI_* · PP_AI_MCP_* · PP_AI_CHAT_ENABLED werden stillschweigend ignoriert. Die Ebene, die diese Werte gelesen hat, wurde am 18.09.2026 entfernt — siehe AI-Konfiguration.
PP_STORAGE_PASSWORD · PP_METASTORE_PASSWORD waren in dieser Liste, sind aber «nicht existierende Variablen»Weder die Vorlage noch das Sidecar referenzieren diese Namen. Die tatsächlichen Namen sind wie folgt:
| Was | Tatsächliche Variable |
|---|---|
| Verbindung zum Zeitreihenspeicher (Aster TSDB) | PP_CASSANDRA_HOST · PP_CASSANDRA_PORT · PP_CASSANDRA_USER · 🔑 PP_CASSANDRA_PASSWORD |
| Verbindung zum Metastore (PostgreSQL) | PP_POSTGRES_HOST · PP_POSTGRES_PORT · PP_PG_USER · 🔑 PP_PG_PASSWORD |
🔴 PP_MAIL_SMTP_* ist ebenfalls funktionslos. Das Original der Mail-Konfiguration ist pp.mm_config, und die Werte werden in der Konsole (/config/index) oder in der entsprechenden Tabelle geändert — Mail-Konfiguration. Grund für diesen Transfer ist, dass zusammengehörige Werte (Host · Port · Authentifizierung · Konto) nur an einer Stelle geändert werden sollen.
5 Arten der Servermanagement-Konfiguration
Es gibt 5 Konfigurationsdateien, die durch das ConfigTemplates.SERVER_CONFIGS Array definiert und als plantpulse-server/config/ bereitgestellt werden.
| # | Vorlage | Bereitstellungspfad |
|---|---|---|
| 1 | plantpulse-engine.properties | /plantpulse-server/config/plantpulse-engine.properties |
| 2 | plantpulse-storage.properties | /plantpulse-server/config/plantpulse-storage.properties |
| 3 | plantpulse-mq.properties | /plantpulse-server/config/plantpulse-mq.properties |
Diese drei Dateien werden gemeinsam von PropertiesLoader.load() gelesen (engine/mq/storage), wodurch die Typed-Configuration Beans EngineConfig · StorageConfig · MqConfig neu aufgebaut werden.
pp.mm_config ist das Originalplantpulse-mail.properties und plantpulse-ai.properties wurden am 17.09.2026 gelöscht, und der Pfad, der alte Kopien aus dem externen Konfigurationsverzeichnis las und in Tabellen übertrug, wurde am 18.09.2026 komplett entfernt. Das bedeutet, dass selbst bei Erstellung dieser Dateien nichts gelesen wird.
Werte können nur über die Konsole und PostgreSQL pp.mm_config eingegeben werden. Die Originale der Schlüsselnamen und Standardwerte liegen in MailConfigKeys · AiConfigKeys des Codes; Schlüssel ohne Tabellenzeile werden mit dem Standardwert gelesen — die Schlüsseltabellen in den folgenden zwei Abschnitten bleiben gültig.
application.properties (Entfernt)
application.properties wurde im Juni 2026 entfernt. Es gibt keinen Code, der diese Datei liest (0 Treffer im gesamten Repo), und bestehende Einträge wurden wie folgt übertragen:
- Konsolenverhalten wie Thema / Homepage → Konsole System > Konfigurationsmanagement (PostgreSQL
mm_configTabelle) alarm.duplicate.check.minutes→plantpulse-engine.propertiesReihe (EngineConfigliest diese)
plantpulse-engine.properties
Pfad: plantpulse-server/config/plantpulse-engine.properties · Vorlage: template/plantpulse-engine.properties
Steuert das Kernverhalten der Datenverarbeitungs-Engine.
Asynchron / Pipeline
| Property | Standardwert | Ersetzung | Beschreibung (Vorlagen-Kommentar) |
|---|---|---|---|
engine.async.parallelism | 256 | — | Async worker pool parallelism (total cores ~= 256) |
engine.pipeline.threads | 36 | — | Anzahl der Pipeline-Threads |
engine.pipeline.ratelimit | 40000 | — | Pipeline-Verarbeitungslimit pro Sekunde (Rate Limit) |
engine.pipeline.queue.size | 1200000 | — | Pipeline-Warteschlangengröße (Backpressure-Limit) |
engine.pipeline.queue.o3.delay | 50 | — | Zulässige Verzögerung für Out-of-Order-Daten (ms) |
engine.pipeline.task.mode | SINGLE | — | Task-Ausführungsmodus (SINGLE / PARALLEL) |
NTP
| Property | Standardwert | Ersetzung | Beschreibung |
|---|---|---|---|
engine.ntpdate.server.ip | 127.0.0.1 | — | NTP-Server-IP |
engine.ntpdate.sync | false | — | NTP-Synchronisierung beim Booten |
Stream / CEP
| Property | Standardwert | Ersetzung | Beschreibung |
|---|---|---|---|
engine.stream.processor | DIRECT | — | Stream-Verarbeitungsmodus (DIRECT/BUFFERED) |
engine.cep.server.ip | 127.0.0.1 | ${PP_CEP_HOST:127.0.0.1} | CEP-Server-IP |
engine.cep.server.port | 7400 | ${PP_CEP_CONNECT_PORT:7400} | CEP-Server-Port (automatische Ausrichtung nach Protokoll: http→7400, https→7401) |
engine.cep.server.protocol | http | ${PP_CEP_PROTOCOL:http} | CEP-Protokoll. Standard für interne Kommunikation ist http, für verteilt/Container https |
engine.cep.server.api.key | (keiner) | ${PP_CEP_API_KEY} | Für CEPClient X-API-Key Header. Muss mit CEP-Server cep.api.key übereinstimmen |
Streaming-Nachrichtenübertragung
| Property | Standardwert | Ersetzung | Beschreibung |
|---|---|---|---|
engine.streaming.messaging.warning.ms | 5000 | — | Warnung bei Nachrichtenverzögerung (ms) |
engine.streaming.messaging.timeout.ms | 10000 | — | Nachrichtenübermittlungs-Timeout (ms) |
engine.streaming.messaging.timeout.store.type | FILE_QUEUE | — | Speichermethode für Timeout-Nachrichten (FILE_QUEUE/MEMORY) |
engine.streaming.messaging.timeout.recovery.type | DB | — | Wiederherstellungsquelle für Timeout-Nachrichten (DB/FILE) |
Job-Worker-Threads
| Property | Standardwert | Ersetzung | Beschreibung |
|---|---|---|---|
engine.job.thread.asset | 8 | — | Anzahl der Asset-Job-Threads |
engine.job.thread.point | 8 | — | Anzahl der Point-Job-Threads |
DDS
| Property | Standardwert | Ersetzung | Beschreibung |
|---|---|---|---|
engine.dds.enabled | true | — | Globale DDS-Aktivierung |
engine.dds.data.tag.enabled | true | — | Tag-Daten DDS-Veröffentlichung |
engine.dds.data.asset.enabled | true | — | Asset-Daten DDS-Veröffentlichung |
Anomalieerkennung / Datenfluss
| Property | Standardwert | Ersetzung | Beschreibung |
|---|---|---|---|
engine.data.anomaly.enabled | false | — | Anomalieerkennung aktiviert (Anbindung an externe Dienste) |
engine.data.anomaly.url | https://127.0.0.1:8970 | — | URL des Dienstes zur Anomalieerkennung |
engine.dataflow.class | plantpulse.core.engine.pipeline.dataflow.BaseDataFlow | — | Implementierungsklasse des Datenflusses |
engine.dataflow.server-timestamp.override | false | — | Erzwingen von Server-Zeitstempeln (true: Zeit der Erfassung, false: Original) |
engine.dataflow.negative-timestamp.override | true | — | Korrektur negativer Zeitstempel |
engine.factory.model.updater.class | plantpulse.core.engine.model.impl.DefaultFactoryMetaModelUpdater | — | Factory-Metamodell-Updater |
engine.event.handler.class | plantpulse.core.engine.event.DefaultEventHanlder | — | Implementierung des Event-Handlers (Tippfehler im Klassennamen Hanlder entspricht dem tatsächlichen Klassennamen) |
engine.javagc.enabled | false | — | Erlaubnis für explizite System.gc() Aufrufe |
Flow-Engine
| Property | Standardwert | Ersetzung | Beschreibung |
|---|---|---|---|
flow.debug.execution.log | false | — | INFO-Log für Knoten-Ausführung. Nur in Debugging-Sessions auf true |
flow.stats.prune.interval.ms | 86400000 | — | Ausführungszyklus für Counter-Bereinigung (ms, 24h). Da Aster TSDB Counter-Tabellen default_time_to_live nicht nutzen können, erfolgt Bereinigung auf App-Ebene |
flow.stats.prune.hourly.days | 30 | — | Aufbewahrungsdauer für hour_bucket von tm_flow_stats_hourly |
flow.stats.prune.daily.days | 90 | — | Aufbewahrungsdauer für day_bucket von tm_flow_stats_daily |
flow.health.check.interval.ms | 600000 | — | Flow-Healthcheck-Zyklus (ms, 10 Min). ERROR wenn aktuelle Zeit-Bucket errors > 0, sonst NORMAL (KST-basiert) |
flow.webhook.api.key | dev-webhook-19ba7a54-1132-49f2-967e-3c6f5cd989a0 | ${PP_FLOW_WEBHOOK_API_KEY:...} | Externe Webhook-Authentifizierung der Flow-Engine |
Von Flow-Healthcheck verwendete Aster TSDB Tabellen: tm_flow_health_status(flow_id, hour_bucket — aktueller Zeitakkumulator), tm_flow_health_status_10m(flow_id, min10_bucket — 10-Minuten-Zeitreihe).
Edge-Healthcheck
| Property | Standardwert | Ersetzung | Beschreibung |
|---|---|---|---|
edge.health.check.interval.ms | 600000 | — | Edge-Healthcheck-Zyklus (ms, 10 Min) |
Die Entscheidungsquelle sind die _ON / _NORMAL Flags im Aster TSDB tm_edge_status Payload. Da keine RT REST Aufrufe erfolgen, liegt die Last bei 0 und der Vorgang endet innerhalb von 1 Sekunde. Tabellen: tm_edge_health_status(edge_id, hour_bucket), tm_edge_health_status_10m(edge_id, min10_bucket).
Authentifizierung / Sicherheit
| Property | Standardwert | Ersetzung | Beschreibung |
|---|---|---|---|
api.key | (keiner) | ${PP_API_KEY} | Interner API-Key der Platform (Authentifizierung Server ↔ Edge-Agent) |
engine.api.v5.auth.bruteforce.enabled | true | — | Brute-Force-Schutz für V5 API-Authentifizierung |
engine.api.v5.auth.bruteforce.ip_limit | 30 | — | Versuchslimit pro IP |
engine.api.v5.auth.bruteforce.user_limit | 10 | — | Versuchslimit pro Benutzer |
engine.api.v5.auth.bruteforce.window.seconds | 60 | — | Zählungsvorgabe (Sekunden) |
engine.api.v5.trusted_proxies | (Leerwert) | — | Trust-Proxy IP-Whitelist. Nur bei Konfiguration wird bei Vorkommen von remoteAddr in der Liste die erste IP von X-Forwarded-For als Client-IP verwendet. Wenn leer, wird nur getRemoteAddr() verwendet (Fail-Safe) |
engine.session.bruteforce.enabled | true | — | Brute-Force-Schutz für /login/login Browser-Sessions |
engine.session.bruteforce.ip_limit | 30 | — | Versuchslimit pro IP |
engine.session.bruteforce.user_limit | 10 | — | Versuchslimit pro Benutzer |
engine.session.bruteforce.window.seconds | 300 | — | Zählungsvorgabe (Sekunden) |
Der Session-Brute-Force-Zähler ist Caffeine-In-Memory — Shared-Mode über mehrere Nodes (Redis) ist nicht implementiert.
API-Token
| Property | Standardwert | Ersetzung | Beschreibung |
|---|---|---|---|
engine.api.token.cleanup.enabled | true | — | Bereinigung abgelaufener(expires_at < now)/widerrufener(revoked_at IS NOT NULL) Token |
engine.api.token.cleanup.retention_days | 30 | — | Nach Ablauf dieses Zeitraums Hard-Delete aus mm_token. Einmal alle 24h (erstmalig 60s nach Boot) |
engine.api.token.default_ttl_days | 90 | — | Standard Ablaufzeit (Tage) bei Neuausstellung von Token. 0 = Permanenter Token. Wenn die Ausstellungsanfrage ttl_days enthält, hat dieser Wert Vorrang → API-Token ausstellen |
Bestehende Token, bei denen expires_at NULL ist, bleiben permanent aktiv (Abwärtskompatibilität).
plantpulse-storage.properties
Pfad: plantpulse-server/config/plantpulse-storage.properties · Vorlage: template/plantpulse-storage.properties
Verwaltet Verbindungen und Speicherrichtlinien für Metastore (PostgreSQL), Cache (Valkey), Zeitreihe (Aster TSDB), TSE und Data Gateway.
⚠️ In dieser Datei existieren Tippfehler in den Schlüsseln. Drei Schlüssel unterscheiden sich in der Schreibweise von dem, was der Code liest — lesen Sie unbedingt den Abschnitt Warnung zu Tippfehler-Schlüsseln.
PostgreSQL Metastore
| Property | Standardwert | Ersetzung | Beschreibung |
|---|---|---|---|
metastore.driver | org.postgresql.Driver | — | JDBC-Treiberklasse |
metastore.url | jdbc:postgresql://... | ${PP_POSTGRES_HOST} · ${PP_POSTGRES_PORT} · ${PP_DB_NAME} | Metastore JDBC-URL. Inklusive Querystring ?characterEncoding=UTF-8&reWriteBatchedInserts=true |
metastore.user | — | ${PP_PG_USER} | Metastore-Konto |
metastore.password | — | ${PP_PG_PASSWORD} | Metastore-Passwort |
Cache (Valkey / Redis kompatibel)
| Property | Standardwert | Ersetzung | Beschreibung |
|---|---|---|---|
cache.host | — | ${PP_REDIS_HOST} | Cache-Host |
cache.port | — | ${PP_REDIS_PORT} | Cache-Port (internes Plaintext Valkey-Backend) |
cache.password | — | ${PP_REDIS_PASSWORD} | Cache-Passwort |
cache.ssl.enabled | false | — | Cache-TLS. Interner Client standardmäßig redis:// |
cache.ssl.truststore.location | /var/security/plantpulse/master/master.truststore.p12 | — | Truststore-Pfad |
cache.ssl.truststore.password | kopens123! | ${PP_TLS_TRUSTSTORE_PASSWORD:kopens123!} | Truststore-Passwort |
cache.ssl.truststore.type | PKCS12 | — | Truststore-Typ |
cache.ssl.endpoint.identification.enabled | false | — | Endpunkt-Identitätsvalidierung |
Die Original-Schlüsselkonstanten befinden sich in plantpulse-inmemory unter InMemoryConfigKeys.
TSE (TimeSeries Engine)
| Property | Standardwert | Ersetzung | Beschreibung |
|---|---|---|---|
tse.protocol | http | ${PP_TSE_PROTOCOL:http} | TSE-Protokoll. Standardmäßig Plaintext-http für interne Kommunikation (2026-08) |
tse.host | — | ${PP_TSE_HOST} | TSE-Host |
tse.port | 7800 | ${PP_TSE_CONNECT_PORT:7800} | TSE-Port. Plaintext-Listener standardmäßig 7800 |
tse.user | tse | ${PP_TSE_USER:tse} | TSE-Konto |
tse.password | tse123! | ${PP_TSE_PASSWORD:tse123!} | TSE-Passwort |
Aster TSDB Zeitreihenspeicher
| Property | Standardwert | Ersetzung | Beschreibung |
|---|---|---|---|
storage.db_type | CASSANDRA | — | DB-Typ. In Vorlagen-Kommentaren stehen CASSANDRA/DSE/SCYLLADB, aber aktuell wird nur CASSANDRA unterstützt |
storage.db_version | 5.0 | — | Nicht die Serverversion, sondern das «Funktionskompatibilitätsniveau» — siehe Hinweis unten |
storage.host | — | ${PP_CASSANDRA_HOST} | Contact Point Host |
storage.db_version ist 5.0, aber nodetool version wird als 6.0.0 angegebenBeides ist korrekt. Es handelt sich nicht um zwei Werte für dasselbe.
| Wert | Was | |
|---|---|---|
storage.db_version | 5.0 | Kompatibilitätsniveau, das festlegt, mit welchem Funktionssatz der Treiber spricht |
| Tatsächlicher Bundle-Server | 6.0.0 | apache-cassandra-timeseries-6.0.0.jar — Interner Fork von cassandra-6.0 |
Interpretieren Sie 5.0 nicht als «Server ist Version 5.0». Informationen zum Server finden Sie unter Zeitreihendatenbank.
Ändern Sie diesen Wert nicht eigenmächtig auf 6.0 — dies verändert das Treiberverhalten.
| storage.port | 9042 | ${PP_STORAGE_PORT:9042} | Native-Protokollport |
| storage.keyspace | — | ${PP_KEYSPACE} | Verwendeter Keyspace |
| storage.user | — | ${PP_CASSANDRA_USER} | Verbindungskonto |
| storage.password | cassandra | ${PP_STORAGE_PASSWORD:cassandra} | Passwort. PP_STORAGE_PASSWORD wird in env.sh nicht exportiert → Standardwert gilt |
| storage.durable_writes | true | — | Verwendung von Commit Log (⚠️ kein lesender Code vorhanden — siehe unten) |
| storage.append_columns | [] | — | Automatische Hinzufügung benutzerdefinierter Spalten |
| storage.replication | { 'class' : 'NetworkTopologyStrategy', 'datacenter1' : 1 } | — | Replikationsstrategie (Standard: Single Node) |
| storage.data.disk.name | — | ${PP_DATA_DISK_NAME} | Name der Datenträgerdisk |
TTL (Einheit: Tage)
| Property | Standardwert | Beschreibung |
|---|---|---|
storage.tag.point.ttl | 62 | Tag-Zeitreihe Original |
storage.tag.point.map.ttl | 1 | Tag-Point-Map |
storage.tag.point.sampling.ttl | 93 | Tag-Sampling |
storage.tag.point.snapshot.ttl | 93 | Tag-Snapshot |
storage.tag.point.aggregation.ttl | 93 | Tag-Aggregation |
storage.tag.point.archive.ttl | 365 | Tag-Archiv (Langzeitarchivierung) |
storage.tag.blob.ttl | 93 | Tag-BLOB |
storage.asset.data.ttl | 10 | Asset-Daten |
storage.asset.data.sampling.ttl | 31 | Asset-Sampling |
Asset-Snapshot-Zyklus
| Property | Standardwert | Beschreibung |
|---|---|---|
storage.asset.data.snapshot.interval | 10 SECONDS | Aufzeichnung der Asset-Tag-Map(data_map) vor jedem Zyklus in die asset_data Reihe (Daten/Sekunde/Zeitstempel + Min/Std/Tag Grenze) |
Vorlagen-Kommentar begründet dies: 1 SECONDS führte bei 121 Assets zu ca. 22K Schreibvorgängen pro Minute (ca. 4% des gesamten Aster TSDB), was zu Überlastung führte. Da Tag-Originale (sekündlich) in tm_tag_point/TSE vollständig erhalten bleiben, wurde der Asset-View-Snapshot auf 10s gesenkt (entspricht Standardwert im Code) — Reduktion der Schreibvorgänge um 90%, Erhalt der Aufzeichnungsvollständigkeit.
Dieser Wert dient als
ASSET_DATA_JOBZyklus des Schedulers. Muss im"<n> <unit>"2-Token-Format vorliegen; Regeln siehe Scheduler-Architektur.
Interne Metastore-Synchronisation (experimentell)
| Property | Standardwert | Beschreibung |
|---|---|---|
storage.internal.metastore.enabled | false | Interne Metastore-Synchronisation aktiviert |
storage.internal.metastore.thread.count | 4 | Anzahl der Synchronisations-Worker-Threads |
storage.internal.metastore.queue.size | 12000000 | Synchronisations-Warteschlangengröße |
storage.internal.metastore.point.retation.days | 10 | Point-Aufbewahrungsdauer (⚠️ Tippfehler-Schlüssel — siehe unten) |
Zeilen-Cache
| Property | Standardwert | Beschreibung |
|---|---|---|
storage.asset.data.row.cache.size | NONE | Zeilen-Cache für Asset-Daten (NONE/ROWS_ONLY/ALL) — ⚠️ kein lesender Code vorhanden |
storage.tag.point.row.cache.size | NONE | Zeilen-Cache für Tag-Points — ⚠️ kein lesender Code vorhanden |
Compaction
| Property | Standardwert | Beschreibung |
|---|---|---|
storage.table.compaction.strategy | UCS | Standardstrategie (TWCS: TimeWindow, UCS: Unified). Wird von CassandraCreateDAO gelesen (Code-Fallback ist TWCS) |
storage.table.compaction.strategy.twcs.window_size | 1 | TWCS-Fenstergröße — ⚠️ kein lesender Code vorhanden |
storage.table.compaction.strategy.twcs.window_unit | DAYS | TWCS-Fenstereinheit — ⚠️ kein lesender Code vorhanden |
storage.table.compaction.strategy.ucs.scailing_parameter | T8 | UCS-Skalierungsparameter (T8 = tiered 8 levels). Schlüssel-Rechtschreibung scailing stimmt mit Code überein |
storage.table.compaction.strategy.ucs.min_sstable_size | 128MiB | UCS minimale sstable-Größe (Code-Fallback 100MiB) |
storage.table.compaction.strategy.ucs.target_sstable_size | 512MiB | UCS Ziel-sstable-Größe |
storage.table.compaction.strategy.ucs.base_shard_count | 8 | UCS Basis-Shard-Anzahl |
storage.table.compaction.strategy.ucs.max_sstables_to_compact | 6 | Maximale Anzahl von sstables pro Compaction |
storage.table.compaction.strategy.ucs.sstable_growth | 0.7 | UCS sstable-Steigerungsrate |
Kompression / Abfrage-Limit / Backup / Data Gateway
| Property | Standardwert | Ersetzung | Beschreibung |
|---|---|---|---|
storage.compresion.zstd.level | 3 | — | zstd Kompressionsstufe (1~22) — ⚠️ Tippfehler-Schlüssel, siehe unten |
storage.tag.point.select.limit.size | 1000000 | — | Maximale Zeilenanzahl bei Select eines einzelnen Tag-Points |
storage.doamin.model.changed.to.metastore.backup | true | — | Metastore-Backup bei Änderung des Domänenmodells — ⚠️ Tippfehler-Schlüssel + kein lesender Code vorhanden |
data.gateway.protocol | http | ${PP_DATA_GATEWAY_PROTOCOL:http} | Data Gateway Protokoll |
data.gateway.host | 127.0.0.1 | ${PP_DATA_GATEWAY_HOST:127.0.0.1} | Data Gateway Host (Voraussetzung: lokale Koexistenz) |
data.gateway.port | 5500 | ${PP_DATA_GATEWAY_CONNECT_PORT:5500} | Data Gateway Port (Code-Fallback 5501) |
data.gateway.api.key | — | ${PP_DATA_GATEWAY_API_KEY} | Data Gateway API-Key |
⚠️ Tippfehler-Schlüssel — Änderungen werden ignoriert
Die folgenden 3 Schlüssel, die tatsächlich in der Vorlage existieren, weichen in der Schreibweise von dem ab, was der Code liest. Wenn ein Administrator die Werte in diesen Zeilen ändert, wird dies stillschweigend ignoriert und der Standardwert des Codes angewendet.
| Schlüssel in Vorlage (Tippfehler) | Schlüssel, den Code tatsächlich liest | Code-Standardwert | Leseposition |
|---|---|---|---|
storage.compresion.zstd.level | storage.compression.zstd.level | 3 | StorageConfig → CassandraCreateDAO |
storage.internal.metastore.point.retation.days | storage.internal.metastore.point.retention.days | 10 | StorageConfig → PointDAO |
storage.doamin.model.changed.to.metastore.backup | Keiner (kein lesender Code auch bei korrekter Schreibweise) | — | — |
Um Werte tatsächlich zu ändern, fügen Sie den Schlüssel in der Schreibweise des Codes zur selben Datei hinzu. Um beispielsweise die zstd-Stufe auf 6 zu erhöhen, muss
storage.compression.zstd.level=6eingefügt werden (nicht die Tippfehler-Zeile korrigieren, sondern eine Zeile mit korrekter Schreibweise hinzufügen). Die Tippfehler-Zeilen können ungestört bleiben, aber die Korrektur der Vorlage selbst ist die grundlegende Lösung.Es gibt keinen Code, der
storage.doamin.model.changed.to.metastore.backupin irgendeiner Schreibweise liest. Backups bei Änderungen des Domänenmodells werden nicht durch diesen Schlüssel, sondern durchMetastoreBackupDeployer(Cron0 0 12 1 1/1 ? *, monatlich am 1. um 12:00) übernommen — siehe Scheduler-Architektur.
Storage-Schlüssel, die nicht in der Vorlage stehen, aber vom Code gelesen werden
| Property | Code-Standardwert | Beschreibung |
|---|---|---|
storage.compression.zstd.type | ZstdCompressor | Name der Kompressor-Klasse |
Storage-Vorlagenschlüssel ohne lesenden Code (Änderungen wirkungslos)
storage.durable_writes · storage.asset.data.row.cache.size · storage.tag.point.row.cache.size · storage.table.compaction.strategy.twcs.window_size · storage.table.compaction.strategy.twcs.window_unit (+ die 3 oben genannten Tippfehler-Schlüssel)
Die beiden TWCS-bezogenen Schlüssel steuern die Fenstergröße/Einheit nicht, selbst wenn sie in storage.table.compaction.strategy=TWCS geändert werden.
plantpulse-mq.properties
Pfad: plantpulse-server/config/plantpulse-mq.properties · Vorlage: template/plantpulse-mq.properties
Verwaltet Broker-Verbindungen für Kafka / MQTT sowie DDS-Veröffentlichungstopics. Die SSOT auf Codeseite sind MqConfig (Verbindung) und UNSTopicDefaults (Topics).
Broker-Verbindung
| Property | Standardwert | Ersetzung | Beschreibung |
|---|---|---|---|
mq.host | — | ${PP_KAFKA_HOST} | Broker-Host (gemeinsam für Kafka/MQTT) |
mq.user | — | ${PP_MQ_USER} | Broker-Administrationskonto |
mq.password | — | ${PP_MQ_PASSWORD} | Broker-Passwort |
mq.kafka.port | 9092 | ${PP_KAFKA_PORT:9092} | Kafka-Port |
mq.kafka.security.protocol | SASL_PLAINTEXT | — | Kafka-Sicherheitsprotokoll |
mq.ssl.truststore.location | /var/security/plantpulse/master/master.truststore.p12 | — | Messaging-TLS Truststore (MQTT + optional Kafka TLS) |
mq.ssl.truststore.password | kopens123! | ${PP_TLS_TRUSTSTORE_PASSWORD:kopens123!} | Truststore-Passwort |
mq.ssl.truststore.type | PKCS12 | — | Truststore-Typ |
mq.ssl.endpoint.identification.algorithm | (Leerwert) | — | Algorithmus zur Hostnamenvalidierung (Leerwert = keine Validierung) |
mq.mqtt.port | — | ${PP_MQTT_TLS_PORT} | MQTT-Verbindungsport |
mq.mqtt.ssl.enabled | true | — | MQTT-TLS Verwendung |
MqConfig liest neben den obigen Schlüsseln auch Kafka-spezifische Truststore-Overrides mq.kafka.ssl.truststore.location / .password / .type sowie mq.kafka.ssl.endpoint.identification.algorithm (nicht in der Vorlage; falls nicht vorhanden, wird mq.ssl.* verwendet).
DDS-Topics
14 Kafka-Arten(mq.dds.kafka.topic.*) + 14 MQTT UNS-Arten(mq.dds.mqtt.topic.*) + 2 SparkplugB-Arten(mq.dds.mqtt.sparkplugb.*).
Die Gesamtheit aller Schlüssel und Standardwerte ist unter Messaging-Architektur → DDS-Veröffentlichungstopics dokumentiert. Topic-Werte sind Wire-Contracts für Kafka/MQTT und werden durch UNSTopicDefaultsContractTest als Literale fixiert, daher sind eigenmächtige Änderungen untersagt.
${PP_TOPIC_PREFIX} bestimmt gleichzeitig das Präfix der Kafka-Topics(pp-), das Root der MQTT UNS-Pfade(pp/) und die SparkplugB Gruppen-ID.
Mail-Konfiguration (pp.mm_config)
Original: PostgreSQL pp.mm_config · Schlüssel-Original: plantpulse.core.config.MailConfigKeys.
Lesende Seite: SMTPMailSender.loadMailConfig().
PP_MAIL_* sind ebenfalls funktionslosWie bei der AI wurden die Ersetzungsschichten für plantpulse-mail.properties und ${PP_MAIL_*} am 17.09. bis 18.09.2026 entfernt. Übermittlungen per Sidecar oder docker run -e werden stillschweigend ignoriert. Werte müssen über den Konfigurationsbildschirm(/config/index) der Konsole oder die Tabelle pp.mm_config eingegeben werden.
| Konfigurationsschlüssel | Standardwert | Beschreibung |
|---|---|---|
MAIL_SEND_ENABLED | false | Master-Versand-Gate. Wenn deaktiviert, wird der SMTP-Versand ohne Verbindung übersprungen und nur ein WARN protokolliert |
MAIL_SMTP_HOST | smtp-relay.brevo.com | SMTP-Relay-Adresse |
MAIL_SMTP_PORT | 587 | 587 = STARTTLS, 465 = implizites TLS (zusammen mit MAIL_SMTP_SSL_ENABLE) |
MAIL_SMTP_AUTH | true | SMTP-Login aktiviert. Wenn aktiv, aber MAIL_SMTP_USER ist leer, erfolgt kein Login |
MAIL_SMTP_USER | (Leerwert) | SMTP-Konto. Kann vom Relay vergebenen Namen abweichen und somit anders als die Absenderadresse sein. Kann leer gespeichert werden |
🔑 MAIL_SMTP_PASSWORD | (Leerwert) | SMTP-Passwort oder API-Key. Bei einem Login-Relay wird die Authentifizierung abgelehnt, wenn dies leer ist |
MAIL_SMTP_STARTTLS_ENABLE | true | Aufwertung auf STARTTLS bei Port 587 |
MAIL_SMTP_SSL_ENABLE | false | Direkte TLS-Verbindung wie bei Port 465. In diesem Fall wird starttls deaktiviert |
MAIL_SMTP_CONNECTIONTIMEOUT | 10000 | Verbindungs-Timeout (ms). Ohne Angabe ist der JavaMail-Standard «unendliches Warten» |
MAIL_SMTP_TIMEOUT | 10000 | Lese-Timeout (ms). 〃 |
MAIL_SMTP_WRITETIMEOUT | 10000 | Schreib-Timeout (ms). 〃 |
MAIL_FROM | (Leerwert) | Absenderadresse. Wenn leer, wird MAIL_SMTP_USER verwendet; Relay-Kontonamen sind oft keine gültigen Adressen und könnten vom Empfänger abgelehnt werden — bitte tatsächliche Adresse angeben |
sms.sender.class | plantpulse.core.service.support.alarm.sms.DefaultSMSSender | FQN des SMS-Versender-Implementierers. Bei Angabe einer nicht existierenden Klasse wird auf die Standardimplementierung zurückgefallen |
TLS wird nur in den Versionen 1.3 und 1.2 verwendet, wobei der Name des Serverzertifikats geprüft wird.
Die Standardwerte von MAIL_SMTP_USER · MAIL_SMTP_PASSWORD sind leere Werte. Da MAIL_SEND_ENABLED der Standard für false ist, wird kein Versand versucht, bis der Operator dies aktiviert.
Versand über Gmail SMTP-Relay
Das SMTP-Relay von Google Workspace(smtp-relay.gmail.com) kann per IP-Adresse des sendenden Servers autorisiert werden. In diesem Fall ist kein Konto erforderlich, und der Login wird deaktiviert. Registrieren Sie zuerst die ausgehende IP dieses Servers in den SMTP-Relay-Einstellungen der Google Administrationskonsole.
| Konfigurationsschlüssel | Wert |
|---|---|
MAIL_SEND_ENABLED | true |
MAIL_SMTP_HOST | smtp-relay.gmail.com |
MAIL_SMTP_PORT | 587 |
MAIL_SMTP_AUTH | false |
MAIL_SMTP_USER | (leer) |
MAIL_SMTP_STARTTLS_ENABLE | true |
MAIL_SMTP_SSL_ENABLE | false |
MAIL_FROM | Tatsächliche Adresse der Workspace-Domäne |
Nach dem Speichern die Schaltfläche Neu anwenden im Konfigurationsbildschirm drücken.
Alarm-E-Mails
- Im Kopf der Mail wird das Produktlogo als CID-Inline-Bild mitgesendet. Es ist auch ohne Konsolenadresse sichtbar und wird nicht extern geladen.
- Die Positionszeile der Mail beginnt beim Standort (Standort › Bereich › Linie › Anlage; Unternehmen werden nicht aufgeführt).
- Der Link «Zum Alarm»,
PP_UI_CONSOLE_URL(<콘솔 주소>/alarm/view/<알람 번호>), wird bei Leerwert weggelassen, die Mail wird jedoch ansonsten normal versendet — Adresskonfiguration.
diagnostic.log.email wurde entferntDa es keinen lesenden Code mehr gab, wurde der Schlüssel aus der Tabelle entfernt (Produkttests verhindern, dass dieser Schlüssel erneut aufgenommen wird). Er ist wirkungslos, selbst wenn er irgendwo verbleibt.
AI-Konfiguration (pp.mm_config)
Original: PostgreSQL pp.mm_config · Schlüssel-Original: plantpulse.core.config.AiConfigKeys.
Lesende Seite: AiConfig(+ AiConfig.mcpSettings()).
PP_AI_* sind funktionslosDas alte plantpulse-ai.properties wurde am 17.09.2026 gelöscht, und die Pfade zum Lesen dieser Datei sowie die ${PP_AI_*} Ersetzungsschicht wurden am 18.09.2026 ebenfalls entfernt. Die Angabe von Namen wie PP_AI_OPENAI_ENABLED via Sidecar oder docker run -e wird stillschweigend ignoriert — es erfolgt weder eine Fehlermeldung noch eine Warnung.
Der Grund, warum das Produkt diese Namen entfernt hat, anstatt sie «nur zur Sicherheit» zu behalten, ist, dass Namen, die vorhanden sind, aber ignoriert werden, schlimmer sind als nicht existierende Namen. Sie erwecken den Anschein, der Server sei konfiguriert, obwohl er es nicht ist.
Es gibt nur zwei Wege zur Werteingabe — über den Konfigurationsbildschirm der Konsole(/env) oder durch direkte Änderung der Tabelle pp.mm_config. Schlüssel ohne Zeilen werden mit den Standardwerten der folgenden Tabelle gelesen; beim Einfügen eines Wertes wird die Zeile erstellt.
LLM-Gateway
| Property | Standardwert | Beschreibung |
|---|---|---|
ai.llm.enabled | false | Globaler AI-Schalter. Wenn deaktiviert, sind AI-Bildschirme und Endpunkte geschlossen |
ai.llm.base.url | https://api.openai.com | OpenAI-kompatibles Gateway (LiteLLM/vLLM). Kein / am Ende anfügen |
ai.llm.chat.path | /v1/chat/completions | Nur ändern, wenn das Gateway einen anderen Pfad verwendet |
ai.llm.responses.path | /v1/responses | 〃 |
🔑 ai.llm.api.key | (Leerwert) | Gateway-Key. Wenn leer, wird der Aufruf mit 401 abgelehnt |
ai.llm.model | gpt-5-mini | Vom Gateway exponierter Modellname. Bei Änderung von base.url muss auch dieser Wert geändert werden |
ai.llm.timeout.ms | 60000 | LLM-Aufruf-Timeout (ms) |
ai.llm.max.output.tokens | 4000 | Maximale Tokenanzahl der Antwort |
ai.llm.temperature | -1 | Bei negativen Werten wird die Anfrage komplett weggelassen, um den Modellstandardwert zu nutzen |
ai.openai.* wird nicht mehr gelesenDas Präfix wurde zu ai.llm. geändert. Selbst wenn in pp.mm_config noch Zeilen für ai.openai.base.url vorhanden sind, wird mangels lesendem Code der Standardwert(https://api.openai.com) verwendet — dies führt dazu, dass ein konfiguriertes Gateway ignoriert wird und die Anfrage fehlerhaft an OpenAI geht. Überprüfen Sie diese Zeilen nach einem Upgrade.
ai.llm.temperature standardmäßig negativDie gpt-5 Serie unterstützt keine Temperature-Werte; das Senden von Werten außer 1 führt zu 400 Unsupported value. Daher wird ein negativer Wert als «Nicht senden» definiert. Erhöhen Sie diesen Wert nur auf 0 oder mehr, wenn Sie andere Modelle hinter LiteLLM/vLLM verwenden.
Funktionsschalter
🔴 Die Standardwerte wurden am 16.09.2026 geändert. Die einzige verbleibende AI-Funktion im Interface ist Chat, alle anderen wurden vom Produkt deaktiviert. Durch Zurücksetzen der Werte auf true kehren die Funktionen zurück, aber diese Bildschirme sind für diese Version nicht validiert.
| Property | Standardwert | Beschreibung |
|---|---|---|
ai.chat.enabled | true | AI-Chat-Konsole — Dies ist die einzige verbleibende AI-Funktion im Interface |
ai.chat.history.ttl.days | 90 | Chat-Historienaufbewahrung (Tage). Wird als Cassandra TTL angewendet und wirkt sich nach einem Neustart ab «neuen» Nachrichten aus |
ai.alarm.rca.enabled | false | Alarm RCA — Bei Aktivierung wird die AI-Ursachenanalyse in den Alarmdetails angezeigt |
ai.alarm.eql.enabled | false | Alarm EQL-Assistent — Bei Aktivierung erscheint eine Entwurfs-Schaltfläche im Alarm-Konfigurationsformular |
ai.uns.topic.enabled | false | UNS-Topic-Beschreibung — Bei Aktivierung wird im UNS-Baum ein Beschreibungs-Panel angezeigt |
ai.result.audit.enabled | false | AI-Ergebnisaudit — Interne RCA-Komponente ohne Interface. Bei Aktivierung von RCA ebenfalls aktivieren |
ai.similar.incident.enabled | false | Erfassung ähnlicher Störungsnachweise — 〃 |
ai.similar.incident.max.items | 5 | Maximale Anzahl ähnlicher Störungen als Nachweis |
ai.similar.incident.min.score | 40 | Mindestpunktzahl zur Anerkennung als ähnliche Störung |
3 Schlüssel aus ai.diagnostic.summary.* (AI-Zusammenfassung von Diagnoselogs) und 3 Schlüssel aus ai.operations.report.* (AI-Betriebsbericht) wurden am 25.08.2026 aus dem Produkt entfernt. Da Interface, JS und Controller ebenfalls entfernt wurden, führt eine Änderung der Werte nicht zur Wiederbelebung der Funktion. Verbleibende Einträge sind harmlos, da kein Code sie liest.
MCP
🔴 MCP ist «unabhängig» von ai.llm.enabled. Da es für externe Clients und nicht für das Interface gedacht ist, bleibt /api/v5/mcp auch dann geöffnet, wenn das Gateway deaktiviert ist. Details unter MCP-Server.
| Property | Standardwert | Beschreibung |
|---|---|---|
AI_MCP_ENABLED | true | Falls false, antwortet /api/v5/mcp mit 404 |
AI_MCP_ALLOWED_ORIGINS | (Leerwert) | Browser-Origin-Whitelist (kommagetrennt). Wenn leer, werden alle Browser-Anfragen abgelehnt und nur native Clients zugelassen |
AI_MCP_TREE_MAX_NODES | 2000 | Limit für Antwortknoten des Baums — Wert ist abhängig vom Kontextfenster des Modells; bei größeren Modellen erhöhen |
AI_MCP_TREE_DEFAULT_DEPTH | 2 | Standardtiefe der Baumabfrage |
AI_MCP_TREE_MAX_NODE_TAGS | 100 | Limit der Tags pro Knoten |
AI_MCP_TREE_ONTOLOGY_MAX_CHARS | 200000 | Limit der Zeichenzahl der Ontologie-Antwort |
AI_MCP_TREE_ONTOLOGY_DEFAULT_DEPTH | 3 | Eine Stufe tiefer als die Standardtiefe des Baums — muss bis zu den Anlagenknoten mit Tag-Anzahl reichen, damit die Frage «Wie viele Tags hat diese Anlage» mit einem Standardwert beantwortet werden kann |
AI_MCP_TREE_ONTOLOGY_MAX_TAGS | 500 | Gesamtbudget für Tag-Zeilen der Ontologie-Antwort (separat vom Knotenlimit). Ein Slim-Tag benötigt ca. 85B; eine vollständige Seite würde 33~56% des Kontextfensters belegen |
Weitere Vorlagen
In template/ befinden sich neben den oben genannten 5 Arten weitere Applikations- und Infrastruktur-Vorlagen. Das Original des Pfad-Mappings ist ConfigTemplates.java.
| Vorlage | Bereitstellungspfad | Verwendungszweck |
|---|---|---|
plantpulse-batch.properties | /plantpulse-batch/config/ | Batch (Zeitreihen-Sync/Aggregation) |
plantpulse-cep.properties | /plantpulse-cep/config/ | CEP-Engine |
plantpulse-jdbc.properties | /plantpulse-data-gateway/config/ | Integrierte JDBC-Konfiguration |
plantpulse-data-gateway.properties | /plantpulse-data-gateway/config/ | Data Gateway Betrieb |
plantpulse-warehouse.properties | /plantpulse-warehouse/config/ | Aster TSDB → Iceberg(S3) Archiv |
plantpulse-datalake-admin-api.properties | /plantpulse-datalake-admin-api/config/ | Administrationskonsolen-API · JMX-Erfassung |
plantpulse-plugin-opcua.properties | /plantpulse-plugin/opc-ua/config/ | OPC UA Server Plugin |
plantpulse-plugin-aas.properties | /plantpulse-plugin/aasx-server/config/ | AAS V3 (aasx-server) Plugin |
kafka.properties | /plantpulse-messaging/kafka/config/kafka.properties | Kafka(KRaft) Broker |
kafka-jaas.conf | /plantpulse-messaging/kafka/config/jaas.conf | Kafka JAAS |
hivemq.xml | /plantpulse-messaging/mqtt/conf/config.xml | HiveMQ Broker |
plantpulse-mq-auth.properties | /plantpulse-messaging/mqtt/conf/auth.properties | HiveMQ Authentifizierungsquelle |
hive-auth.properties | /plantpulse-analytics/spark/conf/ | Hive/Analyse-Konten Authentifizierungsquelle |
plantpulse-timeseries-engine.conf | /plantpulse-timeseries/engine/conf/ (2 Stellen) | TSE |
valkey.conf · postgresql.conf · pg_hba.conf · cassandra.yaml · jvm-server.options | /plantpulse-storage/... | Storage |
spark-env.sh · spark-defaults.conf · hive-site.xml · kyuubi-defaults.conf · gravitino-iceberg-rest-server.conf | /plantpulse-analytics/... | Analyse |
workflow.yaml · application.yaml | /plantpulse-workflow/... | Temporal / Kestra |
plantpulse-websocket.propertiesexistiert nicht. Es gibt keine Konfigurationsdateien für WebSocket/STOMP.template/cluster/ist ein Override nur für Worker-Nodes — bei Änderungen an der Master-Vorlage muss dies hier ebenfalls synchronisiert werden.
plantpulse-batch.properties
Besteht aus Verbindungspropen (Platform/Metastore/Cache/TSE/Kafka/Aster TSDB/Spark) und Batch-Betriebseinstellungen. Achtung: Verbindungsschlüssel weichen von storage/jdbc ab — Bsp: Aster TSDB nutzt storage.db.host / storage.db.port / storage.db.keyspace (Server nutzt storage.host / storage.port / storage.keyspace).
| Property | Standardwert | Beschreibung |
|---|---|---|
platform.host | ${PP_MASTER_IP} | Platform(server-web) Host |
mq.port | 9092 | Kafka-Port (Literal — keine Ersetzung) |
kafka.topic | pp-batch | Batch-Input-Topic |
kafka.group.id | PP-BATCH-GROUP | Batch-Consumer-Gruppe |
batch.timer_schedule_delay | 5000 | Batch-Timer-Zyklus (ms) |
batch.thread_pool_batch_thread_size | 4 | Anzahl der Batch-Worker-Threads |
batch.buffer_drain_limit_size | 10000 | Maximale Anzahl an Einträgen, die einmalig geleert werden |
batch.sync.inmemory.enabled | false | In-Memory Synchronisation |
batch.sync.inmemory.ttl.minute | 10 | In-Memory Synchronisation TTL (Minuten) |
batch.sync.tse.enabled | true | Verteilung an TSE |
batch.sync.external.db.enabled | false | Externe DB Synchronisation |
external.db.name | TIMESCALEDB | Externer DB-Typ. INFLUXDB/QUESTDB Blöcke sind in der Vorlage als Kommentare vorhanden |
analytics.url | jdbc:spark://${PP_SPARK_HOST}:${PP_KYUUBI_PORT}/default | Spark Thrift JDBC |
plantpulse-cep.properties
| Property | Standardwert | Beschreibung |
|---|---|---|
cep.backend | aster | Zu bootendes Backend (aster · flink). Andere Werte führen zu Boot-Fehler — Backends |
cep.aster.state.enabled | true | Aster CEP Regelstatus (Fenster · Aggregation · laufende Muster) in cache.* Redis bewahren. Schlüssel: PP:CEP:ASTER-STATE:<문장> |
cep.aster.state.snapshot_interval_ms | 60000 | Snapshot-Zyklus — maximale Statusverlust bei Crash. Bei normalem Stopp wird ein letzter Snapshot vor dem Herunterfahren erstellt |
cep.async.core_pool_size | 32 | Asynchroner Core-Pool |
cep.async.max_pool_size | 256 | Asynchroner Maximal-Pool |
cep.async.queue_capacity | 50000 | Asynchrone Warteschlange |
cep.async.keep_alive_seconds | 60 | Thread Keep-Alive |
cep.async.shutdown_timeout_seconds | 30 | Graceful Shutdown Wartezeit |
cep.consumer.thread_count | 16 | Consumer-Thread |
cep.stream.shard_count | 16 | Anzahl der Stream-Shards |
cep.stream.drain_limit_size | 1000 | Drain-Limit |
cep.stream.drain_warn_ms | 1000 | Drain-Warnung (ms) |
cep.monitor.initial_delay_seconds | 5 | Monitor Erstverzögerung |
cep.monitor.interval_seconds | 1 | Monitor-Zyklus |
cep.monitor.store_interval_seconds | 60 | Aster TSDB Speicherzyklus für Metriken |
cep.api.key | ${PP_CEP_API_KEY} | EQL-Management-Endpunkt Authentifizierung (X-API-Key) |
cep.api.max_eql_text_length | 100000 | Maximale Länge des EQL-Textes (DoS-Schutz) |
cep.storage.request_timeout_seconds | 10 | Aster TSDB Anfrage-Timeout |
cep.storage.connect_max_retries | 3 | Verbindungs-Retry |
cep.storage.ttl_seconds | 864000 | Metrik TTL (Sekunden, 10 Tage) |
cep.stream.pending_idle_threshold_ms | 60000 | Pending-Idle-Schwellenwert |
cep.stream.cleaner_initial_delay_ms | 60000 | Cleaner Erstverzögerung |
cep.stream.cleaner_interval_ms | 10000 | Cleaner-Zyklus |
cep.stream.max_clean_duration_ms | 30000 | Maximale Dauer der Reinigung |
cep.stream.cleaner_max_claim_count | 5000 | Maximale Anzahl an Claims |
cep.stream.ack_chunk_size | 500 | ACK-Chunk-Größe |
cep.stream.max_deliveries | 3 | Ereignisse werden erst nach dieser Anzahl an Zustellversuchen in die Dead Letter Queue verschoben |
cep.stream.dead_letter.retention_ms | 86400000 | Dead-Letter-Aufbewahrungsdauer (24h) |
cep.stream.dead_letter.max_bytes | 268435456 | Dead-Letter Byte-Budget (256 MiB, Summe aller Shards). Bei Überschreitung werden pro Shard die ältesten Daten zuerst gelöscht |
plantpulse-jdbc.properties
Integrierte Verbindungskonfiguration für externe JDBC-Clients (SQL-Modul · Data Gateway). Präfix ist jdbc.<tech> (postgres/cassandra/spark/tse).
| Property | Wert | Beschreibung |
|---|---|---|
jdbc.postgres.driver | org.postgresql.Driver | META / PQL |
jdbc.postgres.url | jdbc:postgresql://${PP_POSTGRES_HOST}:${PP_POSTGRES_PORT}/${PP_DB_NAME}?characterEncoding=UTF-8 | |
jdbc.cassandra.driver | plantpulse.cassandra.jdbc.CassandraDriver | OLTP Zeitreihe(CQL). Treiberwert dient der Konfigurationskonsistenz (funktional ungenutzt) |
jdbc.cassandra.url | jdbc:cassandra://${PP_CASSANDRA_HOST}:${PP_CASSANDRA_PORT}/${PP_SCHEME} | |
jdbc.tse.driver | plantpulse.timeseries.tql.TQLDriver | OTAP / TQL |
jdbc.tse.url | jdbc:ts://${PP_TSE_HOST}:${PP_TSE_PORT}/${PP_SCHEME} | ⚠️ Fixiert auf plain http(ts/7800) |
jdbc.spark.driver | plantpulse.spark.jdbc.SparkSQLDriver | OLAP Analyse |
jdbc.spark.url | jdbc:spark://${PP_SPARK_HOST}:${PP_KYUUBI_PORT}/default/${PP_SCHEME} | |
data.gateway.api.key | ${PP_DATA_GATEWAY_API_KEY} | Für JDBC-Aufruf-Authentifizierung |
⚠️ Ändern Sie
jdbc.tse.urlnicht in https(tss/7801). Der TQL JDBC-Treiber verwendet den Plaintext TSE-Listener (7800). TSE-Clients sind global auf Plaintext http/7800 voreingestellt (2026-08, env.sh TSE-Abschnitt). Eine Einstellung auf tss/7801 führt zu JDBC-Verbindungsfehlern → Data-Gateway Boot-Fehler → alle/api/v1/*geben 404 aus → Analytics-Katalog ergibt 404. Daher ist dies aufts/PP_TSE_PORTfixiert.
jdbc.spark.usernameist das Analyse-Spezialkonto${PP_ANALYTICS_USER}. Es ist vom internen Metastore-Konto des Kyuubi(PP_HIVE_*) getrennt. Als optionale Schlüssel könnenjdbc.<tech>.pool.initial|min|max(postgres/spark/tse) undjdbc.<tech>.query.timeout|fetch-sizeverwendet werden (Gesamtreferenzplantpulse-jdbc/docs/configuration.md).jdbc.cassandra.local-datacenterist in der Vorlage auskommentiert und beträgt bei Nichtkonfigurationdatacenter1.
plantpulse-data-gateway.properties
| Property | Standardwert | Beschreibung |
|---|---|---|
data.gateway.api.key | ${PP_DATA_GATEWAY_API_KEY:ADFA-URDV-QWED-1234} | API-Authentifizierungsschlüssel (Erforderlich). Dev-Standardwert muss bei Auslieferung ersetzt werden |
data.gateway.rate.limit | 1000 | Maximale Anfragen pro Sekunde (basiert auf IP + API-Key) |
data.gateway.slow.query.ms | 10000 | Schwellenwert für Warnung bei langsamer Abfrage (ms) |
data.gateway.slow.update.ms | 2000 | Schwellenwert für Warnung bei langsamer Aktualisierung (ms) |
data.gateway.async.timeout.ms | 60000 | Asynchroner Timeout (ms) |
plantpulse-datalake-admin-api.properties
Sammlung von JMX/Management-Endpunkten der Dienste basierend auf einem Single-Node(type=MASTER). Dies ist die einzige Datei, die Unterstriche(_) statt Punkte(.) in den Schlüsseln verwendet.
| Property | Standardwert | Beschreibung |
|---|---|---|
type | MASTER | Single-Node oder Cluster-Master |
db_type | CASSANDRA | Typ der zu überwachenden DB |
master / host | ${PP_MASTER_IP} / ${PP_HOST_IP} | Master / Eigener Host |
db_host · db_port · db_keyspace · db_username · db_password · db_replication_factor | ${PP_CASSANDRA_*} · 9042 · ${PP_SCHEME} · 1 | Aster TSDB Verbindung |
tse_host · tse_port · tse_protocol · tse_username · tse_password | ${PP_TSE_*} · 7801 · https · tse · tse123! | TSE Verbindung (Metrik-Laden) |
kafka_jmx_uri | service:jmx:rmi:///jndi/rmi://${PP_KAFKA_HOST}:7299/jmxrmi | Kafka JMX |
mqtt_jmx_uri | ...://${PP_MQTT_HOST}:7279/jmxrmi | HiveMQ JMX |
cep_jmx_uri | ...://${PP_HOST_IP}:6499/jmxrmi | CEP JMX |
datagateway_jmx_uri | ...://${PP_HOST_IP}:7499/jmxrmi | Data Gateway JMX |
sql_jmx_uri | ...://${PP_HOST_IP}:7599/jmxrmi | SQL JMX |
tse_jmx_uri | ...://${PP_HOST_IP}:7899/jmxrmi | TSE JMX |
cassandra_jmx_uri | ...://${PP_CASSANDRA_HOST}:7199/jmxrmi | Aster TSDB JMX |
spark_jmx_uri | ...://${PP_SPARK_HOST}:10010/jmxrmi | Spark JMX |
redis_jmx_uri | redis://${PP_REDIS_HOST}:${PP_REDIS_PORT}?password=... | Valkey Verbindungs-URI |
redis_ssl_truststore_location / _password / _type / redis_ssl_endpoint_identification_enabled | p12 · ${PP_TLS_TRUSTSTORE_PASSWORD:kopens123!} · PKCS12 · false | Valkey TLS |
postgres_jmx_uri | jdbc:postgresql://.../${PP_DB_NAME}?user=...&password=... | PostgreSQL Verbindungs-URI |
JMX-Port-Zusammenfassung: HiveMQ 7279, Kafka 7299, CEP 6499, Data Gateway 7499, SQL 7599, TSE 7899, Aster TSDB 7199, Spark 10010.
plantpulse-warehouse.properties
Aster TSDB → Iceberg(S3) Archiv-Batch. In dieser Datei sind die Schlüssel in UPPER_SNAKE_CASE(UPPER_SNAKE) verfasst.
| Gruppe | Hauptschlüssel | Standardwert |
|---|---|---|
| Temporal | TEMPORAL_SERVER · TEMPORAL_TASK_QUEUE · TEMPORAL_WORKFLOW_ID · TEMPORAL_SCHEDULE_ID · OPTIMIZER_SCHEDULE_ID · OPTIMIZER_WORKFLOW_ID | ${PP_TEMPORAL_HOST}:${PP_TEMPORAL_PORT} · PP-S3-QUEUE · PP-S3-ARCHIVER-DAILY-WORKFLOW · PP-S3-ARCHIVER-DAILY · PP-S3-OPTIMIZER-WEEKLY · PP-S3-OPTIMIZER-WEEKLY-WORKFLOW |
| Zeitplan | DAILY_HOUR · DAILY_MINUTE · OPTIMIZER_DAY_OF_WEEK · OPTIMIZER_HOUR · OPTIMIZER_MINUTE · TIMEZONE | 2 · 20 · 0(Sonntag) · 3 · 0 · ${PP_TZ} |
| Modus | ARCHIVER_MODE | SHELL (oder KESTRA) |
| Kestra | KESTRA_SERVER · KESTRA_NAMESPACE · KESTRA_TASK_ID · KESTRA_USER · KESTRA_PASS | ${PP_KESTRA_HOST}:${PP_KESTRA_PORT} · plantpulse · plantpulse-daily-s3-archiver · admin@plantpulse.io · (Leerwert) |
| Skript | S3_SCRIPT_DIR · S3_SCRIPT_NAME · S3_OPTIMIZER_SCRIPT_NAME | ${PP_HOME}/plantpulse-warehouse/s3 · archive.sh · optimize.sh |
| Spark | SPARK_APP_NAME · SPARK_MASTER · SPARK_JAR_PATH · SPARK_DRIVER_MEMORY · SPARK_EXECUTOR_MEMORY · SPARK_EXECUTOR_CORES · SPARK_NUM_EXECUTORS · ARCHIVER_PARALLELISM · SPARK_CHECKPOINT_DIR | PP-SPARK-S3-LAKEHOUSE · local[*] · .../plantpulse-warehouse-s3.jar · 2g · 4g · 4 · 3 · 4 · s3a://${PP_S3_BUCKET:-plantpulse}/spark-checkpoint/ |
| Quelle/Ziel | CASSANDRA_CATALOG · CASSANDRA_DATABASE · S3_BUCKET · ICEBERG_CATALOG · ICEBERG_DATABASE | cassandra · ${PP_SCHEME:pp} · ${PP_S3_BUCKET:-plantpulse} · spark_catalog · ${PP_SCHEME:pp} |
| Optimierung | SNAPSHOT_RETENTION_DAYS · OPTIMIZER_MIN_INPUT_FILES · OPTIMIZER_TARGET_FILE_SIZE_BYTES | 3 · 10 · 134217728 (128MB) |
| Timeout | ARCHIVER_WF_EXECUTION/RUN/TASK_TIMEOUT_HOURS · OPTIMIZER_WF_EXECUTION/RUN/TASK_TIMEOUT_HOURS · ACTIVITY_MAX_ATTEMPTS · ACTIVITY_TIMEOUT_HOURS · OPTIMIZER_ACTIVITY_TIMEOUT_HOURS · SCRIPT_TIMEOUT_SECONDS · OPTIMIZER_TIMEOUT_SECONDS · HEARTBEAT_INTERVAL_SECONDS | 12/12/12 · 8/7/12 · 3 · 12 · 8 · 21600(6h) · 25200(7h) · 60 |
| Web | WEB_SERVER_PORT | 9600 |
Messaging / Authentifizierungsquellen Vorlage
plantpulse-mqtt.properties — HiveMQ Broker Konfiguration.
| Property | Standardwert |
|---|---|
mqtt.host · mqtt.user · mqtt.password | ${PP_MQTT_HOST} · ${PP_MQ_USER} · ${PP_MQ_PASSWORD} |
mqtt.port · mqtt.ssl.enabled | ${PP_MQTT_TLS_PORT} · true |
mqtt.websocket_port | 8888 |
mqtt.data_dir | /data1/pp-data/hivemq |
plantpulse-mq-auth.properties — Authentifizierungsquelle, auf die die HiveMQ Security Extension(FileAuthAuthenticator) via Umgebungsvariable HIVEMQ_AUTH_FILE verweist. Schlüssel sind nur mqtt.user / mqtt.password.
hive-auth.properties — Wird von plantpulse-hive-auth(PasswordAuthenticator) gelesen. Nutzt Umgebungsvariable HIVE_AUTH_FILE oder $PP_HOME/plantpulse-analytics/spark/conf/hive-auth.properties. Besonderheit: Der Schlüsselname selbst ist ein Placeholder.
${PP_HIVE_USER}=${PP_HIVE_PASSWORD}
${PP_ANALYTICS_USER}=${PP_ANALYTICS_PASSWORD}
kafka.properties — Kafka Broker im KRaft-Modus. Hauptwerte: process.roles=broker,controller, node.id=1, num.partitions=4, 3 Listener-Arten(SASL_PLAINTEXT/CONTROLLER/SASL_SSL), sasl.enabled.mechanisms=PLAIN, super.users=User:admin, allow.everyone.if.no.acl.found=false, log.dirs=${PP_DATA_DIR}/kafka/kraft_combined_logs, log.retention.ms=3600000(1h), message.max.bytes=157286400, default.replication.factor=1, auto.create.topics.enable=true.
⚠️
log.retention.ms=3600000= 1 Stunde. Kafka dient als Puffer; die Persistenz wird von Aster TSDB/TSE übernommen. Wenn ein Consumer länger als 1 Stunde stoppt, gehen Daten verloren.
Plugin-Vorlagen
plantpulse-plugin-opcua.properties — PostgreSQL / Aster TSDB / Valkey / Kafka Verbindung + OPC UA Server Endpunkt.
| Property | Standardwert | Beschreibung |
|---|---|---|
kafka.topic | pp-tag-point | ⚠️ Literal — Keine ${PP_TOPIC_PREFIX} Ersetzung |
kafka.thread · kafka.group.id | 8 · opcua-plugin-group | |
opc.ua.server.domain · opc.ua.server.port | ${PP_HOST_IP} · 8007 | |
opc.ua.server.user · password · anonymous | opcua · 설치-시-변경 · false | |
opc.ua.server.tcp.port · tls.port | ${PP_OPCUA_TCP_PORT:11004} · ${PP_OPCUA_TLS_PORT:11005} | |
redis.thread · redis.ssl.enabled | 4 · false |
plantpulse-plugin-aas.properties — AAS V3 Server + Kafka-Consumption Konfiguration.
| Property | Standardwert | Beschreibung |
|---|---|---|
aas.v3.port | ${PP_AAS_V3_PORT:8090} | V3 HTTP-Port |
kafka.topic | ${PP_TOPIC_PREFIX}-tag-point | Echtzeit-Tag-Point Empfang |
kafka.thread · kafka.poll.count | 8 · 1000 | |
group.id · auto.offset.reset · enable.auto.commit | pp-plugin-aas-server · earliest · false | |
session.timeout.ms · auto.commit.interval.ms | 30000 · 1000 | |
plugin.message.listener | plantpulse.plugin.opcua.messaging.KafkaPluginMessageListener |
Die Registry/AAS-Ports von BaSyx V2 sind keine Konfiguration, sondern im Code hartcodiert —
AASServer.javaunterREGISTRY_PORT=4800,AAS_PORT=4801.
Engine-Schlüssel, die nicht in der Vorlage stehen, aber vom Code gelesen werden
EngineConfig liest auch die folgenden Schlüssel. Da sie nicht in der Vorlage(plantpulse-engine.properties) stehen, gilt normalerweise der Code-Standardwert. Zur Änderung müssen die Zeilen direkt in plantpulse-server/config/plantpulse-engine.properties hinzugefügt werden.
Edge-Zeit / Status-Polling
| Property | Code-Standardwert |
|---|---|
edge.clock.poll.term.sec | 60 |
edge.clock.skew.threshold.ms | 10000 |
edge.clock.rtt.max.ms | 2000 |
edge.clock.autosync.enabled | true |
edge.clock.autosync.cooldown.ms | 600000 |
edge.clock.warn.cooldown.ms | 600000 |
edge.clock.skip.warn.count | 5 |
edge.status.poll.seconds | 30 |
edge.status.poll.jitter.max.ms | 3000 |
edge.clock.poll.term.sec und edge.status.poll.seconds bestimmen die Zyklen der Scheduler-Jobs — siehe Beschränkungen im Abschnitt Edge der Scheduler-Architektur.
DDS / Eventbus / Push / Buffer
| Property | Code-Standardwert |
|---|---|
engine.dds.queue.size | 80000 |
engine.dds.worker.threads | 4 |
engine.dds.latency.warn.ms | 1000 |
engine.eventbus.queue.capacity | 65536 |
engine.push.threads | 4 |
engine.push.queue.size | 10000 |
engine.storage.buffer.type | KAFKA |
engine.streaming.timeout.backup.queue.capacity | 12000000 |
Der Code-Standardwert für
engine.dds.enabled·engine.dds.data.tag.enabled·engine.dds.data.asset.enabledistfalse. Da die Vorlage dies explizit alstrueangibt, ist es nur in der Deployment-Version aktiviert — das Löschen dieser drei Zeilen deaktiviert das DDS stillschweigend.
Job-Threads (nicht in Vorlage aufgeführt)
| Property | Code-Standardwert |
|---|---|
engine.job.thread.oee | 10 |
engine.job.thread.ram | 5 |
engine.job.thread.ems | 5 |
engine.job.thread.system | 4 |
engine.job.asset.slow.threshold.ms | 20000 |
⚠️ Der Code-Standardwert für
engine.job.thread.pointist4, die Vorlage gibt jedoch8an (engine.job.thread.assetstimmen auf beiden Seiten mit8überein). Das Löschen der Vorlagenzeile halbiert den Wert.
Flow-Engine (nicht in Vorlage aufgeführt)
| Property | Code-Standardwert |
|---|---|
flow.engine.enabled | true |
flow.executor.parallelism | 64 |
flow.executor.queue.capacity | 10000 |
flow.executor.queue.size | 10000 |
flow.executor.poll.timeout.ms | 50 |
flow.scheduler.pool.size | 4 |
flow.timer.pool.size | 2 |
flow.jdbc.trigger.pool.size | 2 |
flow.shutdown.timeout.sec | 5 |
flow.enabled.cache.ttl.ms | 5000 |
flow.webhook.auth.enabled | true |
Alarm / ISO-Metriken / OEE
| Property | Code-Standardwert |
|---|---|
alarm.duplicate.check.minutes | 10 |
engine.oee.debounce.ms | 100 |
iso.oee.rolling.window.minutes | 10 |
iso.ems.rolling.window.minutes | 10 |
iso.ram.rolling.window.minutes | 1440 |
Anomalieerkennungs-Details (Asset-Point / System)
Nur sinnvoll, wenn via engine.data.anomaly.enabled=true aktiviert.
| Property | Code-Standardwert |
|---|---|
engine.data.anomaly.asset.point.interval | MINUTE |
engine.data.anomaly.asset.point.lookback.minutes | 14400 |
engine.data.anomaly.asset.point.recent.seconds | 600 |
engine.data.anomaly.asset.point.limit | 2100 |
engine.data.anomaly.asset.point.context.length | 2048 |
engine.data.anomaly.asset.point.prediction.length | 96 |
engine.data.anomaly.asset.point.score.history | 60 |
engine.data.anomaly.asset.point.threshold.k | 3.5 |
engine.data.anomaly.asset.point.threshold.min | 0.80 |
engine.data.anomaly.asset.point.threshold.max | 0.98 |
engine.data.anomaly.asset.point.topk.request | 5 |
engine.data.anomaly.asset.point.topn.report | 5 |
engine.data.anomaly.system.lookback.minutes | 1440 |
engine.data.anomaly.system.recent.seconds | 60 |
engine.data.anomaly.system.limit | 2100 |
engine.data.anomaly.system.context.length | 2048 |
engine.data.anomaly.system.pred.length | 96 |
engine.data.anomaly.system.threshold.min | 0.80 |
engine.data.anomaly.system.topk | 2 |
Nicht existierende Konfigurationen
Die folgenden Bezeichnungen tauchen in alten Dokumenten oder externen Quellen auf, existieren aber weder in Vorlagen noch im Code. Das Hinzufügen von Konfigurationen unter diesen Namen ist wirkungslos.
| Gesucht | Tatsächlicher Ort |
|---|---|
storage.postgresql.* | metastore.driver / metastore.url / metastore.user / metastore.password |
storage.redis.* | cache.host / cache.port / cache.password / cache.ssl.* |
storage.cassandra.* | storage.host / storage.port / storage.keyspace / storage.user / storage.password |
storage.tse.* | tse.protocol / tse.host / tse.port / tse.user / tse.password |
storage.ttl.realtime etc. | storage.tag.point.ttl / storage.asset.data.ttl etc. pro Tabelle (TTL-Abschnitt) |
storage.compression.enable / .algorithm | storage.compression.zstd.level / storage.compression.zstd.type (Vorlagenzeile ist Tippfehler — Warnung zu Tippfehler-Schlüsseln) |
storage.compaction.enable / .schedule | Reihe storage.table.compaction.strategy (Compaction-Abschnitt) |
storage.metastore.* / storage.cache.* | Keine |
mq.type / mq.kafka.bootstrap.servers / mq.kafka.group.id | mq.host + mq.kafka.port. Consumer-Gruppe ist kein Konfigurationswert, sondern eine Code-Konstante(PP-KAFKA-POINT-GROUP etc., Messaging-Architektur) |
mail.* in Datei | Nur an einer Stelle pp.mm_config (Transfer am 17.09.2026, Datei gelöscht) |
websocket.* / plantpulse-websocket.properties | Keine. STOMP/WebSocket im Juli 2026 außer Betrieb genommen; Browser-Push via SSE(/push/sse) — Messaging-Architektur |
scheduler.enabled / scheduler.thread.count / scheduler.misfire.* / scheduler.history.* | Keine. Quartz-Konfiguration in plantpulse-server-web/src/quartz.properties (WAR Classpath) — Scheduler-Architektur |
engine.ntp.enable / engine.ntp.server | engine.ntpdate.sync / engine.ntpdate.server.ip |
engine.cep.enable / engine.cep.host / engine.cep.port | engine.cep.server.ip / engine.cep.server.port / engine.cep.server.protocol |
engine.anomaly.* | engine.data.anomaly.* |
engine.dds.enable / engine.dds.topic.prefix | engine.dds.enabled, Topic-Präfix in PP_TOPIC_PREFIX (MQ-Vorlage) |
engine.async.queue.size / engine.async.timeout / engine.pipeline.batch.size / engine.timeout.* / engine.dataflow.threads / engine.dataflow.buffer.size | Keine |
PP_STOMP_* / PP_WEBSOCKET_* env Var | Nicht in env.sh vorhanden |
Properties mit Passwörtern
Werte, die vor der Auslieferung zwingend ersetzt werden müssen. Dev-Standardwerte sind Plaintext-Placeholder in env.sh (oder Vorlage). Bei Betrieb/Auslieferung an Kunden durch kundenindividuelle Werte oder Docker -e VAR=... / export überschreiben.
| Datei | Schlüssel |
|---|---|
plantpulse-storage.properties | metastore.password · cache.password · cache.ssl.truststore.password · storage.password · tse.password · data.gateway.api.key |
plantpulse-engine.properties | api.key · flow.webhook.api.key · engine.cep.server.api.key |
plantpulse-mq.properties | mq.password · mq.ssl.truststore.password |
pp.mm_config (Mail) | mail.smtp.password |
pp.mm_config (AI) | ai.llm.api.key — Fallback für alten Namen ai.openai.* wird nicht bereitgestellt |
plantpulse-cep.properties | cache.password · storage.password · cep.api.key |
plantpulse-batch.properties | metastore.password · cache.password · tse.password · mq.password · storage.db.password · analytics.password · external.db.password |
plantpulse-jdbc.properties | cache.password · jdbc.postgres.password · jdbc.cassandra.password · jdbc.tse.password · jdbc.spark.password · data.gateway.api.key |
plantpulse-data-gateway.properties | data.gateway.api.key |
plantpulse-datalake-admin-api.properties | db_password · tse_password · redis_jmx_uri (Passwort in URL) · redis_ssl_truststore_password · postgres_jmx_uri (Passwort in URL) |
plantpulse-mqtt.properties · plantpulse-mq-auth.properties | mqtt.password |
plantpulse-plugin-opcua.properties | postgres.password · cassandra.password · redis.password · kafka.password · opc.ua.server.password |
plantpulse-plugin-aas.properties | aas.db.password · cassandra.password · kafka.password |
kafka.properties | ssl.keystore.password · ssl.key.password · ssl.truststore.password |
hive-auth.properties | Gesamter Wert ist ein Passwort |
API-Key-Richtlinie:
PP_API_KEY·PP_DATA_GATEWAY_API_KEY·PP_FLOW_WEBHOOK_API_KEY·PP_CEP_API_KEYwerden als Dev-Plaintext-Standardwert-Fallback (${VAR:-<dev-default>}) beibehalten — damit Dev/Tests ohne zusätzliche Secret-Injektion booten und deployen können. Nicht auf Hardfail(:?) ändern — dies würde dazu führen, dassrestart-server.shbeim Sourcing vonenv.shsofort abbricht und das Deployment fehlschlägt.
Empfohlene Maßnahmen
Secrets werden nicht in Konfigurationsdateien geschrieben. Sie werden in einer einzigen Sidecar-Datei gesammelt und als 0600 hinterlegt.
ls -l /etc/kopens/plantpulse-platform.env # 비밀 — 0600, repo 밖
ls -l /etc/kopens/platform.node.env # 이 박스 고유 값 — 0600
# 값을 바꿀 때는 파일을 열지 말고 도구를 씁니다
cd /opt/kopens/plantpulse-platform-docker
bin/passwd.sh --list # 바꿀 수 있는 키
bin/passwd.sh PP_PG_PASSWORD # 서버 계정 변경 → 사이드카 → 재렌더 → 재시작
In die gerenderten Konfigurationsdateien fließen die fertig ersetzten Werte ein; daher dürfen diese Dateien nicht in das Repository committed werden.