Skip to main content

Admin Console

This is the Operations Console for the data lake node. It allows you to monitor status, metrics, logs, diagnostics, settings, backups, and workers on a single screen via a browser, execute permitted pd commands, and provide a health API to external monitoring systems (Grafana, Prometheus, Zabbix) at the same address.

🎬 Tour the DataLake admin console · 53초 · 2026.09 기준 화면
ItemValue
Backend Moduleplantpulse-datalake-admin-api
Runtime EnvironmentInside plantpulse-datalake container — both Master and Worker nodes
Address (TLS)https://<server-ip>:4950/
Address (Plaintext)http://<server-ip>:4949/ — same console, same API
LoginPP_DATALAKE_ADMIN_USER (Default admin) / PP_DATALAKE_ADMIN_PASSWORD
Default LanguageEnglish. Append ?lang=ko for Korean

Documents in This Section​

ScreenFunction
This PageGeneral console overview — Access, Login, Layout
BatchStatus and history of batch jobs
WarehouseWarehouse loading status
AssistantNatural language queries and approval cards for identifying and resolving issues

Access​

Access via one of the two addresses in your browser. They lead to the same console; only the scheme differs.

https://<server-ip>:4950/?lang=ko # TLS — 권장
http://<server-ip>:4949/?lang=ko # 평문 — 4950 으로 리다이렉트하지 않습니다
4949 is Plaintext

Login passwords and session cookies are transmitted in the clear. Always use 4950 on untrusted networks. Port 4949 is kept as a choice, not a mistake, because self-signed certificate warnings can sometimes obstruct operators.

When connecting via TLS, a self-signed certificate warning may appear. Instructions for replacing this with a valid certificate are available in Security Settings.

Login​

The login screen displays the node name and its role (Master / Worker). Use this to verify which box you are accessing when working with multiple nodes.

VariableDefaultDescription
PP_DATALAKE_ADMIN_USERadminLogin name
PP_DATALAKE_ADMIN_PASSWORDDefault for development in versions installed after 2026-09-05; empty for earlier versionsIf empty, the console will not open
PP_DATALAKE_ADMIN_API_KEYNoneX-API-Key used when a machine calls the log endpoint

Instructions for changing or initially setting the password are in Web Login Accounts — Admin Console.

If «This node's console is not configured» appears

This means PP_DATALAKE_ADMIN_PASSWORD is empty. Only the console fails to start; the data lake continues to operate normally. This is a commissioning omission, not a failure. Enter the value and restart.

Layout — Rail and Sidebar​

Data Lake Admin Console Dashboard — Rail, One-line Summary, Data Path, Services, Component Health, Timeline (Node address hidden)

No.Item
①Icon Rail — Navigate between groups. The single dot on the dashboard icon represents the overall health of this node (See below)
②One-line Summary — «All N components healthy · Service N/N · No alarms». If this line is green, no further action is needed. The line below shows node name, role, address, and node count; [Node List] links to the topology node tab
③Data Path — Stages ordered by startup sequence (Messaging → CEP → Time Series → Storage → Workflow → Analysis → Data Gateway) with the number of «Running / Total» services per stage. Arrows indicate the declared path, not actual throughput — real-time throughput is found in the inflow cards below
④Services — Expands services belonging to the stages in ③ in the same order. For empty stages like «Messaging 3/4», locate the specific service here
⑤Component Health — Total · Abnormal · Caution · Unmeasured · Healthy · Stopped. Unmeasured is not «Healthy»
⑥Timeline — Plots health status over time per component (24h / 48h). Hatched areas indicate missing records
⑦Language Switch — EN / KO. Appending ?lang=ko to the address has the same effect

Alarm Cards appear between ② and ③ only when an alarm is triggered (only after exceeding the threshold three consecutive times). If there are no alarms, the card is not rendered. Below ⑥ are the system gauges, inflow, load, storage, and recent events.

The narrow vertical strip on the left is the Rail, containing nine group icons. The rail only displays icons — names appear as tooltips upon hover.

Selecting a group expands its screens into the Sidebar. However, groups with only one screen do not have a sidebar to avoid occupying space unnecessarily.

The rail sequence follows the order of operator inquiry during a failure: «Is there an anomaly?» → «Where?» → «What is the truth?» → «Who to notify?» → «What to change?» → «Command» → «Other screens» → «What happened?».

There are 22 screens in total, across 9 groups.

GroupSectionScreenAnswer Provided
Overview—DashboardIs there an anomaly now?
Topology—Topology (Tabs: Data Flow, Node)Where in the pipeline is the blockage, and is data flowing elsewhere?
ObservationStatusStatus, MetricsCurrent health assessment and trends from last hour to last week
ResourceStorage, RetentionVolume, WAL, replication slots, storage size / what is deleted and when
ActivityWorkflow, Event, Log, Diagnostics, JobDid the nightly job run? What happened? — Event journal, service logs, pd doctor, job history
Alarm—AlarmWho is notified and when?
OperationConfigSettings, API Key, CertificateDiff between template and render result, template editing/reversion, console-issued API keys, certificates
MaintenanceUpgrade, WorkerVersions by module, what needs to be changed for cluster workers
BackupBackupBackup sets, schedule editing, execution, recovery
Command—CommandExecute permitted pd verbs from the screen
Tools—ToolsCards linking to other product web UIs
Record—AuditWho changed what in this console?
Assistant—AssistantWhat is the problem, why, and what should be done? — Includes gateway settings and approval cards

How to Read Rail Dots​

There is only one dot on the dashboard icon in the rail. Regardless of the screen, it shows «Is there an anomaly in this node?», and the value is exactly the status of /api/health, the server's aggregated assessment of components. See the dashboard for details.

DotMeaning
OKServer aggregated assessment is healthy
WARNServer aggregated assessment is caution
FAILServer aggregated assessment is failure
UNKNOWN (Grey)Assessment unreliable — polling stopped, server collector stopped, no response, or unknown assessment
Unmeasured is Grey, Not Green

A grey dot means «Unmeasured», not «Healthy». Other group icons do not have dots; this does not mean the group is healthy, but that group-specific status is not rendered on the rail.

Silence is not health. There are five reasons why an alarm might not sound: muted, rule off, below minimum severity, suppression period, or no channel. The console informs you of each using distinct phrasing.

Screen-Specific Notes​

ScreenKey Note
TopologyTwo tabs provide two views of one system — data flow (MQTT → Kafka → Consumer) and nodes (Master, Worker). If the dashboard indicates «Anomaly», use this to identify the affected segment.
Status & Info → ComponentClicking a row enters component details. Rows are consistent with the pd status table and refresh every 15 seconds. A «STOPPED» status for the first few dozen seconds after startup is within the expected window.
LogsDisplays only files declared by pd logs --list. Logs for app containers (Server, Batch, Warehouse) are not here — use the host's logs.sh.
DiagnosticsResults of pd doctor. «Execute Test» runs it again immediately. Only one request is processed at a time; if «busy» appears, retry shortly.
JobsA single ledger for history of backups, archives, and maintenance jobs. The Backup screen shows backups separately.
SettingsShows «What changes if rendered now» (pd config diff) and «Does my template differ from the image default» (pd config diff --templates). Editing templates on-screen creates revisions for rollback. The master values (passwords, addresses) still reside on the host → Changing Settings.
UpgradeImage tags (/etc/plantpulse-image.env) and versions/revisions by module (/etc/plantpulse-modules.json). Report-only; does not perform upgrades → Below.
WorkerShows commands on what to change for cluster workers, but does not execute them. Execution is performed on the host → Cluster Installation.
BackupSet list, schedules, and current executions. «Schedule editor» invokes pd backup schedule set. Schedules are managed via backup_schedule table + Quartz, not systemd timers → Backup & Recovery.
CommandOnly pd verbs from the server-defined allow-list are executed (the list is visible on the right). Other commands must be run in the container shell → pd CLI, Below.
ToolsGathers other product web UIs into cards that open in new tabs. The host in the address follows the currently connected host, ensuring you reach the tools for that specific box. Cards for services not present on the node are not rendered.
WorkflowDisplays both Temporal and Kestra together. Read-only — this screen does not perform execution, triggering, pausing, or termination. «Not applicable» means there is no execution history to assess.
RetentionCentralizes table TTL, topic retention, cold tier, and archive jobs. «None» indicates a table without expiration (counters, current values).
CredentialsNo separate screen. View and change values individually via cards in the Status & Info → Component details → Below.
AssistantQuery this node in natural language and execute via approval cards. Requires direct connection to an LLM gateway → Assistant.
AuditRecords who changed what in this console. Worker nodes lack an audit store, so this always appears as «Unable to read» — it is not a «quiet week».

Major Screens​

Topology — Identifies where the pipeline is blocked. Consists of two tabs: data flow and nodes.

Topology Screen

Status & Info — Health assessment by component. Rows match pd status and refresh every 15 seconds. The Component Version table at the bottom describes the current build rather than the node — including official version, internal version, port, license, source, and module. - indicates «Not applicable» (internal versions are absent for stock components, and some have no listening ports). These same values appear in component details.

Status &amp; Info Screen

Workflow — Monitors whether nightly archives and batch flows ran on time. Displays two engines together: Temporal (Aster TSDB → Iceberg archive) and Kestra (batch flows).

Workflow Screen — Engine Cards, Schedule, Recent Executions

Read-Only

Execution is handled by the engine. This screen does not perform triggering, pausing, or termination — it is for viewing only. Change schedules via the Backup screen (or pd backup schedule set).

Retention — Details what is deleted and when. Consolidates Aster TSDB table TTL and size, Kafka topic retention, and cold tiers with their filling archive jobs on one screen.

Retention Screen — Table TTL, Size, Compaction

Fastest way to verify retention periods

The TTL for pp.tm_tag_point appears as 3650 days. Instructions for changing values are in Data Retention Period.

Settings — «What changes if rendered now» and «Does my template differ from the image default».

Settings Screen — Diff between template and render result

Backup — Set list, schedules, and current executions.

Backup Screen

Tools — Gathers other product web UIs into cards to be opened in new tabs.

Tools Screen — Product Cards

Audit — Records who changed what in this console.

Audit Screen

Empty screens do not mean «No Anomaly»

Screens that do not yet receive data are explicitly labeled as empty, stating that this does not mean «No Anomaly». Do not interpret a blank screen as healthy.

Four Screens of the Observation Group​

While the «Major Screens» above address «What is wrong?», the four screens in the Observation group answer «Why?». All are accessed via the Observation → Status / Resource / Activity sidebar.

Metrics — Measurement History for a Single Component​

Metrics Screen — Numbers indicate reading order

No.AreaFunction
①SidebarObservation group screens — Status & Info, Metrics / Storage, Retention / Workflow, Event, Log, Diagnostics, Job
②LeftComponent List — Select a component
③Below ListMeaning of greyed-out components and notice that only one component is queried at a time
④Top RightInterval — 1h, 6h, 24h, 48h, 7d
⑤MainCharts grouped by unit (%, B/S, BYTES, LOAD …)
Reason for separation from Dashboard

The dashboard is a classification screen read without selecting any specific item, so it does not have intervals longer than a day. Conversely, this screen is for diving deep into one component and one interval.

Intervals longer than 7 days and «Plant Data» (non-data lake data) are the responsibility of the PlantPulse Dashboard. The absence of an «Open in PlantPulse Dashboard» link is intentional — links to unverified dashboards are worse than no links.

Grey means «Server reported absence», not «None»

A component is greyed out only when a response was received for that component and the response was «Not Collected». Components that have not been opened yet receive no marking — guessing would create another «fabricated assessment».

Only one component is queried at a time. Selecting another component shifts the request rather than increasing the load.

Storage — Disk Contents and Retention​

Storage Screen — Numbers indicate reading order

No.AreaFunction
①SidebarResource section — Storage, Retention
②TopVolume — Utilization and assessment for Runtime Tree, Data, Temporary, and Backup
③BelowPostgreSQL WAL and Replication Slots — PG_WAL, MAX_SLOT_WAL_KEEP_SIZE, MAX_WAL_SIZE, Role, and slot table
④Bottom LeftAster TSDB Disk — Size by Data, Commit Log, Snapshot, and Keyspace
⑤Bottom RightKafka Disk — Config file, log directory, size, retention, oldest segment, and next cleanup estimate
Reason for this screen — Stalled replication slots fill disks

On 2026-09-03, a real incident occurred where replication slot replica_worker_1 held 1.4 GB of WAL while inactive, and max_slot_wal_keep_size was -1 (unlimited). No screen in the product reported this; the only way for an operator to notice was when the disk became full.

Therefore, the screen sequence is: Volume (Is it filling?) → WAL·Slot (What is holding it?) → Storage Size and Retention (Will it decrease?). Monitor «Active» and «Held WAL» in the slot table together.

Events — Occurrences on This Node​

Events Screen — Numbers indicate reading order

No.AreaFunction
①TopRange — 24h / 7d
②SideType Filter — Alarm Occurred/Resolved, Started/Starting, Stopped/Stopping, Restart, Backup Start/End, Job Start/End, Boot, Deploy, Operator, PD
③Card HeaderEvents (N) — Count within the current range
④Table HeaderTime, Type, Component, Severity, Message
⑤BodyRows for failed backups, such as ERROR, are highlighted in red

Audit records are attached below the same screen. During a failure, «What happened?» and «What did we do?» are the same question; separating them would require checking two different clocks. By appending them in the same time range, a restart at 01:25 and the operator who ordered it are aligned.

Events vanish on restart in memory stores

Nodes using memory as storage hold only the last few hundred events in RAM and lose them upon restart. The screen explicitly notifies you of this — do not interpret a partial history as complete.

Unreadable event stores are not rendered as «Quiet Night». Five distinct states are rendered: loading, events present, range empty, endpoint not yet provided, and unmeasured (with reason).

Alarms — Criteria and Notification​

Alarms Screen — Numbers indicate reading order

No.AreaFunction
①TopActive Alarms — Currently triggered alarms. Displays «No active alarms» if none
②CenterRules Card
③Table HeaderComponent, Notification, Consecutive, Suppression (sec), When Anomaly, Source, Action
④RowRule for one component. Use [Edit] to change that row
⑤BelowChannel Card + [Add Channel] — «N Channels On»
⑥BottomStates if no channels are present

Three cards on one screen address one question asked three times: Is there an anomaly now? (Active), What is defined as an anomaly? (Rules), Who hears it? (Channels). Dividing these would lead users to overlook the potentially empty third state.

Silence is not health — Five reasons for no alarm

There are five reasons why an active alarm might not sound, and the screen describes each with distinct phrasing.

Screen TextMeaning
MutedA human silenced the alarm
Rule is off«Notification» in the rule table is off
Below minimum severityDoes not meet the «When Anomaly» threshold
In suppression periodWithin the «Suppression (sec)» window
No channelNo destination to send the notification

The header also displays «N of them are silent». These are not lumped into a single «Mute» badge because the required response for each of the five cases differs.

Additionally, unreadable settings are not rendered as «No settings». The screen displays the server's response store: "NA" and the reason. In nodes where settings cannot be saved, the edit button disappears entirely. Grayed-out buttons that can be clicked are avoided because they might falsely indicate a successful save without actually changing anything.

Four Screens of the Activity Group — What Happened?​

Jobs — A Single Ledger for Long-Running Tasks​

Jobs Screen — Numbers indicate reading order

No.AreaFunction
①TopCurrently Running — Explicitly states if none
②BelowType · Status Filter — Backup, Recovery, Recovery Plan, Dump, Diagnostics, Start, Stop, Restart, Config Render, PD / Running, Success, Failure, Unknown
③Card HeaderHistory (N)
④Table HeaderStatus, Type, Target, Start, Duration, Subject, Source, Message
⑤Failure RowFailure and reason on one line — e.g., «Exit 0 but storage did not grow — nothing written»
⑥Unknown Row«pd restart does not write completion lines — result not in journal»
⑦Source ColumnBackup Ledger / PD Journal — Which ledger the line originated from
Reason for this screen — Three separate ledgers

Backups, recoveries, dumps, pd doctor, and service operations all take several minutes, but their records were stored in different locations: the console's job ledger, the backup ledger, and the PD's own journal for executions not started via browser. Each screen showed only its own slice, so «What ran on this box today and did it succeed?» could only be answered via audit logs. However, audit logs record HTTP calls, not results.

«Unknown» is neither failure nor success

«Unknown» is rendered as a separate result. For example, pd restart does not leave a completion line, meaning the result is not in the journal — painting this as success or failure would be inaccurate.

No tasks are started, canceled, or retried here. Those actions are located on screens with explicit confirmation and impact scopes (Backup, Diagnostics). The absence of a cancel button is because the server lacks an endpoint to cancel execution.

Logs — Logs «Present» on This Node​

Logs Screen — Numbers indicate reading order

No.AreaFunction
①Left HeaderLog List
②First LineBoot log with Startup badge
③ListComponent, Filename, Size, Last Updated
④Right HeaderLog Content
⑤SearchString — Literal, not regex · Level chips (TRACE, DEBUG, INFO, WARN, ERROR)
⑥PeriodFrom ~ To · [Search] · [Clear]
⑦Top RightLine Wrap toggle
Browser does not determine path

The client does not specify the path. It sends an ID issued by the server, and the server manages the path — there are no parameters like ?path= that could be used for path traversal.

Log content is rendered as plain text only. Since a log line could contain <script>, and the log viewer is a hole in the operations console, HTML execution is blocked.

«Declared but missing file» is not a «Empty file»

There are three results, not two: read / server could not query pd / declared but file missing. The latter two are rendered as unmeasured, not as «No logs on this node» or «Empty file».

Only files declared by pd logs --list appear in the list. Logs for app containers (Server, Batch, Warehouse) are not here — use the host's logs.sh.

Diagnostics — Measured by pd doctor​

Diagnostics Screen — Numbers indicate reading order

No.AreaFunction
①Next to TitleMode — MASTER / Worker
②Guide«Last Execution» timestamp and [Execute Test] button
③BelowDiagnostic Results (Measurement Time)
④SummaryFailure · Not Applicable · Pass · Test Count
⑤Group CardDivided by groups: inputs, tools, …
⑥Table HeaderAssessment, Test, Content
No polling — Screen numbers are «Last Execution»

Since pd doctor takes about 3 seconds to run all tests, it is not executed periodically. The screen shows the last execution held by the node; the time in ③ indicates when it was measured. To measure again, click [Execute Test] — only one runs at a time; if «busy» appears, retry shortly.

«Not Applicable 0» is different from «Unmeasured»

There are five distinct answers, rendered differently: endpoint not yet present / session disconnected / request failed / command failed to run (reason required) / command ran but 0 tests.

The latter two are critical. A document state of na is not «All Passed» — it means nothing was measured, and a reason must be attached. An empty test list is a separate third case. Rendering either as a blank panel would lead an operator to read «No Anomaly» on a screen that measured nothing.

«Not Applicable» items include a reason for every row, as guided by the screen.

Worker — Commands are «Shown», Not Executed​

Worker Screen — Numbers indicate reading order

No.AreaFunction
①Card HeaderWorker (Measurement Time)
②Table HeaderWorker, Address, Roster, Ring, POSTGRESQL, Slot, REDIS, Health, Status
③RowOne worker. Replication slot name and lag amount on one line
④BelowWorker Health — Expand for details
⑤Next CardWhat was measured?
⑥Passed ItemsWorker Roster (/etc/kopens/workers.roster), Aster TSDB Ring, PostgreSQL, Redis Replica, Worker Health Agent, This node's own address
⑦Not ApplicableWorker Container, Worker Volume — Reasons are explicitly stated
Showing a command is not executing it

Commands to add or remove workers (worker-add.sh, worker-decommission.sh, worker-remove.sh) affect the Docker daemon, roster files, and compose overlays, all of which reside on the host. The API behind this screen runs inside the data lake container and has no Docker socket.

Therefore, four distinctions are maintained:

  1. No verb-shaped controls. The only button on the screen is Copy.
  2. All commands are prefixed with the title «Execute on Host» and the working directory.
  3. While a command is on screen, a read-only guide is always present, and the phrasing is from the server — ensuring the screen cannot contradict the API's claim.
  4. If any of the above are broken, the build fails.

If nothing needs changing, the command card does not appear — as seen in the figure.

«Not Applicable» is not «No Anomaly»

This is the case for Worker Container and Worker Volume in the figure. The reasons are explicitly stated — it means the Docker socket is not mounted to this container and cannot be inspected here, not that there is no problem.

Operation, Command Screens and Credentials​

These are primarily for making changes, so «What is not done» is more critical than «What is shown».

Upgrade — Report Only​

Upgrade Screen — Numbers indicate reading order

No.AreaFunction
①SidebarOperation group — Settings / Upgrade, Worker / Backup
②Card HeaderCurrent Node
③Image TagBuilt name, build.version, Bake commit, Build date, Read from (/etc/plantpulse-image.env), Assessment
④BelowExplanation that image digests are verified on the host — they cannot be known from within the image
⑤Next CardProjects constituting this image — «M of N declare revisions here»
⑥TableProject, Assessment, Version, Revision, Read from (MANIFEST, build-info.json, dist.env … varies by project)
This screen does not «Upgrade» — it only «Shows» commands

The only button that sends a request to the server is Pre-check, which is a read-only diagnostic (pd doctor). The only control attached to the command block is Copy; the button is named «Copy» in all languages — never «Execute» or «Apply».

Furthermore, phrases like «Up to date» are entirely absent from the bundle. This node cannot see its own image tag or query available versions. Reassuring phrases would be fabricated, and an operator reading them might stop searching — this is the most dangerous lie this screen could tell, so it was never implemented.

pd doctor takes about 3 seconds to measure and is not run periodically. Clicking the button starts it as a job and polls that job.

Command — Not a Shell​

Command Screen — Numbers indicate reading order

No.AreaFunction
①TopPermanent Guide — «Only predefined commands are executed»
②Terminal HeaderConsole name and status dot — Ready, Sending, Streaming, Disconnected
③BodyOutput (scrollback, ANSI color)
④Bottom LinePrompt — Tab completion, ↑↓ history, Ctrl+L clear
⑤Right Header«N read-only, M node-changing»
⑥RightRead-only verbs (help version status storage flow env doctor config list config diff node status logs --list backup list backup status backup schedule)
⑦BelowNode-changing — separated by red borders (config render)
Looks like a terminal, but is not a shell

It only mimics a terminal — history, scrollback, ANSI color, Tab completion. The only things that actually run are the pd allow-list enforced by the server.

Those who mistake this for a shell read rejections as «bugs». Therefore, the guide is a permanent screen element, not a single colored line in the scrollback — a warning pushed out of view by scrolling is no longer a warning.

The allow-list is fetched from the server every time the screen opens. No copies are kept in documentation or code — copies eventually diverge, and operators read the diverged version. If the list cannot be fetched, auto-completion is disabled and a notice is provided — it is not replaced by a guessed list.

Node-changing commands are executed only after confirmation. If rejected, the exact reason provided by the server is displayed — lumping it into «Failure» would make product safety mechanisms look like unknown errors.

Credentials in output are masked by the server

As guided on the screen — «Credentials in this output are masked before leaving the server». The browser does not receive and hide them; they are never sent.

Credentials — Component Detail Cards​

Credentials are viewed and changed on the page of the component that uses the value. There is no separate credentials screen. From the Status & Info screen, click a component row to enter details and find the Credentials card. If the server provides no credentials for that component, the card is not displayed.

ColumnContent
ItemWhat the value is — Admin account, internal API key, etc.
Environment VariableVariable name
AccountAccount name. Read-only
Password / KeyMasked by dots; click View Value to reveal only that item
Connection CheckVerified, Value mismatch, Unable to verify (Connection failed), Not a target for verification
Last ChangedTime of last modification
End[Change], or reason for being unchangeable (Locked)

Below the card, the three most recent change requests for this component are shown; failed requests can be [Retried]. The full history is in the Audit screen.

Values are visible only upon «Click» — and that click is recorded

Sensitive values are not loaded in the list. Clicking View Value sends a separate request using only the variable name to retrieve a single value. This request is an POST and is recorded in the audit log; the value is not included in the address.

Changes enter a queue, and the stack restarts

[Change] does not modify the value immediately. A panel shows the sequence of operations; after selecting Generate (32 chars) or Input Value, the console password and variable name must be re-entered to enter the queue.

  1. The new value is encrypted, stored, and the change is queued.
  2. The value is applied to locations that verify or read it within the data lake.
  3. All data lake services are restarted with the new value — causing several minutes of downtime. Other products using this value receive the new value when they recreate their containers.
  4. Each component is verified for connectivity with the new value. If a step fails, the request is marked as failed and retried with the same value.

The console has a single account without roles; any logged-in user can change any credential. Re-entering the password and variable name serves as the safety mechanism. Since the password and new value are transmitted, use 4950 (TLS).

Generated values are visible only once upon request and cannot be displayed again.

«Unable to read here» is not «Not configured»

A blank value in the value column means it is truly empty. «Unable to read here» means this console could not read the value. Locked rows include a reason — account name not changed, calculated from another value, no current value to change, or no tool available for modification.

Procedures for changing values on the host are in Changing Passwords.

Tool Screen Cards​

CardAddressDescription
CEPhttps://<호스트>:7401/EQL rules and matching events
PlantPulse Dashboardhttps://<호스트>:3000/Time series data dashboards
Timeseries Enginehttps://<호스트>:7801/Management screen for the engine itself, not the data
Sparkhttp://<호스트>:4440/Spark Master, Workers, and running applications
Temporalhttp://<호스트>:8233/Workflow executions and history
Kestrahttps://<호스트>:8380/Data pipelines — Flows, Executions, Logs
RustFShttp://<호스트>:9001/Object storage — Buckets, Objects, Access Keys
Data Gatewayhttps://<호스트>:5501/SQL Execution Console. Former SQL tool cards were merged into this (2026-09-07)

Usage for three of these tools is documented separately: Data Gateway Console, Timeseries Analyzer, and CEP Console.

Screens with TLS twin ports link to the TLS side. Since this console is TLS (4950), it avoids providing plaintext addresses.

Console Query Frequency to pd​

The console screens do not run pd for every request. The backend collection loop runs them one by one and caches the latest document; the screen reads this cache.

VerbInterval
pd status --json · pd logs --list15s
pd node status --json · pd storage --json30s
pd flow --json · pd config diff --json · pd env --json60s
pd doctor --json · pd retention --json · pd config diff --templates --json300s

Based on these intervals, approximately 46 seconds of every 60 are spent running pd. Therefore, it is normal for pd status to occasionally be slow on the box where the console is running.

Health API​

All screens rendered by the console are based on /api/*. The full list and schema are provided by the console reading /api/openapi.json and displaying it as an API Table.

curl -kfsS https://<server-ip>:4950/api/health | jq # TLS
curl -fsS http://<server-ip>:4949/api/health | jq # 평문 — 같은 API
docker exec plantpulse-datalake curl -kfsS https://127.0.0.1:4950/api/health | jq # 컨테이너 안 — 어떤 구성에서도
curl -kfsS https://<server-ip>:4950/api/services | jq # 서비스 목록과 상태

The host's status.sh, ops-check.sh, doctor.sh, and stack-verify-boot.sh all read this /api/health. /api/health responds without authentication; all other APIs require a login session or X-API-Key (log endpoint).

Prometheus Integration​

Scrape https://<server-ip>:4950/metrics. Enable insecure_skip_verify for self-signed CAs. Connect as a data source from the bundled PlantPulse Dashboard (3000) or an external Grafana.

Common Issues​

SymptomCauseAction
Console won't open · «Not configured»PP_DATALAKE_ADMIN_PASSWORD is emptyWeb Login Accounts
4949 works, 4950 doesn'tCertificate issueCheck browser warnings or replace certificate in Security Settings
Health endpoint no responseData lake container anomalyOn host: status.sh → logs.sh plantpulse-datalake
Entire screen says «Not measured»Polling stopped or old imageCheck IMAGE_BUILT_AT of pd env. admin-api versions before 2026-09-04 often returned «Another job is already running»
Tool cards not renderedService not on this node (Worker) or polling no responseUse Master node console
Prometheus scrape 5xxBackend module downCheck dependent modules via status.sh
Audit screen says «Unable to read»Worker nodeNormal — view on Master