メインコンテンツまでスキップ

データ保存期間 (TTL) 設定

収集したデータをどのくらいの期間保持するかを決定する設定です。ディスク容量を決定する値でもあります — データ保存容量 산정 と併せて参照してください。

正本はプロパティファイル一つです​

保存期間は plantpulse-storage.properties の storage.*.ttl 値で決定します。 単位は「日」 です(秒ではありません)。

環境変数では変更できません

PP_* 環境変数に保存期間を決定する値はありません。 同じファイル内で接続情報とパスワードのみが環境変数として公開されており、TTL 値はすべてファイルに直接記述されています。

デフォルト値​

2026-09 出荷基準です。コンテナ内のファイルで直接確認した値です。

プロパティデフォルト値(日)対象データ
storage.tag.point.ttl3650 (10年)タグ生の収集値
storage.tag.point.map.ttl1タグマップ
storage.tag.point.sampling.ttl93サンプリングテーブル (10秒〜1時間)
storage.tag.point.snapshot.ttl93スナップショット
storage.tag.point.aggregation.ttl93集計テーブル (1分〜1時間)
storage.tag.point.archive.ttl365アーカイブ — オブジェクトストレージへ移行される原本
storage.tag.blob.ttl93タグ blob
storage.blob.object.ttl31blob オブジェクト
storage.asset.data.ttl10設備データ
storage.asset.data.sampling.ttl31設備データサンプリング
storage.asset.alarm.timeline.ttl30アラームタイムライン
storage.asset.alarm.timeline.rollup.ttl90アラームタイムラインロールアップ
storage.asset.standard.ttl0 = 無限設備標準データ
ドキュメントに長く残っていた62日は事実ではありません

古い資料に「デフォルト TTL 5356800秒 = 62日」と記載されているものがあります。現在は 3650日です。 62日という値は、SSOT ではないと自ら明かしていた旧スキーマリポジトリから流出したものです。

カウンタと「現在状態」系のテーブルに有効期限はありません(default_time_to_live = 0)。時間軸がないため、期限切れさせる対象ではないからです。


適用の仕組み​

  1. サーバーが起動する時にプロパティを一度読み込みます。
  2. 値が「明示された」テーブルに対してのみ ALTER TABLE … WITH default_time_to_live = <일 × 86400> 文を作成します。
  3. 現在のスキーマを読み取り、それ以外のみを実行します。

そのため、運用者が cqlsh で ALTER を直接入力する必要はありません。逆に、プロパティからキーを削除すると、そのテーブルはスキップされます — 削除したからといって無限保存になるわけではありません。

既に保存されたデータは変わりません

Aster TSDB の default_time_to_live は書き込み時に各値に埋め込まれます。そのため、設定を変更してもそれ以降に入ってきたデータから適用されます。昨日まで蓄積されたデータの有効期限はそのままです。

これが「増やすことは安全だが、減らすことは危険である」理由です。


変更方法​

🔴 コンテナインストール版では、現在このファイルをホストから修正することはできません。 plantpulse-storage.properties はイメージ内(…/webapps/ROOT/WEB-INF/classes/)にのみ存在し、 外部設定ディレクトリ(…/plantpulse-server/config/)は存在しますが、ホストにバインドマウントされていません(2026-09-08 実測 — マウントされているのはログ・オフロード・セキュリティボリュームセットのみです)。

コンテナ内で修正しても、コンテナを入れ替えた瞬間に消滅します。 再インストールやアップグレードがそのまま初期状態への復帰となります。

保存期間を変更する必要がある場合は、製品チームと共に行ってください。値自体は以下のように変更します。

# 외부 설정 디렉터리의 파일을 고친다 (WAR 안의 사본이 아니라 이쪽)
cp plantpulse-storage.properties plantpulse-storage.properties.$(date +%F)
sed -i 's/^storage.tag.point.ttl=.*/storage.tag.point.ttl=1825/' plantpulse-storage.properties

# 서버를 재시작한다 — 프로퍼티는 부팅 때 한 번만 읽는다

再起動なしでは反映されません。 無停止での反映経路や、管理コンソールから TTL を変更する画面はありません。


反映の確認方法​

起動ログに適用値が表形式で出力されます。DATA STORAGE TTL バナーを探してください — プロパティ名と保存期間、そしてその値がどこから来たのか(ファイルかコードのデフォルト値か)が併記されます。

スキーマに実際に適用された値は、次のように確認します。

SELECT table_name, default_time_to_live, gc_grace_seconds
FROM system_schema.tables
WHERE keyspace_name = 'pp';

秒単位で表示されるため、86400 で割れば日数になります。0 は無限保存です。


注意点​

減らすとデータが消失します。 新しく入ってくるデータの有効期限がその分早まります。減らす前に バックアップ を確保してください。

減らしても「即座に」消えるわけではありません。 有効期限が切れた値はまず tombstone となり、gc_grace_seconds が経過した後に compaction が実際にディスク領域を回収します。そのため、設定を減らした日にディスク使用量がすぐに減ることはありません。

増やすとディスク使用量が線形に増加します。 62日から 3650日への変更は、保存量が約 59倍になります。保存期間を延ばす際は、容量算定 をやり直してください。

TTL = 0(無限)は容量だけの問題ではありません。 有効期限の基準がないと、compaction が古い区間を整理する手段を失います。断片が蓄積し、読み取りが遅くなります。

TTL を短くしすぎると、サーバーが ALTER を拒否する場合があります。 compaction ウィンドウ設定と保存期間の間に維持すべき関係があるためです。この場合、そのテーブルは作成時の設定を静かに維持するため、ログの警告を確認する必要があります。


CEP デッドレター​

CEP が処理できなかったイベントは Valkey ストリーム PP:CEP-DEAD-LETTER:{샤드} に残ります。これは調査用の一次保存であり、TTL 設定ではなく plantpulse-cep.properties で決定します。

プロパティデフォルト値意味
cep.stream.max_deliveries33回配信されても処理できなかったイベントのみデッドレターへ送られる
cep.stream.dead_letter.retention_ms86400000 (24時間)書き込み時に、これより古いデータを切り捨てる
cep.stream.dead_letter.max_bytes268435456 (256 MiB)全体合計。シャード数で割った商を超えると、古いものから切り捨てる

調査が必要な場合は、24時間以内に確認する必要があります。


オブジェクトストレージ側​

TTL を超えたデータが単に消えるだけではありません。アーカイブテーブル (storage.tag.point.archive.ttl, デフォルト 365日) のデータは、オブジェクトストレージの Iceberg テーブルへ移動され、長期保存されます。

項目値
Iceberg スナップショット保存デフォルト 3日 (SNAPSHOT_RETENTION_DAYS)
ウェアハウス監査テーブル31日
容量使用量履歴1095日 (3年)
スナップショット保存はデータ保存ではありません

Iceberg スナップショットの有効期限切れは、データを削除することではなく、過去の時点に戻る能力 (time travel · rollback) を失わせることを意味します。デフォルトの 3日が経過すると、それ以前の時点に戻すことはできません。

Iceberg テーブル自体には自動有効期限機能はありません。削除する場合は明示的に削除する必要があります。


関連ドキュメント​