plantpulse-timeseries (시계열)
역할
시계열 데이터 전용 엔진(TSE)과 PlantPulse Dashboard 입니다. 태그 값을 Aster TSDB 에 행 단위 TTL 로 저장하고, 집계 · 조회 API 를 제공합니다.
| 항목 | 값 |
|---|---|
| 모듈명 | plantpulse-timeseries |
| 설치 경로 | /opt/kopens/plantpulse-platform/plantpulse-timeseries/ |
| 엔진 포트 | 7800 (HTTP) · 7801 (TLS) |
| UI 포트 | 3000 (PlantPulse Dashboard, TLS 전용) |
pd 서비스 | timeseries — MASTER 만 (2026-09-05 부터). engine(tse) → dashboard(grafana) |
| 계정 | PP_TSE_USER / PP_TSE_PASSWORD |
워커의 엔진은 아무도 읽지 않고 마스터가 이미 쓴 행을 같은 링에 다시 복사할 뿐이었습니다(실측 4.4G). 모든 조회 소비자가 마스터의 엔진을 가리키므로 MASTER 전용으로 바뀌었습니다.
구성
디렉토리 구조
plantpulse-timeseries/
├── engine/ # 시계열 엔진 (Java)
│ ├── bin/
│ ├── conf/plantpulse-timeseries-engine.conf # 생성물 (옛 이름 timeseries-engine.conf 로도 한 벌)
│ └── logs/
└── dashboard/ # PlantPulse Dashboard
├── bin/
├── conf/custom.ini # protocol = https · http_port = 3000
├── data/ # PlantPulse Dashboard DB — 이미지 트리 안 (볼륨 아님)
└── logs/
시계열 엔진 (7800 · 7801)
설정 템플릿은 /etc/kopens/conf/plantpulse-timeseries-engine.conf.template 하나이고, 두 이름의 파일로 렌더됩니다. 핵심 항목:
| 항목 | 값 |
|---|---|
jetty.port · jetty.ssl.port | PP_TSE_PORT(7800) · PP_TSE_TLS_PORT(7801). TLS 는 플랫폼 공용 keystore |
service.datastore | Aster TSDB 모듈 — 테이블 pp.ts_data_points 등, UnifiedCompactionStrategy |
| 데이터 포인트 TTL | PP_TSE_DATAPOINT_TTL — 기본 31536000초(365일). 쓰기마다 찍히므로 새 값은 새 행부터 |
| 인증 | PP_TSE_USER / PP_TSE_PASSWORD — passwd.sh 대상이 아니라 사이드카 갱신 + 재시작 |
curl -fsS http://127.0.0.1:7800/api/health # 컨테이너 안
curl -kfsS https://<서버IP>:7801/api/health # 밖에서 — 401 은 «로그인 필요» 이지 «없음» 이 아닙니다
관리 콘솔의 도구 화면 «Timeseries Engine» 카드(7801)는 엔진 자체의 관리 화면입니다. 시계열 데이터를 보는 곳은 PlantPulse Dashboard 입니다.
PlantPulse Dashboard (3000)
https://<서버IP>:3000/ — TLS 로만 답합니다. http:// 로 열면 400.
로그인 계정은 PlantPulse Dashboard 자신의 저장소에 있습니다. 바꾸는 자리는 PlantPulse Dashboard 화면(프로필 → Change password)입니다 → 웹 화면 로그인 계정 — PlantPulse Dashboard
대시보드 · 데이터소스 · 사용자 · 알림 규칙 · API 키가 PostgreSQL 의 grafana DB 에
들어갑니다. 종전에는 이미지 트리 안의 SQLite(dashboard/data/grafana.db)라 컨테이너를
다시 만들면 전부 되돌아갔는데, 이제는 살아남습니다.
| 변수 | 값 |
|---|---|
PP_GRAFANA_DB_USER | grafana (고정 — 스키마가 이 이름으로 역할을 만듭니다) |
PP_GRAFANA_DB_PASSWORD | 🔑 기동 필수 — 없으면 pd start 가 exit 3 로 멈춥니다 |
역할 비밀번호는 부팅마다 사이드카 값으로 맞춰집니다.
🔴 PlantPulse Dashboard 는 저장소 사이를 스스로 옮기지 않습니다. 빈 PostgreSQL 을 가리키면 그냥 빈 PlantPulse Dashboard 가 됩니다 — 대시보드도, 데이터소스도, 사용자도 없습니다. 종전 SQLite 에 있던 것을 옮기는 절차가 따로 있습니다.
옮긴 뒤 콘솔은 PlantPulse Dashboard 기본 계정으로 열립니다. 매 부팅마다 맞춰 주는 장치가 없으므로 사람이 한 번 바꿔야 합니다. 설정 파일에 관리자 계정을 적어도 소용없습니다 — 저장소에 사용자가 하나라도 생긴 뒤에는 저장소가 이기고, 그 사실을 알려 주는 오류도 없습니다.
운영 명령
docker exec plantpulse-datalake pd status timeseries
docker exec plantpulse-datalake pd restart timeseries # 엔진 + PlantPulse Dashboard
docker exec plantpulse-datalake pd logs --lines 100 timeseries
docker exec plantpulse-datalake pd retention # ts_data_points 의 크기 · 압축 전략
자주 발생하는 문제
| 증상 | 원인 | 조치 |
|---|---|---|
| Kafka lag 증가 | 엔진 처리 부족 · Aster TSDB I/O | pd flow, pd node compactionstats |
| 데이터가 며칠 만에 사라짐 | TTL | PP_TSE_DATAPOINT_TTL — 옛 이미지는 31일 리터럴이었습니다. 이미 쓰인 행은 옛 값대로 만료됩니다 |
| PlantPulse Dashboard 가 비어 있음(대시보드·데이터소스 없음) | 저장소를 PostgreSQL 로 옮기면서 내용을 안 옮김 | 위 경고 — 옮기는 절차를 거칩니다 |
pd start 가 exit 3 | PP_GRAFANA_DB_PASSWORD 가 비어 있음 | 사이드카에 값을 넣고 다시 기동 |
http://…:3000 이 400 | TLS 전용 | https:// |
| 대시보드 응답 느림 | 시간 범위 과다 | 범위 단축, 집계 간격 확대 |