plantpulse-batch (배치 처리)
역할
스케줄 기반 배치 작업 실행기. 일/시/월 단위 통계 집계, 데이터 정리, 보고서 생성, OEE/RAM/EMS 플러그인 계산을 수행합니다.
| 항목 | 값 |
|---|---|
| 모듈명 | plantpulse-batch |
| 설치 경로 | /opt/kopens/plantpulse-platform/plantpulse-batch/ |
| 포트 | 9500 |
| 스케줄러 | Quartz (PostgreSQL JDBC store) |
주요 책임
- 시간별 / 일별 / 월별 집계 (tag → asset)
- OEE / RAM / EMS 플러그인 계산
- 보고서 자동 생성
- 데이터 보관 정책 적용
- 데이터 무결성 검증
구성
디렉토리 구조
plantpulse-batch/
├── config/
│ └── plantpulse-batch.properties # 배치 설정 (외부화 — 배포해도 유지)
├── bin/start.sh stop.sh log-viewer.sh
├── logs/system.log
└── server/ # 내장 Tomcat (webapps/ROOT.war)
└── conf/server.xml
주요 설정
plantpulse-batch/config/plantpulse-batch.properties — configure.sh 가 env.sh 값을 치환해 생성합니다. 웹앱 내부 파일은 수정하지 마세요 (배포 시 소멸).
# 메타스토어 (PostgreSQL)
metastore.url=jdbc:postgresql://${PP_POSTGRES_HOST}:${PP_POSTGRES_PORT}/${PP_DB_NAME}
metastore.user=${PP_PG_USER}
metastore.password=${PP_PG_PASSWORD}
# 시계열 저장소 (Cassandra) / TSE
storage.db.host=${PP_CASSANDRA_HOST}
storage.db.keyspace=${PP_KEYSPACE}
tse.host=${PP_TSE_HOST}
# 배치 동작
batch.timer_schedule_delay=5000 # 배치 타이머 주기 (ms)
batch.thread_pool_batch_thread_size=4 # 배치 워커 스레드 수
batch.buffer_drain_limit_size=10000 # 1회 드레인 최대 건수
batch.sync.tse.enabled=true # TSE 동기화
batch.sync.external.db.enabled=false # 외부 DB 동기화 (TimescaleDB/InfluxDB/QuestDB)
운영 명령
cd /opt/kopens/plantpulse-platform/plantpulse-datalake-cli/bin
./restart-batch.sh
./pd status # 9500 RUNNING 확인
# 표준 헬스체크 (익명, readiness — 배치 파이프라인 가동·Redis 연결 시에만 UP)
curl -fsS http://127.0.0.1:9500/api/health
# 준비 완료: 200 {"status":"UP","service":"plantpulse-batch-web","ts":...,"checks":{"timer":true,"redis":true}}
# 기동 전: 503 {"status":"STARTING",...} / 기동 후 의존성 다운: 503 {"status":"DEGRADED",...}
콘솔의 시스템 > 배치 관리 메뉴에서 개별 job 의 실행 / 일시 정지 / 트리거가 가능합니다.
자주 발생하는 문제
| 증상 | 원인 | 조치 |
|---|---|---|
| Job 실행 안 됨 | Quartz 락 / 클러스터 충돌 | qrtz_locks 테이블 확인 |
| 집계 결과 누락 | 대상 데이터 시간 범위 오차 | 배치 주기(batch.timer_schedule_delay) 및 대상 기간 설정 확인 |
| 메모리 부족 | 큰 윈도우 처리 | 힙 상향 또는 윈도우 분할 |
관련 문서
- 모듈 인덱스
- 플러그인 (OEE/RAM/EMS) 사용자 가이드
- 개발자: 스케줄러 아키텍처