Skip to main content

plantpulse-timeseries (Time Series)

Role

A time series engine (TSE) dedicated to time series data and Grafana dashboard. Stores tag values in Cassandra with row-level TTL, and provides aggregation and query APIs.

ItemValue
Module nameplantpulse-timeseries
Installation path/opt/kopens/plantpulse-platform/plantpulse-timeseries/
Engine port7800 (HTTP) · 7801 (TLS)
UI port3000 (Grafana, TLS only)
pd servicetimeseriesMASTER only (from 2026-09-05). engine(tse) → dashboard(grafana)
AccountPP_TSE_USER / PP_TSE_PASSWORD
Does not run on workers (2026-09-05)

The worker engine was never read by anyone and only copied rows already written by the master to the same ring (measured 4.4G). Since all query consumers point to the master engine, it became MASTER-only.

Architecture

Directory structure

plantpulse-timeseries/
├── engine/ # 시계열 엔진 (Java)
│ ├── bin/
│ ├── conf/plantpulse-timeseries-engine.conf # 생성물 (옛 이름 timeseries-engine.conf 로도 한 벌)
│ └── logs/
└── dashboard/ # Grafana
├── bin/
├── conf/custom.ini # protocol = https · http_port = 3000
├── data/ # Grafana DB — 이미지 트리 안 (볼륨 아님)
└── logs/

Time Series Engine (7800 · 7801)

Configuration template is /etc/kopens/conf/plantpulse-timeseries-engine.conf.template and rendered as files with two names. Key items:

ItemValue
jetty.port · jetty.ssl.portPP_TSE_PORT(7800) · PP_TSE_TLS_PORT(7801). TLS uses platform-wide keystore
service.datastoreCassandra module — tables pp.ts_data_points and so on, UnifiedCompactionStrategy
Data point TTLPP_TSE_DATAPOINT_TTL — default 31536000 seconds (365 days). Stamped on every write, so new values start from new rows
AuthenticationPP_TSE_USER / PP_TSE_PASSWORD — not passwd.sh target; sidecar refresh + restart
curl -fsS http://127.0.0.1:7800/api/health # 컨테이너 안
curl -kfsS https://<server-ip>:7801/api/health # 밖에서 — 401 은 «로그인 필요» 이지 «없음» 이 아닙니다

The Timeseries Engine card in the admin console's tools screen (7801) is the engine's own management UI. To view time series data, use Grafana.

Grafana (3000)

https://<server-ip>:3000/ — responds to TLS only. Opening with http:// returns 400.

Login accounts are stored in Grafana's own database; the data lake does not read variables like PP_GRAFANA_*. To change credentials, use the Grafana UI (Profile → Change password) → Web UI login accounts — Grafana

Grafana data does not survive container recreation

dashboard/data is already in the image tree, so it is not a volume. Passwords changed on screen and dashboards created are lost when the container is recreated; the image reverts to its bundled state. This is logged as a product defect. Export dashboards as JSON and keep them separately.

Operations commands

docker exec plantpulse-datalake pd status timeseries
docker exec plantpulse-datalake pd restart timeseries # 엔진 + Grafana
docker exec plantpulse-datalake pd logs --lines 100 timeseries
docker exec plantpulse-datalake pd retention # ts_data_points 의 크기 · 압축 전략

Common issues

SymptomCauseAction
Kafka lag increasingInsufficient engine processing · Cassandra I/Opd flow, pd node compactionstats
Data disappears after several daysTTLPP_TSE_DATAPOINT_TTL — older images had 31-day literal. Rows already written expire by their original value
Grafana login failsContainer recreation reverts accountSee warning above. Log in with default credentials
http://…:3000 returns 400TLS onlyhttps://
Dashboard response slowQuery time range too largeShorten range, increase aggregation interval