属性参考
本文档由部署的实物配置模板(
*.properties)重新生成 (2026-07-28) — 模板的当前位置是plantpulse-datalake-cli/config/templates,主机的/etc/kopens/conf挂载到该位置 部署路径映射正本是plantpulse-startup/src/plantpulse/startup/config/ConfigTemplates.java, 加载优先级正本是plantpulse-core/src/plantpulse/core/engine/utils/PropertiesUtils.java。如果你增删改过键,本文档不是正本,模板才是。不要手工编辑本文档,要从模板重新生成。 各表的"基本值"是模板中的原样,
${PP_XXX}是configure.sh用env.sh值替换的地方。
配置三阶段模型
| 阶段 | 位置 | 修改方法 |
|---|---|---|
| 全局配置 | plantpulse-startup/env.sh | 直接编辑后 ./configure.sh → 重启相关模块 |
| 站点覆盖 | plantpulse-startup/env.local.sh | env.sh 全是 ${PP_VAR:-default} 形式,已导出的值占上风 |
| 模块配置 | 各模块的 config/ | 可直接编辑,但下次 configure.sh 执行时被覆盖 |
建议:在生产环境中仅编辑
env.sh(或env.local.sh) 并让configure.sh生成所有模块配置。
env.sh 修改标准流程
cd /opt/kopens/plantpulse-platform/plantpulse-datalake-cli/bin
vi env.sh # 1. 편집
./env-validate.sh # 2. 검증 (선택)
./configure.sh # 3. 템플릿 치환 + 각 모듈 config/ 로 배포
./restart.sh # 4. 재시작 (또는 ./restart-<module>.sh)
./status.sh # 5. 확인
configure.sh只重新渲染配置文件,不重启服务。重启前新配置只在磁盘上,旧进程仍在运行。
配置文件加载优先级
Web 应用(server / batch / cep / sql / data-gateway)按以下顺序查找配置文件。实现是 PropertiesUtils.readExternalFirst() 。
-Dpp.conf.dir系统属性指定的目录(常数PropertiesUtils.CONF_DIR_SYSTEM_PROPERTY = "pp.conf.dir")${catalina.base}/../config— 模块的config/目录- Web 应用 classpath(WAR 内置默认值) — 回退
外部文件以 UTF-8 读取。外部配置正常加载时,启动日志输出:
Properties loaded from external conf: <absolute-path>
外部文件读取失败则记录 error 日志并回退到 classpath。
日志配置(log4j2.xml)也通过相同链外部化(自种子 — 外部文件不存在时,WAR 默认值首次复制到模块 config/log4j2.xml 后使用)。应用时启动日志输出 Logging reconfigured from external conf: <absolute-path> 。日志级别变更修改模块 config/log4j2.xml 后重启生效,WAR 重新部署后保留。详见配置和部署指南。
警告:勿直接修改 Web 应用内部文件(
server/webapps/ROOT/WEB-INF/classes/等) — WAR 重新部署时消失。
${ENV:기본값} 替换发生两次
模板中的 ${PP_XXX} / ${PP_XXX:기본값} 标记在两个时点被解释。
| 时点 | 主体 | 动作 |
|---|---|---|
| 部署时 | configure.sh → TemplateProcessor.resolvePlaceholders | 用 env.sh 替换。顺序为 replacements map → 环境变量 → :기본값 → 原样保留。不支持嵌套 placeholder |
| 运行时 | PropertiesUtils.resolveEnvPlaceholders | 加载的 Properties 的所有值再次解释 ${ENV_VAR[:default]} |
即部署后留存的 ${...} 也可由进程环境变量填充。Docker -e VAR=... 注入优于模板默认值的原因在此。
env.sh 中不存在的 PP_* 变量(模板默认值直接应用)
以下变量由模板 ${PP_XXX:기본값} 引用,但 env.sh 不导出。无额外注入时,始终使用模板默认值。
PP_STORAGE_PASSWORD · PP_METASTORE_PASSWORD · 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_OPENAI_CHAT_PATH · PP_AI_OPENAI_RESPONSES_PATH · PP_AI_MCP_ENABLED · PP_AI_MCP_ALLOWED_ORIGINS · PP_AI_CHAT_ENABLED
PP_MAIL_SMTP_* 故意不导出。env.sh 注释所说的,导出环境变量会覆盖模板默认值(Brevo 中继 SSOT),曾发生过 SMTP 登录组合无声破损的事故(2026-07-22,陈旧的 25/no-auth 值掩盖了 Brevo 587/auth 值)。站点覆盖放在 env.local.sh 。
服务器托管的配置 5 种
ConfigTemplates.SERVER_CONFIGS 数组定义的、plantpulse-server/config/ 部署的配置文件有5 个。
| # | 模板 | 部署路径 |
|---|---|---|
| 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 |
| 4 | plantpulse-mail.properties | /plantpulse-server/config/plantpulse-mail.properties |
| 5 | plantpulse-ai.properties | /plantpulse-server/config/plantpulse-ai.properties |
其中 1~4 由 PropertiesLoader.load() 一次性读取(engine/mail/mq/storage),重构类型化配置 Bean EngineConfig · StorageConfig · MqConfig 。5(plantpulse-ai.properties)由 AIConfig 通过相同外部链单独读取。
plantpulse-startup/sh/server-managed-webapp-files.list目前为空(仅注释)。2026-06 配置外部化完成后,WAR 内部已无服务器托管配置。
application.properties (已移除)
application.properties 在 2026.06 中被移除。不存在读取该文件的代码(全库搜索结果 0),原有条目已迁移到:
- 主题 / 首页等控制台行为设置 → 控制台 系统 > 设置管理(PostgreSQL
mm_config表) alarm.duplicate.check.minutes→plantpulse-engine.properties系列(EngineConfig读取)
plantpulse-engine.properties
路径: plantpulse-server/config/plantpulse-engine.properties · 模板: template/plantpulse-engine.properties
控制数据处理引擎的核心行为。
异步 / 管道
| 属性 | 基本值 | 替换 | 说明(模板注释) |
|---|---|---|---|
engine.async.parallelism | 256 | — | 异步工作线程池并行度(总核心数 ~= 256) |
engine.pipeline.threads | 36 | — | 管道线程数 |
engine.pipeline.ratelimit | 40000 | — | 管道每秒处理上限(速率限制) |
engine.pipeline.queue.size | 1200000 | — | 管道队列大小(背压临界值) |
engine.pipeline.queue.o3.delay | 50 | — | 顺序混乱(out-of-order)数据允许延迟 (ms) |
engine.pipeline.task.mode | SINGLE | — | 任务执行模式(SINGLE / PARALLEL) |
NTP
| 属性 | 基本值 | 替换 | 说明 |
|---|---|---|---|
engine.ntpdate.server.ip | 127.0.0.1 | — | NTP 服务器 IP |
engine.ntpdate.sync | false | — | 启动时是否执行 NTP 同步 |
流 / CEP
| 属性 | 基本值 | 替换 | 说明 |
|---|---|---|---|
engine.stream.processor | DIRECT | — | 流处理模式(DIRECT/BUFFERED) |
engine.cep.server.ip | 127.0.0.1 | ${PP_CEP_HOST:127.0.0.1} | CEP 服务器 IP |
engine.cep.server.port | 7400 | ${PP_CEP_CONNECT_PORT:7400} | CEP 服务器端口(自动按协议对齐:http→7400, https→7401) |
engine.cep.server.protocol | http | ${PP_CEP_PROTOCOL:http} | CEP 协议。内部通信默认 http,分布式/容器用 https |
engine.cep.server.api.key | (无) | ${PP_CEP_API_KEY} | CEPClient X-API-Key 头。须与 CEP 服务器 cep.api.key 一致 |
流消息投递
| 属性 | 基本值 | 替换 | 说明 |
|---|---|---|---|
engine.streaming.messaging.warning.ms | 5000 | — | 消息投递延迟警告(ms) |
engine.streaming.messaging.timeout.ms | 10000 | — | 消息投递超时(ms) |
engine.streaming.messaging.timeout.store.type | FILE_QUEUE | — | 超时消息存储方式(FILE_QUEUE/MEMORY) |
engine.streaming.messaging.timeout.recovery.type | DB | — | 超时消息恢复源(DB/FILE) |
任务工作线程
| 属性 | 基本值 | 替换 | 说明 |
|---|---|---|---|
engine.job.thread.asset | 8 | — | 资产任务线程数 |
engine.job.thread.point | 8 | — | 数据点任务线程数 |
DDS
| 属性 | 基本值 | 替换 | 说明 |
|---|---|---|---|
engine.dds.enabled | true | — | DDS 全局启用 |
engine.dds.data.tag.enabled | true | — | 标签数据 DDS 发布 |
engine.dds.data.asset.enabled | true | — | 资产数据 DDS 发布 |
异常检测 / 数据流
| 属性 | 基本值 | 替换 | 说明 |
|---|---|---|---|
engine.data.anomaly.enabled | false | — | 异常检测启用(外部服务集成) |
engine.data.anomaly.url | https://127.0.0.1:8970 | — | 异常检测服务 URL |
engine.dataflow.class | plantpulse.core.engine.pipeline.dataflow.BaseDataFlow | — | 数据流实现类 |
engine.dataflow.server-timestamp.override | false | — | 服务器时间戳强制(true:采集时刻,false:原始) |
engine.dataflow.negative-timestamp.override | true | — | 负时间戳校正 |
engine.factory.model.updater.class | plantpulse.core.engine.model.impl.DefaultFactoryMetaModelUpdater | — | 工厂元模型更新器 |
engine.event.handler.class | plantpulse.core.engine.event.DefaultEventHanlder | — | 事件处理器实现(类名拼写 Hanlder 就是实际类名) |
engine.javagc.enabled | false | — | 允许显式 System.gc() 调用 |
Flow 引擎
| 属性 | 基本值 | 替换 | 说明 |
|---|---|---|---|
flow.debug.execution.log | false | — | 节点执行 INFO 日志。仅调试会话时设为 true |
flow.stats.prune.interval.ms | 86400000 | — | 计数器清理运行周期(ms, 24 小时)。Cassandra 计数器表不支持 default_time_to_live ,应用层清理 |
flow.stats.prune.hourly.days | 30 | — | tm_flow_stats_hourly 的 hour_bucket 保留天数 |
flow.stats.prune.daily.days | 90 | — | tm_flow_stats_daily 的 day_bucket 保留天数 |
flow.health.check.interval.ms | 600000 | — | Flow 健康检查周期(ms, 10 分钟)。当前时间桶 errors > 0 则 ERROR,否则 NORMAL(KST 基准) |
flow.webhook.api.key | dev-webhook-19ba7a54-1132-49f2-967e-3c6f5cd989a0 | ${PP_FLOW_WEBHOOK_API_KEY:...} | Flow 引擎外部 webhook 认证 |
Flow 健康检查使用的 Cassandra 表:tm_flow_health_status(flow_id, hour_bucket — 当前时间累计器)、tm_flow_health_status_10m(flow_id, min10_bucket — 10 分钟粒度时序)。
边缘健康检查
| 属性 | 基本值 | 替换 | 说明 |
|---|---|---|---|
edge.health.check.interval.ms | 600000 | — | 边缘健康检查周期(ms, 10 分钟) |
判定来源是 Cassandra tm_edge_status payload 的 _ON / _NORMAL 标志。无 RT REST 调用,负载为 0,1 秒内完成。表为 tm_edge_health_status(edge_id, hour_bucket)、tm_edge_health_status_10m(edge_id, min10_bucket)。
认证 / 安全
| 属性 | 基本值 | 替换 | 说明 |
|---|---|---|---|
api.key | (无) | ${PP_API_KEY} | 平台内部 API 密钥(服务器 ↔ 边缘代理认证) |
engine.api.v5.auth.bruteforce.enabled | true | — | V5 API 认证暴力破解防护 |
engine.api.v5.auth.bruteforce.ip_limit | 30 | — | 单 IP 尝试限制 |
engine.api.v5.auth.bruteforce.user_limit | 10 | — | 单用户尝试限制 |
engine.api.v5.auth.bruteforce.window.seconds | 60 | — | 计数窗口(秒) |
engine.api.v5.trusted_proxies | (空值) | — | 信任代理 IP 白名单。仅配置时若 remoteAddr 在列表中,则用 X-Forwarded-For 首 IP 作 client IP。为空则仅用 getRemoteAddr() (故障安全) |
engine.session.bruteforce.enabled | true | — | /login/login 浏览器会话暴力破解防护 |
engine.session.bruteforce.ip_limit | 30 | — | 单 IP 尝试限制 |
engine.session.bruteforce.user_limit | 10 | — | 单用户尝试限制 |
engine.session.bruteforce.window.seconds | 300 | — | 计数窗口(秒) |
会话暴力破解计数器是内存中 Caffeine — 多节点共享(Redis)未实现。
API 令牌
| 属性 | 基本值 | 替换 | 说明 |
|---|---|---|---|
engine.api.token.cleanup.enabled | true | — | 已过期(expires_at < now)/已撤销(revoked_at IS NOT NULL)令牌清理 |
engine.api.token.cleanup.retention_days | 30 | — | 此期间后从 mm_token 硬删除。每 24 小时运行 1 次(启动 60s 后首次) |
engine.api.token.default_ttl_days | 90 | — | 新令牌发放时默认过期期限(天)。0 = 永久令牌。若发放请求提供 ttl_days 则其优先 → API 令牌发放 |
既有 expires_at 为 NULL 的令牌保持永久活跃(向下兼容)。
plantpulse-storage.properties
路径: plantpulse-server/config/plantpulse-storage.properties · 模板: template/plantpulse-storage.properties
管理元数据存储(PostgreSQL) · 缓存(Valkey) · 时序(Cassandra) · TSE · Data Gateway 访问和存储策略。
⚠️ 本文件存在拼写错误的键。3 个键的拼写与代码读取不同 — 拼写错误键警告小节必读。
PostgreSQL 元数据存储
| 属性 | 基本值 | 替换 | 说明 |
|---|---|---|---|
metastore.driver | org.postgresql.Driver | — | JDBC 驱动类 |
metastore.url | jdbc:postgresql://... | ${PP_POSTGRES_HOST} · ${PP_POSTGRES_PORT} · ${PP_DB_NAME} | 元数据存储 JDBC URL。查询字符串含 ?characterEncoding=UTF-8&reWriteBatchedInserts=true |
metastore.user | — | ${PP_PG_USER} | 元数据存储账户 |
metastore.password | — | ${PP_PG_PASSWORD} | 元数据存储密码 |
缓存(Valkey / Redis 兼容)
| 属性 | 基本值 | 替换 | 说明 |
|---|---|---|---|
cache.host | — | ${PP_REDIS_HOST} | 缓存主机 |
cache.port | — | ${PP_REDIS_PORT} | 缓存端口(内部明文 Valkey 后端) |
cache.password | — | ${PP_REDIS_PASSWORD} | 缓存密码 |
cache.ssl.enabled | false | — | 缓存 TLS。内部客户端默认 redis:// |
cache.ssl.truststore.location | /var/security/plantpulse/master/master.truststore.p12 | — | 信任库路径 |
cache.ssl.truststore.password | kopens123! | ${PP_TLS_TRUSTSTORE_PASSWORD:kopens123!} | 信任库密码 |
cache.ssl.truststore.type | PKCS12 | — | 信任库类型 |
cache.ssl.endpoint.identification.enabled | false | — | 端点标识验证 |
键常数正本是 plantpulse-inmemory 的 InMemoryConfigKeys 。
TSE(TimeSeries Engine)
| 属性 | 基本值 | 替换 | 说明 |
|---|---|---|---|
tse.protocol | http | ${PP_TSE_PROTOCOL:http} | TSE 协议。内部通信故明文 http 基本(2026-08) |
tse.host | — | ${PP_TSE_HOST} | TSE 主机 |
tse.port | 7800 | ${PP_TSE_CONNECT_PORT:7800} | TSE 端口。明文监听器 7800 基本 |
tse.user | tse | ${PP_TSE_USER:tse} | TSE 账户 |
tse.password | tse123! | ${PP_TSE_PASSWORD:tse123!} | TSE 密码 |
Cassandra 时序存储
| 属性 | 基本值 | 替换 | 说明 |
|---|---|---|---|
storage.db_type | CASSANDRA | — | DB 类型(模板注释仍为 CASSANDRA/DSE/SCYLLADB,但当前专用 Cassandra 5.0) |
storage.db_version | 5.0 | — | DB 版本(驱动/功能兼容性决定因素) |
storage.host | — | ${PP_CASSANDRA_HOST} | contact point 主机 |
storage.port | 9042 | ${PP_STORAGE_PORT:9042} | 原生协议端口 |
storage.keyspace | — | ${PP_KEYSPACE} | 使用的 keyspace |
storage.user | — | ${PP_CASSANDRA_USER} | 访问账户 |
storage.password | cassandra | ${PP_STORAGE_PASSWORD:cassandra} | 密码。PP_STORAGE_PASSWORD 是 env.sh 未导出 → 应用默认值 |
storage.durable_writes | true | — | commit log 使用(⚠️ 无读取代码 — 见下方) |
storage.append_columns | [] | — | 自定义列自动添加 |
storage.replication | { 'class' : 'NetworkTopologyStrategy', 'datacenter1' : 1 } | — | 复制策略(单节点基本) |
storage.data.disk.name | — | ${PP_DATA_DISK_NAME} | 数据磁盘名 |
TTL(单位:天)
| 属性 | 基本值 | 说明 |
|---|---|---|
storage.tag.point.ttl | 62 | 标签时序原始 |
storage.tag.point.map.ttl | 1 | 标签数据点映射 |
storage.tag.point.sampling.ttl | 93 | 标签采样 |
storage.tag.point.snapshot.ttl | 93 | 标签快照 |
storage.tag.point.aggregation.ttl | 93 | 标签聚合 |
storage.tag.point.archive.ttl | 365 | 标签归档(长期保留) |
storage.tag.blob.ttl | 93 | 标签 BLOB |
storage.asset.data.ttl | 10 | 资产数据 |
storage.asset.data.sampling.ttl | 31 | 资产采样 |
资产快照周期
| 属性 | 基本值 | 说明 |
|---|---|---|
storage.asset.data.snapshot.interval | 10 SECONDS | 每周期前将资产的标签映射(data_map)记录到 asset_data 系列(data/second/timestamp + 分/时/日边界) |
模板注释阐述了根据:1 SECONDS 基准资产 121 约分钟 22K 写入(Cassandra 整体 ~4%),过密。标签原始(秒粒度)已在 tm_tag_point /TSE 完整保留,资产视图快照降至 10s(与代码默认值一致) — 写入 −90%,记录完整性保持。
此值成为调度器的
ASSET_DATA_JOB周期。"<n> <unit>"须为 2 令牌格式,规则见调度器架构参考。
内部元数据存储同步(实验性)
| 属性 | 基本值 | 说明 |
|---|---|---|
storage.internal.metastore.enabled | false | 内部元数据存储同步启用 |
storage.internal.metastore.thread.count | 4 | 同步工作线程数 |
storage.internal.metastore.queue.size | 12000000 | 同步队列大小 |
storage.internal.metastore.point.retation.days | 10 | 数据点保留天数(⚠️ 拼写错误键 — 见下方) |
行缓存
| 属性 | 基本值 | 说明 |
|---|---|---|
storage.asset.data.row.cache.size | NONE | 资产数据行缓存(NONE/ROWS_ONLY/ALL) — ⚠️ 无读取代码 |
storage.tag.point.row.cache.size | NONE | 标签数据点行缓存 — ⚠️ 无读取代码 |
合并
| 属性 | 基本值 | 说明 |
|---|---|---|
storage.table.compaction.strategy | UCS | 默认策略(TWCS:时间窗口,UCS:统一)。CassandraCreateDAO 读取(代码回退 TWCS) |
storage.table.compaction.strategy.twcs.window_size | 1 | TWCS 窗口大小 — ⚠️ 无读取代码 |
storage.table.compaction.strategy.twcs.window_unit | DAYS | TWCS 窗口单位 — ⚠️ 无读取代码 |
storage.table.compaction.strategy.ucs.scailing_parameter | T8 | UCS 缩放参数(T8 = tiered 8 levels)。键拼写 scailing 与代码一致 |
storage.table.compaction.strategy.ucs.min_sstable_size | 128MiB | UCS 最小 sstable 大小(代码回退 100MiB) |
storage.table.compaction.strategy.ucs.target_sstable_size | 512MiB | UCS 目标 sstable 大小 |
storage.table.compaction.strategy.ucs.base_shard_count | 8 | UCS 基础分片数 |
storage.table.compaction.strategy.ucs.max_sstables_to_compact | 6 | 一次合并最大 sstable 数 |
storage.table.compaction.strategy.ucs.sstable_growth | 0.7 | UCS sstable 增长比例 |
压缩 / 查询限制 / 备份 / Data Gateway
| 属性 | 基本值 | 替换 | 说明 |
|---|---|---|---|
storage.compresion.zstd.level | 3 | — | zstd 压缩级别(1~22) — ⚠️ 拼写错误键,见下方 |
storage.tag.point.select.limit.size | 1000000 | — | 单标签数据点 select 最大行数 |
storage.doamin.model.changed.to.metastore.backup | true | — | 域模型变更时元数据存储备份 — ⚠️ 拼写错误键 + 无读取代码 |
data.gateway.protocol | http | ${PP_DATA_GATEWAY_PROTOCOL:http} | Data Gateway 协议 |
data.gateway.host | 127.0.0.1 | ${PP_DATA_GATEWAY_HOST:127.0.0.1} | Data Gateway 主机(本地同驻前提) |
data.gateway.port | 5500 | ${PP_DATA_GATEWAY_CONNECT_PORT:5500} | Data Gateway 端口(代码回退 5501) |
data.gateway.api.key | — | ${PP_DATA_GATEWAY_API_KEY} | Data Gateway API 密钥 |
⚠️ 拼写错误键 — 编辑后被忽略
模板中确实存在的以下 3 个键,其拼写与代码读取的拼写不同。管理员改变这些行的值也会无声被忽略,应用代码默认值。
| 模板中的键(错误) | 代码实际读取的键 | 代码默认值 | 读取位置 |
|---|---|---|---|
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 | 不存在(即使正确拼写也无读取代码) | — | — |
要实际改变值,须在同文件中添加正确拼写的键。例如将 zstd 级别升至 6,要加入
storage.compression.zstd.level=6(不是修复拼写错误的行,而是新增正确拼写的行)。错误行保留也无害,但修复模板本身是根本方案。
storage.doamin.model.changed.to.metastore.backup无论哪种拼写都无读取代码。域模型变更时备份由MetastoreBackupDeployer承担(cron0 0 12 1 1/1 ? *,每月 1 日 12:00) — 见调度器架构。
模板中不存在但代码读取的 storage 键
| 属性 | 代码默认值 | 说明 |
|---|---|---|
storage.compression.zstd.type | ZstdCompressor | 压缩器类名 |
无读取代码的 storage 模板键(编辑无效)
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 (+ 上述拼写错误键 3 个)
TWCS 相关两个键改为 storage.table.compaction.strategy=TWCS 也无法控制窗口大小/单位。
plantpulse-mq.properties
路径: plantpulse-server/config/plantpulse-mq.properties · 模板: template/plantpulse-mq.properties
管理 Kafka / MQTT 代理访问和 DDS 发布主题。代码端 SSOT 为 MqConfig (访问) 和 UNSTopicDefaults (主题)。
代理访问
| 属性 | 基本值 | 替换 | 说明 |
|---|---|---|---|
mq.host | — | ${PP_KAFKA_HOST} | 代理主机(Kafka/MQTT 通用) |
mq.user | — | ${PP_MQ_USER} | 代理管理账户 |
mq.password | — | ${PP_MQ_PASSWORD} | 代理密码 |
mq.kafka.port | 9092 | ${PP_KAFKA_PORT:9092} | Kafka 端口 |
mq.kafka.security.protocol | SASL_PLAINTEXT | — | Kafka 安全协议 |
mq.ssl.truststore.location | /var/security/plantpulse/master/master.truststore.p12 | — | 消息 TLS 信任库(MQTT + 可选 Kafka TLS) |
mq.ssl.truststore.password | kopens123! | ${PP_TLS_TRUSTSTORE_PASSWORD:kopens123!} | 信任库密码 |
mq.ssl.truststore.type | PKCS12 | — | 信任库类型 |
mq.ssl.endpoint.identification.algorithm | (空值) | — | 主机名验证算法(空值 = 不验证) |
mq.mqtt.port | — | ${PP_MQTT_TLS_PORT} | MQTT 访问端口 |
mq.mqtt.ssl.enabled | true | — | MQTT TLS 使用 |
MqConfig 除上述键外还读取 Kafka 专用信任库覆盖 mq.kafka.ssl.truststore.location / .password / .type 和 mq.kafka.ssl.endpoint.identification.algorithm (模板中不存在,缺失则用 mq.ssl.*)。
DDS 主题
Kafka 14 种(mq.dds.kafka.topic.*) + MQTT UNS 14 种(mq.dds.mqtt.topic.*) + SparkplugB 2 种(mq.dds.mqtt.sparkplugb.*)。
键和基本值全量列在消息架构 → DDS 发布主题。主题值是 Kafka/MQTT 线协议,UNSTopicDefaultsContractTest 冻结字面量,禁止任意修改。
${PP_TOPIC_PREFIX} 同时决定 Kafka 主题前缀(pp-)、MQTT UNS 路径根目录(pp/)、SparkplugB 组 ID。
plantpulse-mail.properties
路径: plantpulse-server/config/plantpulse-mail.properties · 模板: template/plantpulse-mail.properties
告警/报表发送的 SMTP · SMS 配置。
| 属性 | 基本值 | 替换 | 说明 |
|---|---|---|---|
mail.send.enabled | false | ${PP_MAIL_SEND_ENABLED:false} | 主控发送网关。非 true 则所有邮件发送仅记 WARN 日志并跳过(不尝试 SMTP)。站点选入 |
mail.smtp.host | smtp-relay.brevo.com | ${PP_MAIL_SMTP_HOST:...} | SMTP 主机 |
mail.smtp.port | 587 | ${PP_MAIL_SMTP_PORT:587} | SMTP 端口(25:明文,465:SSL,587:STARTTLS) |
mail.smtp.auth | true | ${PP_MAIL_SMTP_AUTH:true} | SMTP 认证使用 |
mail.smtp.user | b2df89001@smtp-brevo.com | ${PP_MAIL_SMTP_USER:...} | SMTP 发信账户 |
mail.smtp.password | bskHIVJqcFQaFtb | ${PP_MAIL_SMTP_PASSWORD:...} | SMTP 密码(dev 默认值 — 交付时须更换) |
mail.smtp.starttls.enable | true | ${PP_MAIL_SMTP_STARTTLS:true} | STARTTLS 使用 |
sms.sender.class | plantpulse.cep.listener.alarm.sms.DefaultSMSSender | — | SMS 发送实现类(CEP 监听器) |
diagnostic.log.email | diag@kopens.com | ${PP_DIAGNOSTIC_EMAIL:diag@kopens.com} | 诊断告警接收邮箱 — ⚠️ 无读取代码 |
PP_MAIL_SMTP_*不由env.sh导出。本模板(Brevo 中继)是 SSOT,环境变量覆盖会无声破损登录组合。站点覆盖放在env.local.sh。详见替换小节。
plantpulse-ai.properties
路径: plantpulse-server/config/plantpulse-ai.properties · 模板: template/plantpulse-ai.properties
管理 OpenAI 兼容 AI 网关和 AI 功能开关。代码端由 plantpulse.core.service.ai.AIConfig 通过相同外部配置链读取。
网关
| 属性 | 基本值 | 替换 | 说明 |
|---|---|---|---|
ai.openai.enabled | false | ${PP_AI_OPENAI_ENABLED:false} | 主控功能开关。false 则 AI UI · 端点隐藏和禁用 |
ai.openai.base.url | https://api.openai.com | ${PP_AI_OPENAI_BASE_URL:...} | OpenAI 兼容网关。末尾禁止斜杠 |
ai.openai.chat.path | /v1/chat/completions | ${PP_AI_OPENAI_CHAT_PATH:...} | chat completions 路径 |
ai.openai.responses.path | /v1/responses | ${PP_AI_OPENAI_RESPONSES_PATH:...} | responses 路径 |
ai.openai.api.key | (空值) | ${PP_AI_OPENAI_API_KEY:} | LiteLLM 虚拟键 / 代理键。库默认值无 |
ai.openai.model | gpt-5-mini | ${PP_AI_OPENAI_MODEL:gpt-5-mini} | LiteLLM config.yaml 暴露的模型名 |
ai.openai.timeout.ms | 15000 | — | 请求超时(ms) |
ai.openai.max.output.tokens | 1200 | — | 最大输出令牌 |
ai.openai.temperature | -1 | — | 采样 temperature。负值则请求 body 完全省略参数 |
⚠️
ai.openai.temperature陷阱。gpt-5 系列(gpt-5-mini、gpt-5.5等)不支持 temperature,发送非默认值 1 会导致400 Unsupported value。故应置为负数(省略 sentinel)。模板注释的"默认值 0.1"是指 LiteLLM/vLLM 网关(gpt-4o 等)基准,当前模板实际值是-1。
运营助手
| 属性 | 基本值 | 说明 |
|---|---|---|
ai.alarm.rca.enabled | true | 告警根因分析 |
ai.alarm.eql.enabled | true | 告警 EQL 辅助 |
ai.uns.topic.enabled | true | UNS 主题辅助 |
ai.result.audit.enabled | true | AI 结果审计 |
ai.similar.incident.enabled | true | 相似故障案例推荐 |
ai.similar.incident.max.items | 5 | 推荐最大案例数 |
ai.similar.incident.min.score | 40 | 推荐最小得分 |
ai.diagnostic.summary.* 3 个(诊断日志 AI 摘要)和 ai.operations.report.* 3 个(AI 运营报表)已在2026-08-25 产品中移除。屏幕、JS、控制器一并删除,恢复值后功能不会复活。
升级前配置文件中残存这些键无害 — 无读取代码故被忽略。如需清理可删除。
MCP / 聊天
| 属性 | 基本值 | 替换 | 说明 |
|---|---|---|---|
ai.mcp.enabled | true | ${PP_AI_MCP_ENABLED:true} | MCP(AI chat-ops 端点) |
ai.mcp.allowed.origins | (空值) | ${PP_AI_MCP_ALLOWED_ORIGINS:} | MCP 允许源列表 |
ai.chat.enabled | false | ${PP_AI_CHAT_ENABLED:false} | server-web 控制台 AI 聊天抽屉。ai.openai.* 网关须启用才能动作 |
其他模板
template/ 包含上述 5 种外还有应用程序和基础设施配置模板。部署路径映射正本是 ConfigTemplates.java 。
| 模板 | 部署路径 | 用途 |
|---|---|---|
plantpulse-batch.properties | /plantpulse-batch/config/ | 批处理(时序同步/聚合) |
plantpulse-cep.properties | /plantpulse-cep/config/ | CEP 引擎 |
plantpulse-jdbc.properties | /plantpulse-data-gateway/config/ 及 /plantpulse-sql/config/ | JDBC 集成配置(两模块共享同一模板) |
plantpulse-data-gateway.properties | /plantpulse-data-gateway/config/ | Data Gateway 行为 |
plantpulse-warehouse.properties | /plantpulse-warehouse/config/ | Cassandra → Iceberg(S3)归档 |
plantpulse-monitor.properties | /plantpulse-monitor/config/ | 监控器(JMX 采集) |
plantpulse-plugin-opcua.properties | /plantpulse-plugin/opc-ua/config/ | OPC UA 服务器插件 |
plantpulse-plugin-aas.properties | /plantpulse-plugin/aasx-server/config/ | AAS V3(aasx-server)插件 |
kafka.properties | /plantpulse-messaging/kafka/config/kafka.properties | Kafka(KRaft)代理 |
kafka-jaas.conf | /plantpulse-messaging/kafka/config/jaas.conf | Kafka JAAS |
hivemq.xml | /plantpulse-messaging/mqtt/conf/config.xml | HiveMQ 代理 |
plantpulse-mq-auth.properties | /plantpulse-messaging/mqtt/conf/auth.properties | HiveMQ 认证源 |
hive-auth.properties | /plantpulse-analytics/spark/conf/ | Hive/分析账户认证源 |
plantpulse-timeseries-engine.conf | /plantpulse-timeseries/engine/conf/ (2 处) | TSE |
valkey.conf · postgresql.conf · pg_hba.conf · cassandra.yaml · jvm-server.options | /plantpulse-storage/... | 存储 |
spark-env.sh · spark-defaults.conf · hive-site.xml · kyuubi-defaults.conf · gravitino-iceberg-rest-server.conf | /plantpulse-analytics/... | 分析 |
workflow.yaml · application.yaml | /plantpulse-workflow/... | Temporal / Kestra |
plantpulse-startup.properties | (startup 自用) | 启动时数据湖健康检查访问信息 |
plantpulse-sql.properties不存在。SQL 模块接收plantpulse-jdbc.properties。plantpulse-websocket.properties也不存在。WebSocket/STOMP 系列无配置文件。template/cluster/是仅限工作节点的覆盖 — 修改 master 模板后需同步这里。
plantpulse-batch.properties
包含访问块(平台/元数据存储/缓存/TSE/Kafka/Cassandra/Spark)和批处理行为设置。访问键与 storage/jdbc 名称不同需注意 — 例:Cassandra 为 storage.db.host / storage.db.port / storage.db.keyspace (server 为 storage.host / storage.port / storage.keyspace)。
| 属性 | 基本值 | 说明 |
|---|---|---|
platform.host | ${PP_MASTER_IP} | 平台(server-web)主机 |
mq.port | 9092 | Kafka 端口(字面值 — 非替换) |
kafka.topic | pp-batch | 批处理入站主题 |
kafka.group.id | PP-BATCH-GROUP | 批处理消费者组 |
batch.timer_schedule_delay | 5000 | 批处理计时器周期(ms) |
batch.thread_pool_batch_thread_size | 4 | 批处理工作线程数 |
batch.buffer_drain_limit_size | 10000 | 一次清空最大条数 |
batch.sync.inmemory.enabled | false | 内存中同步 |
batch.sync.inmemory.ttl.minute | 10 | 内存中同步 TTL(分) |
batch.sync.tse.enabled | true | 分发到 TSE |
batch.sync.external.db.enabled | false | 外部 DB 同步 |
external.db.name | TIMESCALEDB | 外部 DB 类型。INFLUXDB/QUESTDB 块在模板中注释状态 |
analytics.url | jdbc:spark://${PP_SPARK_HOST}:${PP_KYUUBI_PORT}/default | Spark Thrift JDBC |
plantpulse-cep.properties
| 属性 | 基本值 | 说明 |
|---|---|---|
cep.ha.enabled | true | 基于 Redis 的 HA 杀死开关(重启时保留部署/named window/单键表状态) |
cep.ha.snapshot.interval_ms | 1000 | 快照周期(事件线程非阻塞后台) |
cep.ha.snapshot.named_windows | true | named window 快照 |
cep.ha.snapshot.tables | true | 表快照 |
cep.async.core_pool_size | 32 | 异步核心池 |
cep.async.max_pool_size | 256 | 异步最大池 |
cep.async.queue_capacity | 50000 | 异步队列 |
cep.async.keep_alive_seconds | 60 | 线程存活 |
cep.async.shutdown_timeout_seconds | 30 | 优雅关闭等待 |
cep.consumer.thread_count | 16 | 消费者线程 |
cep.stream.shard_count | 16 | 流分片数 |
cep.stream.drain_limit_size | 1000 | 排放上限 |
cep.stream.drain_warn_ms | 1000 | 排放警告(ms) |
cep.monitor.initial_delay_seconds | 5 | 监控首次延迟 |
cep.monitor.interval_seconds | 1 | 监控周期 |
cep.monitor.store_interval_seconds | 60 | EQL 语句级指标 Cassandra 存储周期 |
cep.monitor.statement_metrics_enabled | true | 语句级指标采集 |
cep.performance.cpu_warn_threshold_ns | 1000000000 | CPU 警告阈值(ns) |
cep.performance.wall_warn_threshold_ns | 1000000000 | wall 警告阈值(ns) |
cep.api.key | ${PP_CEP_API_KEY} | EQL 管理端点认证(X-API-Key) |
cep.api.max_eql_text_length | 100000 | EQL 文本最大长度(DoS 防护) |
cep.storage.request_timeout_seconds | 10 | Cassandra 请求超时 |
cep.storage.max_inflight_writes | 256 | 飞行中写入上限 |
cep.storage.connect_max_retries | 3 | 访问重试 |
cep.storage.ttl_seconds | 864000 | 指标 TTL(秒,10 天) |
cep.stream.pending_idle_threshold_ms | 60000 | pending 空闲阈值 |
cep.stream.cleaner_initial_delay_ms | 60000 | 清理器首次延迟 |
cep.stream.cleaner_interval_ms | 10000 | 清理器周期 |
cep.stream.max_clean_duration_ms | 30000 | 清理最大耗时 |
cep.stream.cleaner_max_claim_count | 5000 | 声明最大条数 |
cep.stream.ack_chunk_size | 500 | ACK 块大小 |
cep.monitor.store_interval_seconds 的 60 有根据 — 语句数(资产×EMS/告警规则,dev 实测 1,263 个)成比例地产生写入,10s 时分钟 7.6K 行。仅按需查询,60s 缓解(−83%)。
HA 专用 Redis 访问(cep.ha.redis.host/port/password)在模板中注释状态 — 仅用不同 Redis 时解除注释。
plantpulse-jdbc.properties
外部 JDBC 客户端(SQL 模块 · Data Gateway)的统一访问配置。前缀为 jdbc.<tech> (postgres/cassandra/spark/tse)。
| 属性 | 值 | 说明 |
|---|---|---|
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 时序(CQL)。驱动值仅为配置一致性(功能未用) |
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} | ⚠️ 明文 http(ts/7800)固定 |
jdbc.spark.driver | plantpulse.spark.jdbc.SparkSQLDriver | OLAP 分析 |
jdbc.spark.url | jdbc:spark://${PP_SPARK_HOST}:${PP_KYUUBI_PORT}/default/${PP_SCHEME} | |
data.gateway.api.key | ${PP_DATA_GATEWAY_API_KEY} | JDBC 调用认证 |
⚠️ 勿将
jdbc.tse.url改为 https(tss/7801)。TQL JDBC 驱动用平文 TSE 监听器(7800)。TSE 客户端全局默认明文 http/7800(2026-08,env.sh TSE 段)。若改为 tss/7801 导致 JDBC 访问失败 → data-gateway 启动失败 →/api/v1/*全体 404 → analytics 目录 404。故ts/PP_TSE_PORT针脚固定。
jdbc.spark.username是分析专用账户${PP_ANALYTICS_USER}。与 Kyuubi 内部元数据存储账户(PP_HIVE_*)分离。 可用选择键jdbc.<tech>.pool.initial|min|max(postgres/spark/tse)、jdbc.<tech>.query.timeout|fetch-size(完整参考见plantpulse-jdbc/docs/configuration.md)。jdbc.cassandra.local-datacenter在模板中注释状态,未配置时为datacenter1。
plantpulse-data-gateway.properties
| 属性 | 基本值 | 说明 |
|---|---|---|
data.gateway.api.key | ${PP_DATA_GATEWAY_API_KEY:ADFA-URDV-QWED-1234} | API 认证密钥(必需)。dev 默认值交付时须更换 |
data.gateway.rate.limit | 1000 | 每秒最大请求数(IP + API 密钥为准) |
data.gateway.slow.query.ms | 10000 | 慢查询警告阈值(ms) |
data.gateway.slow.update.ms | 2000 | 慢更新警告阈值(ms) |
data.gateway.async.timeout.ms | 60000 | 异步超时(ms) |
plantpulse-monitor.properties
单节点(type=MASTER)基准各服务的 JMX/管理端点总览。键用下划线(_)而非点(.) 的唯一文件。
| 属性 | 基本值 | 说明 |
|---|---|---|
type | MASTER | 单节点或集群 master |
db_type | CASSANDRA | 监控对象 DB 类型 |
master / host | ${PP_MASTER_IP} / ${PP_HOST_IP} | master / 自身主机 |
db_host · db_port · db_keyspace · db_username · db_password · db_replication_factor | ${PP_CASSANDRA_*} · 9042 · ${PP_SCHEME} · 1 | Cassandra 访问 |
tse_host · tse_port · tse_protocol · tse_username · tse_password | ${PP_TSE_*} · 7801 · https · tse · tse123! | TSE 访问(指标汇入) |
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 | Cassandra JMX |
spark_jmx_uri | ...://${PP_SPARK_HOST}:10010/jmxrmi | Spark JMX |
redis_jmx_uri | redis://${PP_REDIS_HOST}:${PP_REDIS_PORT}?password=... | Valkey 访问 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 访问 URI |
JMX 端口速览:HiveMQ 7279、Kafka 7299、CEP 6499、Data Gateway 7499、SQL 7599、TSE 7899、Cassandra 7199、Spark 10010。
plantpulse-warehouse.properties
Cassandra → Iceberg(S3)归档批处理。本文件键为大写蛇形(UPPER_SNAKE)。
| 组 | 主要键 | 基本值 |
|---|---|---|
| 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-ARCHIVE-DAILY-WORKFLOW · PP-S3-ARCHIVER-DAILY · PP-S3-OPTIMIZER-WEEKLY · PP-S3-OPTIMIZER-WEEKLY-WORKFLOW |
| 调度 | DAILY_HOUR · DAILY_MINUTE · OPTIMIZER_DAY_OF_WEEK · OPTIMIZER_HOUR · OPTIMIZER_MINUTE · TIMEZONE | 2 · 20 · 0(周日) · 3 · 0 · ${PP_TZ} |
| 执行模式 | ARCHIVER_MODE | SHELL (或 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 · (空值) |
| 脚本 | 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_MINIO_BUCKET:-plantpulse}/spark-checkpoint/ |
| 源/目标 | CASSANDRA_CATALOG · CASSANDRA_DATABASE · S3_BUCKET · ICEBERG_CATALOG · ICEBERG_DATABASE | cassandra · ${PP_SCHEME:pp} · ${PP_MINIO_BUCKET:-plantpulse} · spark_catalog · ${PP_SCHEME:pp} |
| 优化 | SNAPSHOT_RETENTION_DAYS · OPTIMIZER_MIN_INPUT_FILES · OPTIMIZER_TARGET_FILE_SIZE_BYTES | 3 · 10 · 134217728 (128MB) |
| 超时 | 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 |
消息 / 认证源模板
plantpulse-mqtt.properties — HiveMQ 代理配置。
| 属性 | 基本值 |
|---|---|
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 — HiveMQ security extension(FileAuthAuthenticator)由 HIVEMQ_AUTH_FILE 环境变量指向的认证源。仅 mqtt.user / mqtt.password 两个键。
hive-auth.properties — plantpulse-hive-auth (PasswordAuthenticator)读取。HIVE_AUTH_FILE 环境变量或 $PP_HOME/plantpulse-analytics/spark/conf/hive-auth.properties 。键名本身为 placeholder 特殊之处。
${PP_HIVE_USER}=${PP_HIVE_PASSWORD}
${PP_ANALYTICS_USER}=${PP_ANALYTICS_PASSWORD}
kafka.properties — KRaft 模式 Kafka 代理。主要值:process.roles=broker,controller、node.id=1、num.partitions=4、3 种监听器(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(1 小时)、message.max.bytes=157286400、default.replication.factor=1、auto.create.topics.enable=true。
⚠️
log.retention.ms=3600000= 1 小时。Kafka 作缓冲,持久化由 Cassandra/TSE 承担的前提。消费者停机超 1 小时则数据丢失。
插件模板
plantpulse-plugin-opcua.properties — PostgreSQL / Cassandra / Valkey / Kafka 访问 + OPC UA 服务器端点。
| 属性 | 基本值 | 说明 |
|---|---|---|
kafka.topic | pp-tag-point | ⚠️ 字面值 — 非 ${PP_TOPIC_PREFIX} 替换 |
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 服务器 + Kafka 消费配置。
| 属性 | 基本值 | 说明 |
|---|---|---|
aas.v3.port | ${PP_AAS_V3_PORT:8090} | V3 HTTP 端口 |
kafka.topic | ${PP_TOPIC_PREFIX}-tag-point | 实时标签数据点接收 |
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 |
BaSyx V2 registry/AAS 端口代码硬编码 —
AASServer.java的REGISTRY_PORT=4800、AAS_PORT=4801。
plantpulse-startup.properties
启动时 Checker 用于数据湖/健康检查的访问信息。platform.host · metastore.* · cache.* · tse.* · storage.db.* · analytics.* · object.* (MinIO)块组成。值均为 env.sh 替换,采用与批处理模板相同的键命名规约(storage.db.*)。
模板中不存在但代码读取的引擎键
EngineConfig 也读取以下键。模板(plantpulse-engine.properties)中不存在,故平时应用代码默认值,改变值需在 plantpulse-server/config/plantpulse-engine.properties 直接新增行。
边缘时钟 / 状态轮询
| 属性 | 代码默认值 |
|---|---|
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 和 edge.status.poll.seconds 决定调度器任务周期 — 值约束见调度器架构的 Edge 节。
DDS / 事件总线 / 推送 / 缓冲
| 属性 | 代码默认值 |
|---|---|
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 |
engine.dds.enabled·engine.dds.data.tag.enabled·engine.dds.data.asset.enabled的代码默认值为false。模板明确设为true,部署版本中仅此时启用 — 删除这三行则 DDS 无声关闭。
任务线程(模板未记载部分)
| 属性 | 代码默认值 |
|---|---|
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 |
⚠️
engine.job.thread.point代码默认值为4但模板设为8(engine.job.thread.asset双方8一致)。删除模板行则值降半。
Flow 引擎(模板未记载部分)
| 属性 | 代码默认值 |
|---|---|
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 |
告警 / ISO 指标 / OEE
| 属性 | 代码默认值 |
|---|---|
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 |
异常检测详情(资产数据点 / 系统)
仅 engine.data.anomaly.enabled=true 启用时有意义。
| 属性 | 代码默认值 |
|---|---|
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 |
不存在的设置
以下名称出现在过去文档·外部资料中,但模板和代码中均无。以此名添加设置无任何效果。
| 找的东西 | 实际位置 |
|---|---|
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 等 | 表别 storage.tag.point.ttl / storage.asset.data.ttl 等(TTL 节) |
storage.compression.enable / .algorithm | storage.compression.zstd.level / storage.compression.zstd.type (模板行拼写错误 — 拼写错误键警告) |
storage.compaction.enable / .schedule | storage.table.compaction.strategy 系列(合并节) |
storage.metastore.* / storage.cache.* | 无 |
mq.type / mq.kafka.bootstrap.servers / mq.kafka.group.id | mq.host + mq.kafka.port 。消费者组非配置而是代码常数(PP-KAFKA-POINT-GROUP 等,消息架构) |
在 mail.* 外 plantpulse-server/config/ | plantpulse-mail.properties 一处 |
websocket.* / plantpulse-websocket.properties | 无。STOMP/WebSocket 于 2026-07 退役,浏览器推送用 SSE(/push/sse) — 消息架构 |
scheduler.enabled / scheduler.thread.count / scheduler.misfire.* / scheduler.history.* | 无。Quartz 配置是 plantpulse-server-web/src/quartz.properties (WAR classpath) — 调度器架构 |
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 ,主题前缀是 PP_TOPIC_PREFIX (mq 模板) |
engine.async.queue.size / engine.async.timeout / engine.pipeline.batch.size / engine.timeout.* / engine.dataflow.threads / engine.dataflow.buffer.size | 无 |
PP_STOMP_* / PP_WEBSOCKET_* env 变量 | env.sh 中无 |
包含密码的属性
交付前必须更换的值。dev 明文默认值是 env.sh (或模板)的 placeholder,运营/客户交付时改为客户专用值或用 Docker -e VAR=... / export 覆盖。
| 文件 | 键 |
|---|---|
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 |
plantpulse-mail.properties | mail.smtp.password |
plantpulse-ai.properties | ai.openai.api.key |
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-monitor.properties | db_password · tse_password · redis_jmx_uri (URL 内 password) · redis_ssl_truststore_password · postgres_jmx_uri (URL 内 password) |
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 | 全值是密码 |
API 密钥策略:
PP_API_KEY·PP_DATA_GATEWAY_API_KEY·PP_FLOW_WEBHOOK_API_KEY·PP_CEP_API_KEY保留 dev 明文默认值回退(${VAR:-<dev-default>}) — 目的是 dev/测试无需额外密钥注入即可启动和部署。勿改硬故障(:?) —restart-server.shsourceenv.sh时即死,部署失败。
建议措施
# 설정 파일 권한 제한
chmod 600 /opt/kopens/plantpulse-platform/plantpulse-*/config/*.properties
# 사이트별 비밀값은 env.local.sh 로 분리 (env.sh 는 SSOT 유지)
vi /opt/kopens/plantpulse-platform/plantpulse-startup/env.local.sh
密钥不提交到库。