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

pd — データレイク CLI

pd(PlantPulse DataLake)は、データレイクコンテナ内で8つのサービスを起動・停止・診断し、設定をレンダリングし、バックアップを取るための単一エントリポイントコマンドです。管理コンソールが表示するほぼすべてのものが、このコマンドの --json 出力です。

項目値
モジュールplantpulse-datalake-cli
場所コンテナ内の /opt/kopens/plantpulse-platform/plantpulse-datalake-cli/bin/pd (PATH にあり)
ホストにはありません — 必ず docker exec plantpulse-datalake pd … を使用
docker exec plantpulse-datalake pd status # 하나만 칠 때
/opt/kopens/plantpulse-platform-docker/bin/shell.sh # 여러 개 칠 때 — 셸을 열고 pd … 만 친다
オペレーターの最初のエントリポイントはここではありません

プラットフォーム全体の起動・停止・再起動は、ホストの /opt/kopens/plantpulse-platform-docker/bin/ で行います — up.sh · down.sh · restart.sh · restart-datalake.sh · status.sh です。pd はその一段下、コンテナ内のサービスを扱うツールです。コンテナ自体も起動時に pd start、停止時に pd stop を実行するため、オペレーターが pd start を手動で実行することはまれです。 大半は「状態表示」と「サービス1つの再起動」です。

30秒要約​

安全レベル: 読み取り = 何も変更しない · 変更 = 状態を変更する · 破壊的 = データやプロセスを削除する。

動詞一言説明レベル
pd status [서비스] [--wait]ポート表。全行が RUNNING のときのみ exit 0読み取り
pd doctor環境・シークレット・テンプレート・ランタイムツリーを検査 (PASS / FAIL / N/A)読み取り
pd envこのノードのディレクトリ・イメージの正体 — 宣言のみ、測定なし読み取り
pd versionインストール済みのものから読み取ったバージョン番号 — このファイルの定数ではなく jar の MANIFEST から読み取り
pd logs [--list] [--lines N] [서비스…]サービスのログを追跡読み取り
pd storageボリューム・WAL・レプリケーションスロット・ストレージサイズ・Kafka 保持期間読み取り
pd retentionテーブルの TTL・トピック保持期間・コールドティア・アーカイブジョブ読み取り
pd flowKafka コンシューマーグループの lag読み取り
pd downtime計画外で停止していた区間 — 再起動のみ読み取り
pd config list · diff · diff --templatesテンプレート → パス表・ランタイム vs レンダリング・ホストテンプレート vs イメージデフォルト読み取り
pd config show <대상>サービスが実際に読むレンダリング済みファイル。資格情報は伏せられます読み取り
pd workflow status · list · historyワークフローエンジン2つ (Temporal · Kestra) — エンジンとポーラー、保持しているスケジュール、最近の実行と失敗理由。読み取り専用読み取り
pd node status · info · cql · psql …Aster TSDB / PostgreSQL のクエリとシェル読み取り
pd backup list · schedule · status物理バックアップセット・スケジュール表・現在実行中のもの読み取り
pd backup restore … --dry-run復元計画のみ読み取り
pd start [서비스] · stop · restart [--clean]順番に起動・逆順に停止 (停止証明)・両方変更
pd config render設定生成物を実際に書き込む変更
pd secret rotate VAR=값資格情報のローテーション — ホストの passwd.sh が呼び出します。 直接実行しないでください変更
pd secret probe-mqtt与えられた資格情報で MQTT ブローカーに実際に接続してみる (ローテーション手順が使用する検証)読み取り
pd backup · pd backup run --engine E --type full|diff論理ダンプ・物理バックアップを1回実行変更
pd backup schedule set|resetバックアップジョブの Quartz cron と有効スイッチ変更
pd node add · rf · repair · compact · flush · drain …Aster TSDB メンテナンス — ノードを追加・削除する際は pd node rf の順序を守ってください変更
pd clean停止したモジュールのログ・一時ファイルの削除破壊的 (ログ)
pd kill [--dry-run]PP_HOME 配下のプロセスすべてに SIGKILL破壊的
pd recover [파일]pp DB を DROP し、論理ダンプで復元破壊的
pd backup restore … --yesデータディレクトリを物理バックアップで復元破壊的
pd node cleanup · remove <host-id>スナップショット削除・リンクからのノード削除破壊的

オプションセットはどの動詞でも同じ意味です。

オプション意味
--json人間向けの表の代わりに JSON ドキュメント1つ。コンソールが読む形式。受け取る動詞が決まっており、他の動詞に付けると exit 2 で拒否
--show-secretsconfig diff のみ。パスワードを *** で隠さない。--json と併用不可
PD_DEBUG=1DEBUG ログ。PD_DEBUG=1 pd start のように前置する

サービスと起動順序​

8つのサービスは決められた順序で起動します。正本は services/order.txt 1つです。pd start は上から下へ、pd stop は逆順です。

順序サービスMASTERWORKER内部コンポーネントpd status 行 (ポート)
1storage○○valkey → postgres → cassandra → rustfs (MASTER のみ)6379 · 5432 · 9042 · 9000
2analytics○○spark-master → hive → gravitino → kyuubi (WORKER は spark-worker · kyuubi)7077 · 4440 · 9083 · 19001 · 10000
3messaging○—kafka · mqtt (HiveMQ)9092 · 1883
4timeseries○—engine (TSE) · dashboard (PlantPulse Dashboard)7800 · 3000
5cep○—Tomcat7400
6workflow○—temporal → kestra7233 · 8233 · 8380
7data-gateway○—Tomcat5500
8admin-api○○管理コンソールバックエンド4949
  • 各サービスを起動した後、ヘルスチェックが UP を返すまで待ってから次に進みます (上限: storage 1800秒、analytics 600秒、その他 300秒)。
  • storage と analytics はゲートキーパーです。起動しない場合は後続を試みず exit 5。それ以外は警告して続行 (最後に exit 6)。
  • timeseries は 2026-09-05 から MASTER 専用です。

ライフサイクル​

pd status # 전체 표 — 마지막 줄 "0 STOPPED" 면 정상
pd status storage # 서비스 하나의 헬스체크
pd status storage --wait # UP 이 될 때까지 대기

pd start cep # 죽은 서비스 하나 다시 띄우기
pd stop cep # 서비스 하나 내리기 — «멈췄다» 를 증명한다 (30초 + SIGTERM 15초 + SIGKILL 10초)
pd restart cep # stop → (정지가 증명되면) 5초 → start
pd restart cep --clean # 사이에 pd clean
pd restart # 전부 — 몇 분 걸린다. storage 가 먼저 돌아온다

pd status の状態は4つです。

状態意味
RUNNINGポートが開いている
STOPPEDポートが閉じている。起動直後の数十秒はウィンドウなので、1分後に再確認する
UNKNOWN測定できなかった — ポートを測定するツールがない場合。停止しているわけではない
DISABLEDPD_OPTIONS で停止した。終了コードは変更しない
pd stop が exit 7 の場合、すぐに pd start しないでください

STILL RUNNING は停止を証明できなかったという意味です。生き残ったプロセスの上に起動すると、ポート競合・データ破損が発生します。pd kill --dry-run で何が残っているかを確認し、pd kill、pd status で空になったことを確認してから pd start を実行してください。FORCE=1 pd start は使用しないでください。

コンテナ自体の Docker HEALTHCHECK は pd status を呼び出しません (遅く、時々不安定なため)。代わりに postgres・cassandra が実際のクエリに応答するかと、全ポートが開いているかを確認します。したがって、「docker ps は healthy だが pd status は STOPPED」は起動ウィンドウか一時的なずれであり、「unhealthy だが pd status はすべて RUNNING」の場合はポートは開いているがクエリに応答できない状態です (pd logs storage)。

診断​

pd doctor # 여섯 절 검사. 마지막 줄 FAIL 0 이면 된다
pd env # 디렉터리 · 이미지 정체 (0.25초)
pd logs --list # 따라갈 파일 목록만
pd logs --lines 50 cep # cep 만, 마지막 50줄부터
pd storage # 볼륨 90% 이상이면 FAIL
pd retention # 왜 안 줄어드나 — TTL · 토픽 보존 · 콜드 티어
pd flow # 데이터가 안 들어온다 — 컨슈머 lag
pd downtime # 자꾸 죽는 것 같다 — 계획 밖 정지 기록

pd doctor の6つのセクション: [1] inputs (シークレット・ノードファイル・イメージ) · [2] tools · [3] config templates (すべてレンダリングされるか) · [4] runtime tree · [5] TLS material · [6] core ports。N/A は「ここでは測定できない」で、括弧に理由が付きます。コンテナ内でサイドカーファイルがないのは正常です — 値は環境変数で渡されます。

pd flow の NA は「遅れている」ではなく**「一度も読み取ったことがない」です。MEMB 列が 0 の場合はコンシューマーが起動していないこと、0 より大きくトピックが空の場合は正常 (読むものがない)、0 より大きくトピックにデータがある場合は本当の疑わしいシグナル**です。

設定​

pd config list # 이 모드의 템플릿 → 경로 표
pd config diff # 런타임 파일 vs 지금 렌더하면 나올 것 (0 같음 / 1 다름 / 3 시크릿 없음 / 4 렌더 실패)
pd config diff --templates # 호스트 템플릿 vs 이미지 기본값 (same / differs / local / missing)
pd config render # 실제로 쓴다 — 그 뒤 pd restart <서비스> 까지가 한 세트

値を変更する手順と「どこを修正すべきか」は設定変更方法にあります。コンテナ内の生成物を直接編集しないでください — 次の pd start で消えます。

Aster TSDB · PostgreSQL ノード操作​

pd node status # nodetool status — UN 이 정상, DN 이면 죽은 노드
pd node status --json # + PostgreSQL 복제 · Valkey 복제 · 워커 명부
pd node info # 노드 상세
pd node cql # cqlsh (cassandra 계정)
pd node psql # psql (postgres OS 사용자)
pd node errors # cassandra debug.log 의 최근 WARN/ERROR
pd node topic # kafka 토픽 "event" describe
pd node tpstats | compactionstats | proxyhistograms | table-stats [ks] | table-histograms <ks> <tbl> | sstable-size <ks> <tbl> | disk
変更する動詞レベル一言説明
pd node add変更生存ノード数に合わせてキースペースの RF を上げ (最大3)、 repair を実行。ワーカーを接続した後、マスターで1回実行
pd node repair · repair-table <ks> <tbl>変更 (重い)ノード間のデータ不整合を修正
pd node flush · drain変更メモリ内の書き込みをディスクへフラッシュ。drain はその後の書き込みを拒否するため、停止直前のみ
pd node compact [ks] [tbl]変更 (重い)SSTable のマージ
pd node cleanup破壊的全スナップショット削除 + このノードがもはや所有しないデータの削除
pd node remove <host-id>破壊的死んだノードをリンクから削除。生存ノードに対して実行してはいけない。RF を先に下げる — 下記参照
pd node rf [--check] [<노드수>]変更リンクを再計算し、全キースペースの複製係数 (RF) をその数に合わせる
pd node upgrade · init-cms · train-zstd · cache-clear変更インストール手順・バージョンアップ・OS ページキャッシュのクリア

pd node rf — 複製係数をリンクに合わせる​

ノードを追加・削除する際に RF を手動で修正しないでください。 この1つの動詞がリンクを再計算し、目標 RF を算出し、すべてのキースペースに適用します。方向ごとに呼び出す場所が決まっています。

タイミング順序
増やすときpd node add → pd node rf → nodetool repair
減らすときpd node rf <빠진 뒤의 노드수> → ノードが離脱 → nodetool cleanup
死んだノードpd node rf → pd node remove <host-id>
RF を「先に」下げてからノードを削除してください — 順序が逆だとログインすらできません

壊れた状態は RF がノード数より大きいことです。先に下げればその状態には入りません。

逆の順序で行うと RF 3 が2ノードリンクに載る窓が生じ、その間にノードを1つでも失うと QUORUM 読み取り・書き込みがすべて壊れます。system_auth も含まれるため — 誰もログインして 何が起きたのか見ることすらできません。

nodetool decommission·removenode は離脱ノードのレンジを現在の RF 基準でストリームします。 先に下げればストリームするデータが減り、残ったノードが新しい RF が示す量だけを 所有するようになります。

<노드수> 引数がある理由がこの順序です — RF を減らすとき 離脱ノードがまだリンク内に いるため、目標は「そのノードが離脱した後の数」です。すでに死んでリンク外のノードを remove する場合は、引数なしで構いません。

RF は「生存数」ではなく「メンバー数」を基準にします

一時的に停止しているノードが原因で RF は下がりません。メンバー3で生存が2の場合、 警告を出力しつつ RF は3のままにします — ノードが戻れば元通りだからです。

ノードが3未満の場合、RF もその数になります (1ノード → RF 1)。3番目のノードが接続し pd node rf を再実行すると3に上がります。 ノード数より大きい RF はすべての QUORUM クエリを失敗させるため、 そのままにはしません。

--check は再確認のみ行います

pd node rf --check は何も変更せず、現在の RF がリンクに合っているかだけを確認します。 測定できない場合は「合っている」ではなく「判定不能」で終了します (終了コード 2) — データセンター名を 読み取れない、またはノード数を数えられない場合は推測しません。 名前を誤って指定すると複製が 静かに消えるためです。

pd が知らない複製戦略を使用するキースペースは触らずに名前を表示します — 静かにスキップしません。

増やすときに repair、減らした後に cleanup であるのも理由があります。新しい複製は空の状態で 開始するため、満たす必要があり (repair)、減らした後はもはや所有しないレンジを破棄する必要が あります (cleanup)。

バックアップ・復元​

pd backup # PostgreSQL 논리 덤프 → /data1/pp-data/postgres/dump/
pd backup list | schedule | status
pd backup run --engine postgres --type diff
pd backup restore --engine postgres --set <세트> --dry-run # 계획 먼저
pd recover [덤프파일] # pp DB 하나를 논리 덤프로 되돌림 (파괴적)

手順はバックアップ・復元にあります。

終了コード​

コード意味
0成功。status はすべて RUNNING、doctor は FAIL 0、config diff は差分なし
1一般的な失敗・「異なる」・「問題がある」
2使用法エラー — 不明な動詞・サービス・オプション、--json 拒否、PP_HOME 未指定
3必須シークレットの欠落 — メッセージに名前をすべて記載。backup run · restore では「別のバックアップが実行中」
4レンダリング失敗 — 置換されていない ${PP_*}、名前をすべて列挙
5ゲートキーパーサービス (storage · analytics) が起動しないため起動中止
6起動は完了したが、一部サービスが準備完了でない
7停止を証明できなかった (STILL RUNNING)
8広告アドレスがループバック (127.0.0.1) — レンダリング拒否

ログ形式とジャーナル​

pd が出力するすべての行は同じ形式です — [시각] [DATALAKE-CLI] [레벨] [동사] 메시지。INFO は stdout、それ以外は stderr に出力されます。

pd start · stop · restart · backup は JSON を1行ずつイベントジャーナル plantpulse-datalake-admin-api/logs/pd-events.jsonl に記録し、コンソールがそれをイベントタイムラインとして表示します。コンソールで実行したコマンドは actor が operator:<name> として記録します。

PD_OPTIONS — コンポーネントを選択して停止​

変数はありますが、現在の compose スタックはこの値をコンテナに渡しません。 したがって、現時点では コンポーネントを選択して停止する構成はサポートされていません → FAQ

アプリ再起動スクリプトをコンテナ内で探さないでください

サーバー・バッチ・ウェアハウス・OPC-UA・AASX はそれぞれのコンテナで実行されます。データレイクコンテナにはそのモジュールがありません。アプリはホストで再起動してください。

cd /opt/kopens/plantpulse-platform-docker/bin
./restart-server.sh # 또는 restart-batch.sh · restart-warehouse.sh · restart-one.sh <서비스>

関連ドキュメント​