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.
| Item | Value |
|---|---|
| Module name | plantpulse-timeseries |
| Installation path | /opt/kopens/plantpulse-platform/plantpulse-timeseries/ |
| Engine port | 7800 (HTTP) · 7801 (TLS) |
| UI port | 3000 (Grafana, TLS only) |
pd service | timeseries — MASTER only (from 2026-09-05). engine(tse) → dashboard(grafana) |
| Account | PP_TSE_USER / PP_TSE_PASSWORD |
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:
| Item | Value |
|---|---|
jetty.port · jetty.ssl.port | PP_TSE_PORT(7800) · PP_TSE_TLS_PORT(7801). TLS uses platform-wide keystore |
service.datastore | Cassandra module — tables pp.ts_data_points and so on, UnifiedCompactionStrategy |
| Data point TTL | PP_TSE_DATAPOINT_TTL — default 31536000 seconds (365 days). Stamped on every write, so new values start from new rows |
| Authentication | PP_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
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
| Symptom | Cause | Action |
|---|---|---|
| Kafka lag increasing | Insufficient engine processing · Cassandra I/O | pd flow, pd node compactionstats |
| Data disappears after several days | TTL | PP_TSE_DATAPOINT_TTL — older images had 31-day literal. Rows already written expire by their original value |
| Grafana login fails | Container recreation reverts account | See warning above. Log in with default credentials |
http://…:3000 returns 400 | TLS only | https:// |
| Dashboard response slow | Query time range too large | Shorten range, increase aggregation interval |