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 を手で実行することはめったにありません。 ほとんどが「ステータス確認」と「単一サービスの再起動」です。
30秒サマリー
セーフティレベル:読取 = 何も変更しない · 変更 = 状態を変更する · 破壊的 = データまたはプロセスを削除する。
| 動詞 | 説明 | レベル |
|---|---|---|
pd status [서비스] [--wait] | ポートテーブル。すべての行が RUNNING の場合のみ exit 0 | 読取 |
pd doctor | 環境・シークレット・テンプレート・ランタイム ツリーを検査 (PASS / FAIL / N/A) | 読取 |
pd env | このノードのディレクトリ・イメージ アイデンティティ — 宣言のみ、測定なし | 読取 |
pd logs [--list] [--lines N] [서비스…] | サービス ログを追跡 | 読取 |
pd storage | ボリューム・WAL・レプリケーション スロット・ストレージ サイズ・Kafka リテンション | 読取 |
pd retention | テーブル TTL・トピック リテンション・コールド ティア・アーカイブ ジョブ | 読取 |
pd flow | Kafka コンシューマ グループ ラグ | 読取 |
pd downtime | 予期しないダウン期間 — 再起動するだけ | 読取 |
pd config list · diff · diff --templates | テンプレート → パス テーブル · ランタイム vs レンダ · ホスト テンプレート vs イメージ デフォルト | 読取 |
pd node status · info · cql · psql … | Cassandra / 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 backup · pd backup run --engine E --type full|diff | 論理ダンプ・物理バックアップ 1回 | 変更 |
pd backup schedule set|reset | バックアップ タイマー スケジュール | 変更 |
pd node add · repair · compact · flush · drain … | Cassandra メンテナンス | 変更 |
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 | 人間可読テーブルの代わりに 1つの JSON ドキュメント。コンソール読み取り形式。受け入れる動詞が決まっており、他の動詞に付与すると exit 2 で 拒否 |
--show-secrets | config diff のみ。パスワードを *** でマスクしない。--json と併用不可 |
PD_DEBUG=1 | DEBUG ログ。PD_DEBUG=1 pd start のように前に付加 |
サービスと起動順序
8個のサービスは 定められた順序で起動します。ソースは services/order.txt 1つです。pd start は上から下へ、pd stop は逆順です。
| 順序 | サービス | MASTER | WORKER | 内部コンポーネント | pd status 行(ポート) |
|---|---|---|---|---|---|
| 1 | storage | ○ | ○ | valkey → postgres → cassandra → minio(MASTER のみ) | 6379 · 5432 · 9042 · 9000 |
| 2 | analytics | ○ | ○ | spark-master → hive → gravitino → kyuubi (WORKER は spark-worker · kyuubi) | 7077 · 4440 · 9083 · 19001 · 10000 |
| 3 | messaging | ○ | — | kafka · mqtt(HiveMQ) | 9092 · 1883 |
| 4 | timeseries | ○ | — | engine(TSE) · dashboard(Grafana) | 7800 · 3000 |
| 5 | cep | ○ | — | Tomcat | 7400 |
| 6 | workflow | ○ | — | temporal → kestra | 7233 · 8233 · 8380 |
| 7 | data-gateway | ○ | — | Tomcat | 5500 |
| 8 | admin-api | ○ | ○ | 管理コンソール バックエンド | 4949 |
- 各サービス起動後、ヘルスチェックが UP を返すまで待機してから次に進みます(上限:storage 1800秒、analytics 600秒、その他 300秒)。
storageとanalyticsは ゲートキーパーです。起動しなければ次を試さず exit 5。残りは警告して継続(最終的に exit 6)。timeseriesは 2026-09-05 から MASTER 専用です。plantpulse-sqlは 2026-09-07 に廃止され、リストから削除されました。
ライフサイクル
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 | 測定不可 — ポート測定ツールがない場合。停止したわけではない |
DISABLED | PD_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」は起動ウィンドウまたは1回の失敗で、「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 で消えます。
Cassandra · 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> | 破壊的 | 停止ノードをリングから削除。ライブ ノードで実行しないこと |
pd node upgrade · init-cms · train-zstd · cache-clear | 変更 | インストール手順・アップグレード・OS ページ キャッシュ クリア |
バックアップ・リストア
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 が出力するすべてのラインは 1つの形式です — [시각] [DATALAKE-CLI] [레벨] [동사] 메시지。INFO は stdout へ、それ以外は stderr へ出力されます。
pd start · stop · restart · backup は JSON を 1行ずつイベント ジャーナル plantpulse-datalake-admin-api/logs/pd-events.jsonl に記録し、コンソールがそれをイベント タイムラインとして表示します。コンソールから実行されたコマンドは actor が operator:<name> として記録します。
旧名前マッピング テーブル
plantpulse-startup のスクリプト コレクションは 2026-09-03 に pd に統合され、旧ディレクトリはイメージに存在しません。
| 旧スクリプト | 現在 |
|---|---|
start-daemon.sh · start.sh | pd start |
stop.sh | pd stop |
restart.sh · restart-<module>.sh | pd restart [서비스] |
restart-monitor.sh | pd restart admin-api |
status.sh | pd status |
kill.sh · clean.sh | pd kill · pd clean |
configure.sh | pd config render |
log-viewer.sh | pd logs |
node-<동사>.sh · node-added.sh · node-error.sh | pd node <동사> · pd node add · pd node errors |
secrets/rotate.sh | pd secret rotate (ホストの passwd.sh が呼び出す) |
env.sh · env-reset.sh · env-validate.sh | 廃止されました — 値はホストのサイドカー・ノード ファイルと compose により調整されます |
prepare-ssl.sh | plantpulse-certs コンテナが処理します → セキュリティ設定 |
PP_OPTIONS | PD_OPTIONS (2026-09-07)。旧名は読み取られません |
Server · Batch · Warehouse · OPC-UA · AASX はそれぞれ独自のコンテナで処理されます。データレイク コンテナにはそれらのモジュールはありません。アプリはホストから再起動してください。
cd /opt/kopens/plantpulse-platform-docker/bin
./restart-server.sh # 또는 restart-batch.sh · restart-warehouse.sh · restart-one.sh <서비스>