プロパティリファレンス
このドキュメントは、配布される実物の設定テンプレート(
*.properties)から再生成されます。 テンプレートの正本はplantpulse-datalake-cli/config/templatesであり、ホストの/etc/kopens/confがその場所に バインドマウントされます。どのテンプレートがどこにレンダリングされるかはconfig/render.mapのページで定義されています。 ロード優先順位の正本はplantpulse-core/src/plantpulse/core/engine/utils/PropertiesUtils.javaです。キーを追加・削除・改名した場合は、このドキュメントではなくテンプレートが正本となります。ドキュメントを手動で編集せず、 テンプレートから再度抽出してください。各表の「デフォルト値」はテンプレートに記載されている通りであり、
${PP_XXX}は レンダリング時に環境変数で置換される箇所です。
値のソースと流れ
| 項目 | 場所 | 権限 | 変更方法 |
|---|---|---|---|
| 機密情報 — DBパスワード · APIキー | /etc/kopens/plantpulse-platform.env | 0600 | bin/passwd.sh (サーバーアカウント変更 → サイドカー更新 → 再レンダリング → 再起動を一連のコマンドで実行) |
このボックス固有の値 — PP_MASTER_IP · Kafka広告アドレス · イメージタグピン | /etc/kopens/platform.node.env | 0600 | 直接編集後 bin/restart-datalake.sh |
| 設定 — ポート · イメージタグ · ロケール · データパス | repo の .env (.env.example のみコミット) | — | 直接編集後再起動 |
エンジン設定の«行» — postgresql.conf パラメータ, Kafka保存, Aster TSDBヒープ | /etc/kopens/conf/<파일>.template | — | テンプレート編集 → pd config render → pd restart <서비스> |
pd start は 毎回 テンプレートをレンダリングして各コンポーネントの設定箇所に上書きします。cassandra.yaml
· postgresql.conf · kafka.properties を開いて修正しても、次回の起動時に元に戻ります。
修正すべき場所は テンプレート です → 設定の変更方法
機密情報ファイルは split install 時にアプリノードへ コピーされます が、ノードファイルは コピーされてはいけません。
これらをまとめると、1つのボックスの PP_MASTER_IP とイメージタグピンが他のボックスに漏洩します。
形式は VAR=값 の1種類のみです — export を付加すると env_file: がパースできなくなります。
テンプレート変更の標準手順
ホストで値を修正し、コンテナ内の pd に反映させます。
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 renderは 設定ファイルを書き直すだけで、サービスを再起動しません。 再起動まで、新しい設定はディスク上にのみ存在し、古いプロセスが生きています。そのため、4番と5番はセットで実行してください。
設定ファイルのロード優先順位
ウェブアプリケーション(server / batch / cep / sql / data-gateway)は、以下の順序で設定ファイルを探します。実装は PropertiesUtils.readExternalFirst() です。
-Dpp.conf.dirシステムプロパティで指定したディレクトリ (定数PropertiesUtils.CONF_DIR_SYSTEM_PROPERTY = "pp.conf.dir")${catalina.base}/../config— モジュールのconfig/ディレクトリ- ウェブアプリクラスパス (WAR に含まれるデフォルト値) — fallback
外部ファイルは UTF-8 で読み込みます。外部設定が正常にロードされると、起動ログに以下が出力されます。
Properties loaded from external conf: <absolute-path>
外部ファイルの読み込みに失敗した場合はエラーログを記録し、クラスパスへ fallback します。
ロギング設定(log4j2.xml)も同様のチェーンで外部化されています(自己シーディング — 外部ファイルがない場合は WAR のデフォルト値をモジュール config/log4j2.xml へ1回コピーして使用)。適用時、起動ログに Logging reconfigured from external conf: <absolute-path> が出力されます。 ログレベルの変更はモジュール config/log4j2.xml 修正後の再起動 で適用され、WAR の再デプロイ後も保持されます。詳細は設定およびデプロイガイドを参照してください。
注意: ウェブアプリ内部ファイル(
server/webapps/ROOT/WEB-INF/classes/など)は直接修正しないでください — WAR の再デプロイ時に消失します。
${ENV:기본값} 置換は2回行われる
テンプレートの ${PP_XXX} / ${PP_XXX:기본값} 表記は、 2つのタイミング で解釈されます。
| タイミング | 主体 | 動作 |
|---|---|---|
| 起動時 | pd config render | サイドカー(plantpulse-platform.env · platform.node.env)とコンテナ環境に置換。順序は 環境変数 → :기본값 → 元の値を保持。 ネストされた placeholder は非対応 |
| ランタイム | PropertiesUtils.resolveEnvPlaceholders | ロードした Properties の すべての値 に対して ${ENV_VAR[:default]} を再解釈 |
つまり、デプロイ後に残っている ${...} もプロセスの環境変数で埋めることができます。Docker -e VAR=... 注入がテンプレートのデフォルト値より優先されるのはこのためです。
サイドカーに存在しない PP_* 変数 (テンプレートのデフォルト値がそのまま適用される)
以下の変数はテンプレートが ${PP_XXX:기본값} で参照していますが、サイドカーファイルでは 定義されていません 。そのため、個別の注入がない限り、常にテンプレートのデフォルト値が使用されます。
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_* はこのリストにありましたが、現在は何も動作しませんPP_AI_OPENAI_* · PP_AI_MCP_* · PP_AI_CHAT_ENABLED を指定しても 静かに無視されます 。これらの値を
読み取っていた層が 2026-09-18 に廃止されました — AI設定を参照してください。
PP_STORAGE_PASSWORD · PP_METASTORE_PASSWORD はこのリストにありましたが、「存在しない変数」ですテンプレートもサイドカーもその名前を参照していません。実際の名前は以下の通りです —
| 項目 | 実際の変数 |
|---|---|
| 時系列ストレージ(Aster TSDB)接続 | PP_CASSANDRA_HOST · PP_CASSANDRA_PORT · PP_CASSANDRA_USER · 🔑 PP_CASSANDRA_PASSWORD |
| メタストア(PostgreSQL)接続 | PP_POSTGRES_HOST · PP_POSTGRES_PORT · PP_PG_USER · 🔑 PP_PG_PASSWORD |
🔴 PP_MAIL_SMTP_* も 現在は何も動作しません 。メール設定の正本は pp.mm_config であり、値はコンソール(/config/index)またはその表で変更します — メール設定。一貫性が求められる値(ホスト · ポート · 認証有無 · アカウント)を一箇所でのみ修正可能にしたことが、この移管の理由です。
サーバー管理設定 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 |
これら3つのファイルは PropertiesLoader.load() が一括して読み込み(engine/mq/storage)、タイプ定義された設定Bean EngineConfig · StorageConfig · MqConfig を再構成します。
pp.mm_config が正本ですplantpulse-mail.properties と plantpulse-ai.properties は 2026-09-17 に削除され 、外部設定ディレクトリに残っている可能性のある旧コピーを読み取って表に転記していた経路も 2026-09-18 に完全に廃止されました 。つまり、ファイルを作成しても 何も読み込まれません 。
値が適用される経路は コンソールと PostgreSQL pp.mm_config の2つのみです。キー名とデフォルト値の正本はコードの MailConfigKeys · AiConfigKeys であり、表に行がないキーはデフォルト値で読み込まれます — 以下2つのセクションのキー表は引き続き有効です。
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 | — | Async worker pool parallelism (total cores ~= 256) |
engine.pipeline.threads | 36 | — | パイプラインスレッド数 |
engine.pipeline.ratelimit | 40000 | — | パイプライン秒間処理上限 (rate limit) |
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サーバーポート (protocol に自動整列: 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時間)。Aster TSDBカウンタテーブルは 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エンジン外部ウェブフック認証 |
Flowヘルスチェックが使用する Aster TSDB テーブル: 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分) |
判定ソースは Aster TSDB 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() のみ使用(fail-safe) |
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 から hard delete。24時間ごとに1回(起動60秒後から初回実行) |
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) · 時系列(Aster TSDB) · 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} | キャッシュポート (内部 plaintext Valkey backend) |
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 パスワード |
Aster TSDB 時系列ストレージ
| プロパティ | デフォルト値 | 置換 | 説明 |
|---|---|---|---|
storage.db_type | CASSANDRA | — | DB 種類。テンプレート注釈に CASSANDRA/DSE/SCYLLADB が残っていますが、 現在サポートされている値は CASSANDRA のみ です |
storage.db_version | 5.0 | — | サーバーバージョンではなく«機能互換レベル» です — 以下の注記を参照 |
storage.host | — | ${PP_CASSANDRA_HOST} | contact point ホスト |
storage.db_version が 5.0 なのに nodetool version は 6.0.0 と表示されるどちらも正解です。 同じものを指している値ではありません。
| 値 | 内容 | |
|---|---|---|
storage.db_version | 5.0 | ドライバが どの機能セットで通信するか を決定する互換レベル |
| 実際の中継サーバー | 6.0.0 | apache-cassandra-timeseries-6.0.0.jar — cassandra-6.0 の社内フォーク |
5.0 を見て「サーバーが 5.0 なのだな」と解釈しないでください。サーバー側の仕様は
時系列データベースに記載されています。
この値を任意に 6.0 へ上げないでください — ドライバの動作が変更されます。
| storage.port | 9042 | ${PP_STORAGE_PORT:9042} | native プロトコルポート |
| storage.keyspace | — | ${PP_KEYSPACE} | 使用 keyspace |
| storage.user | — | ${PP_CASSANDRA_USER} | 接続アカウント |
| storage.password | cassandra | ${PP_STORAGE_PASSWORD:cassandra} | パスワード。PP_STORAGE_PASSWORD は env.sh で export されていないためデフォルト値が適用される |
| 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 書き込み(Aster TSDB 全体の約 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 | タグポイント行キャッシュ — ⚠️ 読み取りコードなし |
Compaction
| プロパティ | デフォルト値 | 説明 |
|---|---|---|
storage.table.compaction.strategy | UCS | デフォルト戦略 (TWCS: TimeWindow, UCS: Unified)。CassandraCreateDAO が読み取る(コード fallback は 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 サイズ (コード fallback 100MiB) |
storage.table.compaction.strategy.ucs.target_sstable_size | 512MiB | UCS 目標 sstable サイズ |
storage.table.compaction.strategy.ucs.base_shard_count | 8 | UCS base shard 数 |
storage.table.compaction.strategy.ucs.max_sstables_to_compact | 6 | 1回に compaction する最大 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 ポート (コード fallback 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 関連の2つのキーは 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 を同時に決定します。
メール設定 (pp.mm_config)
正本: PostgreSQL pp.mm_config · キー正本: plantpulse.core.config.MailConfigKeys.
読み取り側は SMTPMailSender.loadMailConfig() です。
PP_MAIL_* 環境変数も何も動作しませんAI と同様です — plantpulse-mail.properties と ${PP_MAIL_*} 置換層が 2026-09-17~18 に
廃止されました。 サイドカーや docker run -e で指定しても 静かに無視 されます。値はコンソールの
設定画面(/config/index) または pp.mm_config 表に入力してください。
| 設定キー | デフォルト値 | 説明 |
|---|---|---|
MAIL_SEND_ENABLED | false | マスター送信ゲート。 OFF の場合は SMTP 接続せずにスキップし WARN のみ記録します |
MAIL_SMTP_HOST | smtp-relay.brevo.com | SMTP リレーアドレス |
MAIL_SMTP_PORT | 587 | 587 = STARTTLS, 465 = 暗黙的 TLS(MAIL_SMTP_SSL_ENABLE と共に) |
MAIL_SMTP_AUTH | true | SMTP ログイン有無。ON でも MAIL_SMTP_USER が空の場合はログインしません |
MAIL_SMTP_USER | (空値) | SMTP アカウント。 リレーが発行した名前のため送信アドレスと異なる場合があります。 空で保存可能です |
🔑 MAIL_SMTP_PASSWORD | (空値) | SMTP パスワードまたは API キー。 ログインが必要なリレーで空の場合、認証が拒否されます |
MAIL_SMTP_STARTTLS_ENABLE | true | 587 で STARTTLS に昇格させるか |
MAIL_SMTP_SSL_ENABLE | false | 465 のように最初から TLS で接続するか。 この場合 starttls は OFF にします |
MAIL_SMTP_CONNECTIONTIMEOUT | 10000 | 接続タイムアウト(ms)。 指定がない場合 JavaMail のデフォルト値は「無限待機」です |
MAIL_SMTP_TIMEOUT | 10000 | 読み取りタイムアウト(ms)。 〃 |
MAIL_SMTP_WRITETIMEOUT | 10000 | 書き込みタイムアウト(ms)。 〃 |
MAIL_FROM | (空値) | 送信アドレス。 空にすると MAIL_SMTP_USER を使用しますが、リレーアカウント名は通常有効なアドレスではなく 受信側で拒否される可能性があります — 実際のアドレスを記載してください |
sms.sender.class | plantpulse.core.service.support.alarm.sms.DefaultSMSSender | SMS 送信機実装 FQN。存在しないクラスを記載するとデフォルト実装に戻ります |
TLS は 1.3 · 1.2 のみ使用し、サーバー証明書の名前を検証します。
MAIL_SMTP_USER · MAIL_SMTP_PASSWORD のデフォルト値は 空値 です。MAIL_SEND_ENABLED がデフォルト false
であるため、運用者が有効にするまで送信を試行しません。
Gmail SMTP リレーでの送信
Google Workspace の SMTP リレー(smtp-relay.gmail.com)は、送信サーバーの IP アドレスで許可 できます。この場合はアカウントがないため、ログインしない設定にします。まず Google 管理コンソールの SMTP リレー設定に、このサーバーが外部へ抜ける IP を登録してください。
| 設定キー | 値 |
|---|---|
MAIL_SEND_ENABLED | true |
MAIL_SMTP_HOST | smtp-relay.gmail.com |
MAIL_SMTP_PORT | 587 |
MAIL_SMTP_AUTH | false |
MAIL_SMTP_USER | (空にする) |
MAIL_SMTP_STARTTLS_ENABLE | true |
MAIL_SMTP_SSL_ENABLE | false |
MAIL_FROM | Workspace ドメインの実際のアドレス |
保存後、設定画面の 再適用 をクリックします。
アラームメール
- ヘッダーには製品ロゴがメール内に添付されます(CID インラインイメージ)。コンソールアドレスがなくても表示され、外部から取得するものもありません。
- メールの位置行は サイトから 記載されます(サイト › 区域 › ライン › 設備、企業は含めません)。
- «アラーム確認へ» リンクは
PP_UI_CONSOLE_URL(<콘솔 주소>/alarm/view/<알람 번호>)です。空の場合、 メールはそのまま送信され リンクのみが除外されます — アドレス設定。
diagnostic.log.email は廃止されました読み取るコードが一切なくなり、表から 削除 されました(製品テストがこのキーの再導入をブロックしています)。どこかに残っていても何も動作しません。
AI 設定 (pp.mm_config)
正本: PostgreSQL pp.mm_config · キー正本: plantpulse.core.config.AiConfigKeys.
読み取り側は AiConfig(+ AiConfig.mcpSettings()) です。
PP_AI_* 環境変数は 何も動作しません旧 plantpulse-ai.properties は 2026-09-17 に削除され、 そのファイルを読み取っていた経路と ${PP_AI_*}
置換層まで 2026-09-18 に共に廃止されました。 現在 PP_AI_OPENAI_ENABLED のような名前をサイドカーや
docker run -e で指定しても 静かに無視されます — エラーも警告も出ません。
製品がこれらの名前を「念のため」に残さず削除した理由がここにあります。存在しながら無視される 名前は 存在しない名前よりも悪影響です。サーバーが設定されているように見えるためです。
値を設定する経路は2つのみです — コンソールの設定画面(/env), または pp.mm_config 表を直接修正すること。
行がないキーは以下表のデフォルト値で読み込まれ、値を入力した時点で実際に行が作成されます。
LLM ゲートウェイ
| プロパティ | デフォルト値 | 説明 |
|---|---|---|
ai.llm.enabled | false | AI 全局スイッチ。 OFF の場合は AI 画面とエンドポイントがすべて閉じます |
ai.llm.base.url | https://api.openai.com | OpenAI 互換ゲートウェイ(LiteLLM/vLLM)。 末尾に / を付加しません |
ai.llm.chat.path | /v1/chat/completions | ゲートウェイが異なるパスを使用する場合のみ変更します |
ai.llm.responses.path | /v1/responses | 〃 |
🔑 ai.llm.api.key | (空値) | ゲートウェイキー。 空の場合、呼び出しが 401 で拒否されます |
ai.llm.model | gpt-5-mini | ゲートウェイが公開するモデル名。base.url を変更すれば これも共に 変更します |
ai.llm.timeout.ms | 60000 | LLM 呼び出しタイムアウト(ms) |
ai.llm.max.output.tokens | 4000 | 応答最大トークン数 |
ai.llm.temperature | -1 | 負数ならリクエストから完全に除外 し、モデルのデフォルト値を使用します |
ai.openai.* はもはや読み取られません接頭辞が ai.llm. に変更されました。pp.mm_config に ai.openai.base.url 行が残っていても
読み取るコードがなく、デフォルト値(https://api.openai.com)が使用されます — ゲートウェイを設定しているのに
OpenAI へ接続しようとして失敗する 状態になります。アップグレードした環境では、これらの行を確認してください。
ai.llm.temperature はなぜ負数がデフォルトなのかgpt-5 系列は temperature をサポートしておらず、デフォルト値 1 以外の値を送信すると 400 Unsupported value が
発生します。そのため「送信しない」ことを意味する負数をデフォルトとしています。LiteLLM/vLLM 以外の
モデルを使用する場合のみ 0 以上に上げてください。
機能スイッチ
🔴 デフォルト値が 2026-09-16 に変更されました。 画面に残った AI 機能は チャットのみ であり、それ以外は
製品側で停止しました。値を true に戻せば機能は復帰しますが、それらの画面はこの版で 検証
された状態ではありません。
| プロパティ | デフォルト値 | 説明 |
|---|---|---|
ai.chat.enabled | true | AI チャットコンソール — 画面に残った AI 機能はこれ一つです |
ai.chat.history.ttl.days | 90 | チャット履歴保存(日)。Cassandra TTL として適用され、 再起動後の«新規»メッセージから 反映されます |
ai.alarm.rca.enabled | false | アラーム RCA — ON にするとアラーム詳細に AI 原因分析が付随します |
ai.alarm.eql.enabled | false | アラーム EQL アシスタント — ON にするとアラーム設定フォームに下書きボタンが付随します |
ai.uns.topic.enabled | false | UNS トピック説明 — ON にすると UNS ツリーに説明パネルが付随します |
ai.result.audit.enabled | false | AI 結果監査 — 画面のない RCA 内部部品。 RCA を ON にする際に共に ON にします |
ai.similar.incident.enabled | false | 類似障害エビデンス収集 — 〃 |
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
🔴 MCP は ai.llm.enabled と«独立»しています。 画面ではなく 外部クライアント用 であるため、
ゲートウェイが停止していても /api/v5/mcp は開いています。詳細は MCP サーバーを参照してください。
| プロパティ | デフォルト値 | 説明 |
|---|---|---|
AI_MCP_ENABLED | true | false の場合 /api/v5/mcp が 404 を返します |
AI_MCP_ALLOWED_ORIGINS | (空値) | ブラウザ Origin ホワイトリスト(カンマ区切り)。 空の場合はブラウザリクエストをすべて拒否 し、ネイティブクライアントのみ許可します |
AI_MCP_TREE_MAX_NODES | 2000 | ツリー応答ノード上限 — モデルコンテキストウィンドウに依存する値のため、モデルが大きくなれば上げてください |
AI_MCP_TREE_DEFAULT_DEPTH | 2 | ツリー照会デフォルト深度 |
AI_MCP_TREE_MAX_NODE_TAGS | 100 | ノード一つに掲載するタグ数上限 |
AI_MCP_TREE_ONTOLOGY_MAX_CHARS | 200000 | オントロジー応答文字数上限 |
AI_MCP_TREE_ONTOLOGY_DEFAULT_DEPTH | 3 | ツリーデフォルト深度より一段階深くなります — タグ数が掲載される設備ノードまで表示されることで「この設備タグ数個」をデフォルト応答として回答可能になります |
AI_MCP_TREE_ONTOLOGY_MAX_TAGS | 500 | オントロジー応答 全体 のタグ行予算(ノード別上限とは別)。スリムタグ1件が約 85B となり、サイト全体を掲載するとコンテキストウィンドウの 33~56% を消費します |
その他テンプレート
template/ には上記の5種以外にもアプリケーション・インフラ設定テンプレートが存在します。デプロイパスのマッピング正本は ConfigTemplates.java です。
| テンプレート | デプロイパス | 用途 |
|---|---|---|
plantpulse-batch.properties | /plantpulse-batch/config/ | バッチ(時系列同期/集計) |
plantpulse-cep.properties | /plantpulse-cep/config/ | CEP エンジン |
plantpulse-jdbc.properties | /plantpulse-data-gateway/config/ | JDBC 統合設定 |
plantpulse-data-gateway.properties | /plantpulse-data-gateway/config/ | Data Gateway 動作 |
plantpulse-warehouse.properties | /plantpulse-warehouse/config/ | Aster TSDB → Iceberg(S3) アーカイブ |
plantpulse-datalake-admin-api.properties | /plantpulse-datalake-admin-api/config/ | 管理コンソール API · 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-websocket.propertiesも存在しません。 WebSocket/STOMP 系列の設定ファイルはありません。template/cluster/はワーカーノード専用オーバーライドです — master テンプレートを修正した場合、ここも同期させる必要があります。
plantpulse-batch.properties
接続ブロック(プラットフォーム/メタストア/キャッシュ/TSE/Kafka/Aster TSDB/Spark)とバッチ動作設定で構成されます。接続キーは storage/jdbc と名前が異なるため注意してください — 例: Aster TSDB は 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 | 1回に空にする最大件数 |
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.backend | aster | ブートするバックエンド (aster · flink)。それ以外の値はブート失敗 — バックエンド |
cep.aster.state.enabled | true | Aster CEP ルール状態(ウィンドウ · 集計 · 進行中パターン)を cache.* Redis に保存。キーは PP:CEP:ASTER-STATE:<문장> |
cep.aster.state.snapshot_interval_ms | 60000 | スナップショット周期 — クラッシュ時に消失しうる最大状態。正常停止時は最終スナップショットを撮影して終了します |
cep.async.core_pool_size | 32 | 非同期コアプール |
cep.async.max_pool_size | 256 | 非同期最大プール |
cep.async.queue_capacity | 50000 | 非同期キュー |
cep.async.keep_alive_seconds | 60 | スレッド keep-alive |
cep.async.shutdown_timeout_seconds | 30 | graceful shutdown 待機 |
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 | 指標 Aster TSDB 保存周期 |
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 | Aster TSDB リクエストタイムアウト |
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.stream.max_deliveries | 3 | この回数分だけ配信されても処理されなかったイベントのみデッドレターへ送る |
cep.stream.dead_letter.retention_ms | 86400000 | デッドレター保存期間(24時間) |
cep.stream.dead_letter.max_bytes | 268435456 | デッドレターバイト予算(256 MiB, シャード合計)。超過時はシャードごとに古いものから削除 |
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} | ⚠️ plain 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-datalake-admin-api.properties
単一ノード(type=MASTER)基準の各サービスの JMX/管理エンドポイント集です。キーに ドット(.)ではなくアンダースコア(_) を使用する唯一のファイルです。
| プロパティ | デフォルト値 | 説明 |
|---|---|---|
type | MASTER | 単一ノードまたはクラスターマスター |
db_type | CASSANDRA | モニタリング対象 DB 種類 |
master / host | ${PP_MASTER_IP} / ${PP_HOST_IP} | マスター / 自ホスト |
db_host · db_port · db_keyspace · db_username · db_password · db_replication_factor | ${PP_CASSANDRA_*} · 9042 · ${PP_SCHEME} · 1 | Aster TSDB 接続 |
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 | 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 接続 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, Aster TSDB 7199, Spark 10010.
plantpulse-warehouse.properties
Aster TSDB → 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-ARCHIVER-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_S3_BUCKET:-plantpulse}/spark-checkpoint/ |
| ソース/ターゲット | CASSANDRA_CATALOG · CASSANDRA_DATABASE · S3_BUCKET · ICEBERG_CATALOG · ICEBERG_DATABASE | cassandra · ${PP_SCHEME:pp} · ${PP_S3_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_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 の2つのみです。
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 はバッファの役割であり、永続化は Aster TSDB/TSE が担うという前提です。コンシューマが 1 時間以上停止した場合、データが消失します。
プラグインテンプレート
plantpulse-plugin-opcua.properties — PostgreSQL / Aster TSDB / 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.
テンプレートにはないがコードが読み取るエンジンキー
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と明示しているため、デプロイ版でのみ有効になっています — これらの3行を削除すると 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 系列 (Compaction セクション) |
storage.metastore.* / storage.cache.* | なし |
mq.type / mq.kafka.bootstrap.servers / mq.kafka.group.id | mq.host + mq.kafka.port. コンシューマーグループは設定ではなく コード定数(PP-KAFKA-POINT-GROUP など, メッセージングアーキテクチャ) |
mail.* をファイルから | pp.mm_config の1箇所(2026-09-17 移管, ファイルは削除) |
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 クラスパス) — スケジューラアーキテクチャ |
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 |
pp.mm_config (メール) | mail.smtp.password |
pp.mm_config (AI) | ai.llm.api.key — 旧名称 ai.openai.* のフォールバックは設けません |
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(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.shがenv.shを source して即死し、デプロイが失敗します。
推奨される処置
秘密情報は設定ファイルに記載しません。サイドカーファイル一つにまとめ、0600 とします。
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 # 서버 계정 변경 → 사이드카 → 재렌더 → 재시작
レンダリングされた設定ファイルには置換後の値が入るため、そのファイルをリポジトリにコミットしないでください。