시스템 모니터링
개요
PlantPulse 의 모니터링은 3 계층 으로 구성됩니다. 각 계층의 도구를 함께 사용하여 문제를 조기에 발견하고 신속하게 대응할 수 있습니다.
| 계층 | 책임 | 빈도 |
|---|---|---|
| L1 호스트/스택 | 컨테이너 상태·health, 자원 사용량, 헬스 응답 | 매 분~5분 (자동/수동) |
| L2 플랫폼 내장 | 모듈별 비즈니스 메트릭 (처리량, lag, 큐 깊이, JVM) | 실시간 |
| L3 외부 모니터링 | 장기 추세, 알람, 다중 호스트 통합 뷰 | 실시간 |
플랫폼 서비스 모듈
PlantPulse 는 plantpulse- 접두사로 시작하는 다수의 서비스 모듈로 구성됩니다. 모듈과 컨테이너는 1:1 이 아닙니다 — 애플리케이션 여섯은 각자 컨테이너를 갖고, 나머지 인프라 모듈은 plantpulse-datalake 컨테이너 하나 안에서 함께 돕니다.
| 어디에 있나 | 모듈 |
|---|---|
| 자기 컨테이너 | plantpulse-server-web · plantpulse-batch-web · plantpulse-warehouse · plantpulse-plugin-opcua-server · plantpulse-plugin-aasx-server · plantpulse-ha |
plantpulse-datalake 컨테이너 안 | storage · messaging · analytics · timeseries · workflow · cep · data-gateway · sql · monitor · backup |
컨테이너 단위 상태는 호스트에서 bin/status.sh, 데이터레이크 안 모듈 단위 상태는 컨테이너 안의 status.sh 로 봅니다. 아래 «포트» 는 그 모듈이 컨테이너 안에서 여는 포트이며, 호스트에 열리는 것은 그중 일부입니다 → 포트 구성 정보
핵심 서비스 모듈
| 모듈 | 포트 | 설명 |
|---|---|---|
plantpulse-server | 80 / 443 / 7443 | 웹 서버 및 관리 콘솔, REST API |
plantpulse-cep | 7400 / 7401 | 복합 이벤트 처리 엔진 (Esper) |
plantpulse-batch | 9500 | 배치 처리 서버 |
plantpulse-data-gateway | 5500 | 데이터 게이트웨이 (HTTP REST 기반 데이터 조회) |
plantpulse-sql | 4000 | SQL 쿼리 도구 |
plantpulse-monitor | 4950 (HTTPS) | 시스템 모니터링 에이전트. 호스트에 publish 되는 유일한 헬스 포트 |
plantpulse-warehouse | 9600 | 데이터 웨어하우스 |
plantpulse-plugin-opcua-server | 11004 / 11005 | OPC-UA 서버 플러그인 |
plantpulse-plugin-aasx-server | (호스트 미공개) | AASX 서버 플러그인 |
plantpulse-ha | 10210 | 이중화 복구 데몬 |
plantpulse-proxy | 80 / 443 / 1883 / 1884 | 사용자·설비가 닿는 유일한 입구 |
메시징 모듈 (plantpulse-messaging)
| 서비스 | 포트 | 설명 |
|---|---|---|
| Kafka | 9092 | 분산 메시지 스트리밍 |
| MQTT | 1883 | IoT 경량 메시지 프로토콜 |
| MQTT Enterprise | - | MQTT 엔터프라이즈 에디션 |
스토리지 모듈 (plantpulse-storage)
| 서비스 | 포트 | 설명 |
|---|---|---|
| Cassandra 6.0 | 9042 | 시계열 데이터베이스 (CQL) |
| PostgreSQL | 5432 | 메타데이터 관계형 데이터베이스 |
| Valkey (Redis) | 6379 | 인메모리 캐시 |
| MinIO | 9000 | 오브젝트 스토리지 (S3 호환) |
| JanusGraph | - | 그래프 데이터베이스 |
| RustFS / WeedFS | - | 분산 파일 시스템 |
분석 모듈 (plantpulse-analytics)
| 서비스 | 포트 | 설명 |
|---|---|---|
| Spark Master | 7077 | 분산 분석 엔진 |
| Spark UI | 4440 | Spark 관리 콘솔 |
| Kyuubi | 10000 | 분산 SQL 게이트웨이 (JDBC/Thrift) |
| Gravitino | 19001 | 데이터 카탈로그 |
| Hadoop | - | 분산 파일 시스템 |
| Hive | - | 데이터 웨어하우스 쿼리 엔진 |
시계열 모듈 (plantpulse-timeseries)
| 서비스 | 포트 | 설명 |
|---|---|---|
| 시계열 엔진 | 7800 | 시계열 데이터 처리 엔진 |
| 시계열 UI | 3000 | 시계열 데이터 시각화 UI |
워크플로우 모듈 (plantpulse-workflow)
| 서비스 | 포트 | 설명 |
|---|---|---|
| Temporal | 7233 | 분산 워크플로우 엔진 (Web UI 8233) |
| Kestra | 8380 | 워크플로우 오케스트레이션 / 스케줄러 |
유틸리티 모듈
| 모듈 | 설명 |
|---|---|
plantpulse-datalake-cli (pd) | 데이터레이크 기동/정지/재시작·설정·노드 관리 CLI |
plantpulse-setup | 초기 셋업 도구 (모델, CSV 설정) |
plantpulse-backup | 백업 서비스 |
plantpulse-recovery | 데이터 복구 도구 |
plantpulse-exporter | 에셋 데이터 내보내기 도구 |
plantpulse-migrator | 데이터 마이그레이션 도구 (Spark 기반) |
plantpulse-mirror-maker | 데이터 복제 도구 |
plantpulse-simulator | 데이터 시뮬레이터 (테스트용) |
plantpulse-api | REST API 클라이언트 라이브러리 |
서비스 상태 확인
호스트에서 스택 전체 상태를 먼저 봅니다.
cd /opt/kopens/plantpulse-platform-docker/bin
./status.sh # 0 = 정상 / 2 = 비정상
./ops-check.sh # 헬스 + 최근 critical log
인프라 모듈의 포트 단위 상태는 데이터레이크 컨테이너 안에서 봅니다.
./shell.sh
/opt/kopens/plantpulse-platform/plantpulse-datalake-cli/bin/pd status
출력 예시:
==============================================================================================================
PLANTPULSE PLATFORM - ALL SERVICE STATUS
2026-03-01 12:00:00
==============================================================================================================
<SYSTEM RESOURCE OVERVIEW>
--------------------------------------------------------------------------------------------------------------
포트 서비스 상태
--------------------------------------------------------------------------------------------------------------
9092 PP_MESSAGING[KAFKA] ● RUNNING
1883 PP_MESSAGING[MQTT] ● RUNNING
9042 PP_STORAGE[CASSANDRA] ● RUNNING
5432 PP_STORAGE[POSTGRESQL] ● RUNNING
6379 PP_STORAGE[REDIS] ● RUNNING
9000 PP_STORAGE[MINIO] ● RUNNING
7077 PP_ANALYTICS[SPARK-MASTER] ● RUNNING
4440 PP_ANALYTICS[SPARK-UI] ● RUNNING
10000 PP_ANALYTICS[KYUUBI] ● RUNNING
19001 PP_ANALYTICS[GRAVITINO] ● RUNNING
7233 PP_WORKFLOW[ENGINE] ● RUNNING
8380 PP_WORKFLOW[BATCH] ● RUNNING
7800 PP_TIMESERIES[ENGINE] ● RUNNING
3000 PP_TIMESERIES[UI] ● RUNNING
7400 PP_CEP ● RUNNING
5500 PP_DATA_GATEWAY ● RUNNING
4000 PP_SQL ● RUNNING
4950 PP_MONITOR ● RUNNING
60000 PP_AGENT ● RUNNING
80 PP_SERVER ● RUNNING
9500 PP_BATCH ● RUNNING
9600 PP_WAREHOUSE ● RUNNING
11004 PP_PLUGIN[OPCUA] ● RUNNING
데이터레이크 안의 status.sh 는 그 컨테이너의 모듈만 봅니다. PP_SERVER · PP_BATCH · PP_WAREHOUSE · PP_PLUGIN 항목이 STOPPED 로 보이거나 아예 없더라도 장애가 아닙니다 — 그 앱들은 각자의 컨테이너에서 돌고 있고, 판정은 호스트의 bin/status.sh 가 합니다.
환경 변수
호스트 쪽 값은 /opt/kopens/plantpulse-platform-docker/bin/env.sh 가, 컨테이너가 실제로 보는 값은 compose/docker-compose.yml 이 정합니다. 자세한 관계와 우선순위는 환경 변수 레퍼런스에 있습니다. 아래는 컨테이너 안에서 통하는 이름입니다.
| 변수 | 설명 | 예시 |
|---|---|---|
PP_SCHEME | 스키마명 | PP |
PP_MODE | 실행 모드 | MASTER |
PP_HOST_IP | 내부 IP | 192.168.0.41 |
PP_SERVICE_IP | 서비스 IP | 192.168.0.41 |
PP_MASTER_IP | 마스터 노드 IP | 192.168.0.41 |
PP_DATA_DIR | 데이터 디렉토리 | /data1/pp-data |
PP_TEMP_DIR | 임시 디렉토리 | /data1/pp-temp |
PP_BACKUP_DIR | 백업 디렉토리 | /data1/pp-backup |
PP_CLUSTER_CORES | 클러스터 CPU 코어 수 | 16 |
PP_CLUSTER_MEMORY_BY_CORE | 코어당 메모리 | 2G |
PP_OPTIONS | 추가 옵션 (JSON) | {"use-infra":true,"use-app":true} |
모니터링 대상
PlantPulse 플랫폼에서 모니터링해야 하는 주요 대상과 항목은 다음과 같습니다. 각 항목을 정기적으로 확인해 주시면 안정적인 운영에 도움이 됩니다.
| 대상 | 모니터링 항목 |
|---|---|
| 애플리케이션 서버 | CPU, 메모리, 디스크, 스레드 |
| JVM | 힙 메모리, GC, 클래스 로딩 |
| PostgreSQL | 연결 풀, 쿼리 성능, 디스크 |
| Cassandra | 클러스터 상태, 지연, 컴팩션 |
| Redis | 메모리, 히트율, 연결 수 |
| 엔진 | 파이프라인 처리량, 큐 깊이, 에러율 |
| 네트워크 | OPC 연결, WebSocket, 지연 |
웹 콘솔 모니터링
시스템 모니터링 화면
경로: /monitoring/index
실시간 시스템 상태를 대시보드 형태로 표시합니다. 각 지표가 아래 표의 "정상 범위"를 벗어나면 성능 저하의 원인이 될 수 있으므로 확인해 주세요.
| 지표 | 설명 | 정상 범위 |
|---|---|---|
| CPU 사용률 | 서버 CPU 부하 | < 70% |
| JVM 힙 메모리 | 힙 사용량/최대 | < 80% |
| 활성 스레드 | 동작 중 스레드 수 | < 500 |
| MPS (Messages/sec) | 초당 메시지 처리 수 | 설정된 rate limit 이하 |
| 파이프라인 큐 | 대기 중 메시지 수 | < 10,000 |
| DB 연결 | 활성 DB 연결 수 | < 풀 최대값 |
서버 상태
경로: /server/status
| 항목 | 설명 |
|---|---|
| 서버 가동 시간 | Uptime |
| 엔진 상태 | RUNNING / STOPPED / ERROR |
| 마지막 시작 시각 | 엔진 최종 시작 일시 |
| 버전 정보 | 플랫폼 버전 |
로그 모니터링
로그는 시스템의 동작 상태를 기록하는 텍스트 파일입니다. 문제가 발생했을 때 로그를 확인하면 원인을 파악하는 데 큰 도움이 됩니다.
호스트에서 — logs.sh
컨테이너가 여덟 개라서, 어느 컨테이너에 문제가 있는지 모를 때는 인자 없이 시작하는 것이 가장 빠릅니다.
cd /opt/kopens/plantpulse-platform-docker/bin
./logs.sh # 여덟 컨테이너를 시간순으로 한 화면에 (서비스 이름 접두)
./logs.sh plantpulse-server-web -n 200 # 웹 서버 컨테이너
./logs.sh cassandra # 데이터레이크 안 컴포넌트 로그 파일
./logs.sh --list # 볼 수 있는 대상 전체 (그 시점의 실제 목록)
./logs.sh -f plantpulse-server-web # 계속 따라가기 (Ctrl-C 로 종료)
기본은 마지막 N줄(기본 200)을 찍고 끝입니다. 따라가려면 -f 를 붙이세요.
컨테이너 안의 로그 파일
# 웹 서버 — 자기 컨테이너 안에 있습니다
./shell.sh plantpulse-server-web
tail -f /opt/kopens/plantpulse-platform/plantpulse-server/logs/system.log
grep -i "ERROR\|EXCEPTION" /opt/kopens/plantpulse-platform/plantpulse-server/logs/system.log | tail -100
# 인프라 — 데이터레이크 컨테이너 안
./shell.sh
tail -f /opt/kopens/plantpulse-platform/plantpulse-storage/db/cassandra/logs/system.log
로그를 호스트로 한 번에 복사하려면 ./tools/copy-log-to-local.sh, 지원 요청용 번들은 ./doctor.sh 를 사용합니다.
로그 레벨
| 레벨 | 설명 |
|---|---|
| INFO | 정상 동작 정보입니다 |
| WARN | 경고 메시지입니다 (성능 저하, 재시도 등의 상황) |
| ERROR | 오류가 발생했습니다 (처리 실패, 연결 오류 등) |
주요 로그 패턴
아래 로그 패턴이 나타나면 해당 조치를 취해 주세요:
| 패턴 | 의미 |
|---|---|
Engine started successfully | 엔진이 정상적으로 기동되었습니다 |
Pipeline queue overflow | 파이프라인 큐가 초과되었습니다 — 처리 속도를 점검해 주세요 |
Cassandra connection failed | Cassandra 연결에 실패했습니다 — 클러스터 상태를 확인해 주세요 |
OPC connection lost | OPC 서버 연결이 끊어졌습니다 — 네트워크 및 OPC 서버를 확인해 주세요 |
Rate limit exceeded | 처리율이 초과되었습니다 — engine.pipeline.ratelimit 값을 조정해 주세요 |
데이터베이스 모니터링
데이터베이스의 상태를 정기적으로 모니터링하면 성능 저하나 장애를 사전에 예방할 수 있습니다.
PostgreSQL
# 활성 연결 확인
psql -h HOST -U plantpulse -d pp -c "
SELECT count(*) as active_connections
FROM pg_stat_activity
WHERE state = 'active';"
# 느린 쿼리 확인
psql -h HOST -U plantpulse -d pp -c "
SELECT pid, now() - pg_stat_activity.query_start AS duration, query
FROM pg_stat_activity
WHERE state != 'idle' AND now() - pg_stat_activity.query_start > interval '5 seconds'
ORDER BY duration DESC;"
# 테이블 크기 확인
psql -h HOST -U plantpulse -d pp -c "
SELECT relname, pg_size_pretty(pg_total_relation_size(relid))
FROM pg_catalog.pg_statio_user_tables
ORDER BY pg_total_relation_size(relid) DESC
LIMIT 10;"
Cassandra
# 클러스터 상태
nodetool status
# 테이블별 통계
nodetool tablestats pp
# 컴팩션 상태
nodetool compactionstats
# GC 로그 확인
nodetool gcstats
# 지연 히스토그램
nodetool tablehistograms pp tm_tag_point
Cassandra 상태 코드:
| 상태 | 설명 |
|---|---|
| UN | Up / Normal — 정상 상태입니다 |
| DN | Down / Normal — 노드가 다운된 상태입니다 |
| UJ | Up / Joining — 클러스터에 조인하는 중입니다 |
| UL | Up / Leaving — 클러스터에서 이탈하는 중입니다 |
Redis
# Redis 상태 확인
redis-cli -a 설치-시-변경 INFO
# 메모리 사용량
redis-cli -a 설치-시-변경 INFO memory
# 키 수 확인
redis-cli -a 설치-시-변경 DBSIZE
# 슬로우 로그
redis-cli -a 설치-시-변경 SLOWLOG GET 10
JMX 모니터링
안내: JMX(Java Management Extensions)는 Java 애플리케이션의 내부 상태를 외부에서 모니터링할 수 있도록 제공하는 기술입니다. PlantPulse는 JMX를 통해 150개 이상의 속성을 제공하고 있습니다.
JMX 접속
# JMX 포트 활성화 (setenv.sh에 추가)
export JAVA_OPTS="$JAVA_OPTS \
-Dcom.sun.management.jmxremote \
-Dcom.sun.management.jmxremote.port=9090 \
-Dcom.sun.management.jmxremote.ssl=false \
-Dcom.sun.management.jmxremote.authenticate=false"
JMX MBean
- ObjectName:
plantpulse:name=MBean - 카테고리: engine, cache, storage, network, pipeline, cep, scheduler, monitoring 등 12개
주요 JMX 속성
| 속성 | 설명 |
|---|---|
| engine.status | 엔진 상태 |
| engine.uptime | 가동 시간 |
| pipeline.queue.size | 파이프라인 큐 크기 |
| pipeline.mps | 초당 메시지 처리 수 |
| cache.tag.count | 캐시된 태그 수 |
| storage.cassandra.status | Cassandra 연결 상태 |
Codahale Metrics
안내: Codahale Metrics는 애플리케이션의 성능 지표를 수집하는 라이브러리입니다. PlantPulse에서는 70개 이상의 메트릭이 수집되며,
/admin/tool/metrics경로에서 조회하실 수 있습니다.
메트릭 유형
| 유형 | 설명 |
|---|---|
| Counter | 누적 카운터입니다 (이벤트 수, 에러 수 등) |
| Timer | 처리 시간을 측정합니다 (평균, p95, p99) |
| Histogram | 값의 분포를 표시합니다 (큐 깊이, 배치 크기) |
| Gauge | 현재 시점의 값을 표시합니다 (활성 연결, 메모리) |
표준 헬스체크 API
웹앱 / 플러그인 서비스는 플랫폼 공통 스펙의 헬스체크 엔드포인트 GET /api/health 를 제공합니다.
주요 웹앱(server / batch / cep / sql / data-gateway)에서 이 엔드포인트는 readiness 의미 입니다 —
프로세스(컨텍스트)가 살아 있는 것만으로는 UP 을 보고하지 않고, 내부 엔진 / 핵심 의존성이 정상이어서
트래픽을 받을 준비가 됐을 때만 UP 을 반환합니다 (2026-06 플랫폼 설계 결정).
curl -fsS http://127.0.0.1:9500/api/health
# 준비 완료: 200 {"status":"UP","service":"plantpulse-batch-web","ts":1765500000000,"checks":{"timer":true,"redis":true}}
# 기동 진행 중: 503 {"status":"STARTING",...}
# 기동 후 의존성 다운: 503 {"status":"DEGRADED",...,"checks":{...}}
- readiness — 준비 완료 시에만
200 UP. 기동 진행 중이면503 STARTING, 기동 완료 후 일부 의존성이 내려가면503 DEGRADED로 구분 보고합니다. - 의존성 핑 없음 — checks 는 각 서비스가 이미 유지하는 인메모리 상태 플래그만 읽습니다 (라이브 DB 쿼리 / 네트워크 핑 금지 — 폴링이 데이터 스토어에 부하를 주지 않습니다).
- 익명 접근 — 인증 없이 호출할 수 있습니다 (운영 점검 / 배포 자동검증용).
- 캐시 금지 —
Cache-Control: no-cache계열 헤더가 항상 포함됩니다. - 응답 필드는
status/service(아티팩트 이름) /ts(epoch ms) + readiness 승격 서비스의checks(서비스별 체크 상세)입니다.
| 서비스 | 헬스 URL | 의미 | checks / 비고 |
|---|---|---|---|
| server | http://HOST:80/api/health | readiness | engine — 엔진 수명주기 상태(전 단계 기동 완료 RUNNING 일 때만 UP) |
| batch | http://HOST:9500/api/health | readiness | timer(배치 파이프라인 가동) / redis(InMemory 연결) |
| cep | http://HOST:7400/api/health | readiness | engine(CEP 엔진+컨슈머+복구 완료) / redis(InMemory 연결) |
| sql | https://HOST:4001/api/health | readiness | database_manager(DB 매니저 초기화 완료) — HTTPS 로 제공 |
| data-gateway | http://HOST:5500/api/health | readiness | database / inmemory / query_log — 이 경로만 HTTPS 강제(CONFIDENTIAL)에서 제외, localhost HTTP 프로브 허용 |
| warehouse (s3 서비스) | http://HOST:9600/api/health | readiness | temporal — Temporal 워커 등록 완료 여부. 미등록이면 STARTING + 503 (웹서버가 먼저 뜨고 워커가 뒤따르므로 부팅 직후 503 은 정상). 공통 3개 필드 + 시스템/JVM 메트릭 포함 |
| plugin — AAS V3 | http://HOST:8090/api/health | liveness | readiness 미승격 |
| plugin — OPC-UA Browse UI | http://HOST:12780/api/health | liveness | 포트는 opc.ua.browser.ui.port 설정 (기본 12780) |
용도는 두 가지입니다.
- 운영 점검 — 수동 확인, crontab / 외부 모니터링의 readiness 프로브
- CI 배포 자동검증 —
deploy:dev잡이 배포 후 이 URL 을 폴링(DEPLOY_HEALTH, 240초)하여 기동을 확인합니다 (설정 및 배포 가이드 참조). readiness 의미이므로 부팅 중 503 은 정상이며 폴링이 UP 전환을 기다립니다.
역할 구분:
plantpulse-monitor(:4950)는 호스트 / JVM / 모듈 지표를 수집·노출하는 인프라 모니터링 에이전트이고,/api/health는 각 웹앱 자신이 제공하는 readiness 엔드포인트입니다. 서로 대체 관계가 아니라 보완 관계입니다.컨테이너 환경에서는 각 앱의 readiness 를 compose 의 healthcheck 가 이미 판정하고 있으므로, 운영자는
bin/status.sh한 줄로 여덟 컨테이너의 판정을 함께 받습니다.
헬스체크 스크립트
헬스체크 스크립트를 활용하면 플랫폼의 주요 서비스가 정상적으로 동작하고 있는지 자동으로 확인할 수 있습니다.
자동 헬스체크
아래는 주요 서비스의 상태를 자동으로 점검하는 스크립트 예시입니다:
#!/bin/bash
# healthcheck.sh
# 표준 헬스체크 (GET /api/health)
BODY=$(curl -fsS -m 5 http://localhost/api/health 2>/dev/null)
case "$BODY" in
*'"status":"UP"'*) : ;; # 정상
*) echo "[ALERT] PlantPulse server is not responding: ${BODY:-no response}"
# 알림 발송 로직 추가
;;
esac
# PostgreSQL 체크
pg_isready -h HOST -p 5432 -U plantpulse
if [ $? -ne 0 ]; then
echo "[ALERT] PostgreSQL is not responding"
fi
# Cassandra 체크
nodetool status | grep -q "^UN"
if [ $? -ne 0 ]; then
echo "[ALERT] Cassandra node is down"
fi
# Redis 체크
redis-cli -a 설치-시-변경 ping | grep -q "PONG"
if [ $? -ne 0 ]; then
echo "[ALERT] Redis is not responding"
fi
crontab에 등록하여 주기적으로 실행하실 수 있습니다:
# 5분마다 헬스체크
*/5 * * * * /opt/scripts/healthcheck.sh >> /var/log/plantpulse-healthcheck.log 2>&1
Grafana 모니터링 대시보드
플랫폼 모니터링은 Grafana를 통해 시각적으로 제공됩니다. 접속 URL: http://localhost:3000/
안내: Grafana는 오픈소스 데이터 시각화 도구로, PlantPulse의 다양한 메트릭을 그래프와 차트로 보여줍니다. PLANTPULSE 폴더 아래에 5개의 대시보드가 기본으로 제공됩니다.
1. 플랜트펄스 - 서버
플랫폼 서버의 전체 상태를 한눈에 파악할 수 있는 핵심 대시보드입니다.
SUMMARY (요약)
| 패널 | 유형 | 설명 |
|---|---|---|
| VERSION | Stat | 플랫폼 버전 정보 |
| 서버시작일 | Stat | 엔진 최초 시작 일시 |
| CPU 부하 | Gauge | 서버 CPU 사용률 |
| 메모리 사용률 | Gauge | 서버 메모리 사용률 |
| 1초당 수신 건수 | Stat | 초당 메시지 수신량 (MPS) |
| 전체 저장 건수 | Stat | 누적 저장 데이터 건수 |
| 네트워크 지연 | Stat | 메시지 수신 네트워크 지연(ms) |
| 진단 | Stat | 진단 이벤트 상태 |
SERVER-METRICS (서버 메트릭)
| 패널 | 유형 | 설명 |
|---|---|---|
| CACHE / MQTT / KAFKA / WEBSOCKET / DATABASE / TSE | Stat | 각 서비스 연결 상태 |
| 서버 CPU 사용률 | Graph | CPU 사용률 시계열 추이 |
| 서버 메모리 사용량 | Graph | 메모리 사용량 시계열 추이 |
| JAVA 힙 사용량 | Graph | JVM 힙 메모리 사용량 |
| 데이터 DISK R/W 현황 | Graph | 디스크 읽기/쓰기 트래픽 |
| 프로토콜별 메세지 수신 건수 | Graph | OPC, MQTT, Kafka 등 프로토콜별 수신량 |
| 메세지 수신 네트워크 지연 | Graph | 네트워크 지연 시계열 |
| 전체 메세지 수신량 | Graph | 누적 메시지 수신량 |
| 메세지 수신 건수 BY 1SEC | Graph | 초당 메시지 수신 추이 |
| 파이프라인 대기 큐 | Graph | 파이프라인 큐 깊이 |
| 파이프라인 오프로드 큐 크기 | Graph | RocksDB 오프로드 큐 |
| 파이프라인 검증 실패건 | Graph | 유효성 검증 실패 건수 |
| 파이프라인 작업자 처리시간 | Graph | 워커 처리 소요시간 |
| 타임아웃 메세지 백업 처리 | Graph | 타임아웃 메시지 백업 건수 |
| 파이프라인 수집기 | Graph | 수집기 동작 현황 |
| 스토리지 저장 버퍼 | Graph | 저장 버퍼 크기 |
| 스트리밍 처리 건수 | Graph | WebSocket 스트리밍 처리량 |
| 스트리밍 동작 스레드 건수 | Graph | 스트리밍 활성 스레드 |
| 스트리밍 대기큐 건수 | Graph | 스트리밍 큐 대기 건수 |
| 스토리지 저장 건수 | Graph | DB 저장 건수 |
| 스토리지 배치 건수 | Graph | 배치 저장 건수 |
| 스토리지 작업자 건수 | Graph | 저장 워커 수 |
| DDS 처리 건수 | Graph | Kafka DDS 분배 건수 |
| 비동기 스레드 액티브 카운트 | Graph | 비동기 실행 활성 스레드 |
| 비동기 스레드 풀 사이즈 | Graph | 스레드 풀 크기 |
| 진단 에러 건수 | Graph | 진단 에러 발생 추이 |
| 로깅 예외 | Graph | 예외 로그 발생 추이 |
| GC 시간 | Graph | JVM GC 소요시간 |
| DISK 사용량 | Graph | 디스크 사용량 추이 |
2. 플랜트펄스 - 데이터 래이크 하우스
데이터베이스 및 스토리지 계층의 성능과 상태를 모니터링하는 대시보드입니다.
DATA-GATEWAY (데이터 게이트웨이)
| 패널 | 설명 |
|---|---|
| TOTAL_QUERY | 전체 쿼리 건수 |
| QPS | 초당 쿼리 처리량 (Gauge) |
| QUERY_LATENCY | 쿼리 지연 시계열 |
| QUERY_LATENCY_MAX | 최대 쿼리 지연 |
| SUCCESS / ERROR | 성공 및 실패 건수 |
CACHE (REDIS)
| 패널 | 설명 |
|---|---|
| CLIENTS | Redis 클라이언트 연결 수 |
| ALLOCATOR | 메모리 할당기 상태 |
| KEY_COUNT | 저장된 키 수 |
| FRAGMENTATION | 메모리 단편화 비율 |
CEP (ESPER)
| 패널 | 설명 |
|---|---|
| JAVA_HEAP_USED | CEP 엔진 힙 메모리 |
| EVENT_INGESTION_RATE | 이벤트 인제스트 비율 |
| EQL_CPU_TIME | EPL 쿼리 CPU 시간 |
| EQL_MAP_COUNT | EPL 맵 카운트 |
| EVENT_INGEST_DIFF | 이벤트 인제스트 차이 |
| EVENT_DELAY_HISTOGRAM | 이벤트 지연 분포 |
| CEP_STATEMENT_MATCH_RATE | 스테이트먼트 매칭 비율 |
| EQL_STATEMENT_OUTPUT_RATE | 스테이트먼트 출력 비율 |
META-STORE (POSTGRES)
| 패널 | 설명 |
|---|---|
| TOTAL_CONNECTIONS | 전체 연결 수 |
| QUERY_LATENCY | 쿼리 지연 |
| TOTAL_READS_HITS | 읽기 히트 건수 |
| TOTAL_DB_SIZE | 전체 DB 크기 |
EVENT-STORE (CASSANDRA)
| 패널 | 설명 |
|---|---|
| NATIVE_CLIENT | 네이티브 클라이언트 연결 |
| LATENCY | 읽기/쓰기 지연 |
| READ_PER_SECONDS / WRITE_PER_SECONDS | 초당 읽기/쓰기 |
| HEAP / DIRECT_MAPPED_MEMORY | JVM 메모리 |
| CACHE / CACHE_HIT_RATE | 캐시 및 히트율 |
| TOTAL_DATA_SIZE | 전체 데이터 크기 |
| MEMTABLE | Memtable 상태 |
| COMPACTION / COMPACTION_BYTES | 컴팩션 현황 |
| TABLE_COMPACTIONS / TABLE_SSTABLE_COUNT | 테이블별 컴팩션 및 SSTable |
| BLOOM_FILTER_FALSE_RATIO | 블룸필터 오탐률 |
| TABLE_READ_LATENCY / TABLE_RANGE_LATENCY / TABLE_WRITE_LATENCY | 테이블별 지연 |
| PENDINGS / FLUSH / THREAD_POOL | 대기, 플러시, 스레드풀 |
| STATEMENT / COMMITLOG / EXCEPTION / MUTATION | 내부 메트릭 |
| COMPRESSION / TOTAL_SSTABLE | 압축 및 SSTable 현황 |
TIMESERIES-STORE (TSE)
| 패널 | 설명 |
|---|---|
| TSE_MEMORY | 시계열 엔진 메모리 |
| TSE_HTTP_TIME | HTTP 응답 시간 |
| TSE_DATASTORE | 데이터스토어 상태 |
| TSE_QUEUE_PROCESS_COUNT | 큐 처리 건수 |
ANALYTICS-STORE (SPARK)
| 패널 | 설명 |
|---|---|
| MEMORY_USED | Spark 메모리 사용량 |
| CONNECTION | 연결 수 |
| OPERATION | 작업 수 |
| REQUEST_RATE | 요청 비율 |
3. 플랜트펄스 - 엣지 게이트웨이
엣지 디바이스의 상태, PLC 연결, 데이터 수신 현황을 모니터링하는 대시보드입니다.
요약 패널
| 패널 | 설명 |
|---|---|
| 전체 엣지 게이트웨이 | 등록된 엣지 게이트웨이 수 |
| 전원 (정상/이상) | 전원 상태 정상 및 이상 건수 |
| PLC | PLC 연결 수 |
| 전체 데이터 용량 | 수집된 전체 데이터 크기 |
| 1초당 수신 합계 건수 | 전체 엣지의 초당 수신 합계 (Gauge) |
| 데이터 수신 최대 지연 | 최대 수신 지연(ms) (Gauge) |
| 로그 | 로그 상태 |
PLC STATUS (PLC 상태)
| 패널 | 설명 |
|---|---|
| PLC 핑 실패 건수 | PLC 연결 핑 실패 추이 |
| PLC 연결됨 / 연결끊김 | PLC 연결 상태 추이 |
| PLC 값 읽기 성공 건수 | 데이터 읽기 성공 추이 |
| PLC 데이터 읽기 실패 건수 | 데이터 읽기 실패 추이 |
| 시스템 오류 건수 트렌드 | 시스템 에러 추이 |
DATA POINT (데이터 포인트)
| 패널 | 설명 |
|---|---|
| 1초당 전체 발송 건수 SUM(MPS) | 전체 엣지 초당 발송 합계 |
| 포인트 전송 건 | 포인트 전송 건수 추이 |
| 전송 포인트 바이트 | 전송 데이터 바이트 |
| 수신 최저/평균/최대 지연 | 수신 지연 분포 |
EDGE H/W (엣지 하드웨어)
| 패널 | 설명 |
|---|---|
| CPU | 엣지 디바이스 CPU 사용률 |
| 메모리 | 메모리 사용량 |
| 디스크 (SSD) | 디스크 사용량 |
| 네트워크 업로드/다운로드 | 네트워크 트래픽 |
| 온도 | 디바이스 온도 |
4. 플랜트펄스 - 통계
일별 데이터 증가량, 시스템 리소스 피크값 등 장기 통계를 추적하는 대시보드입니다. 시스템의 장기적인 성장 추세를 파악하는 데 유용합니다.
| 패널 | 설명 |
|---|---|
| 전체 데이터 용량 | 전체 저장 데이터 크기 |
| 일별 데이터 전체 용량 | 일별 데이터 용량 추이 |
| 일일 메세지 전송량 | 일별 메시지 전송 건수 |
| 일일 데이터 증가량 | 일별 데이터 증가 추이 |
| 메세지 수신 건수 | 메시지 수신 건수 추이 |
| 네트워크 지연 평균/최대값 | 네트워크 지연 통계 |
| SSTABLE 증가량 | Cassandra SSTable 증가 추이 |
| 최대 DB 클라이언트 연결 | DB 연결 최대값 |
| 비동기 스레드 최대 실행 건수 | 비동기 처리 피크 |
| JAVA 최대 GC 시간 | GC 최대 소요시간 |
| CQL 준비 최대 건수 | CQL Prepared Statement 최대값 |
| 최대 파티션 크기 | Cassandra 파티션 최대 크기 |
| JAVA 힙 최소 여유 크기 | JVM 힙 여유 최소값 |
| 비동기 스레드 최대 대기 건수 | 비동기 큐 최대 대기 |
| 최대 메모리 버퍼 크기 | 메모리 버퍼 최대값 |
| 백업 메세지 처리 건수 | 백업 처리 건수 |
5. 플랜트펄스 - 메세징
MQTT, Kafka, WebSocket 메시지 브로커의 상태를 모니터링하는 대시보드입니다.
SUMMARY (요약)
| 패널 | 설명 |
|---|---|
| MQTT / KAFKA / WEBSOCKET | 각 브로커 연결 상태 |
| CPU | 서버 CPU 사용률 |
| JAVA_HEAP | JVM 힙 사용량 |
| NETWORK_READ_BYTES | 네트워크 수신 바이트 |
MQTT
| 패널 | 설명 |
|---|---|
| CPU_USED | MQTT 브로커 CPU (Gauge) |
| MEMORY_USED | 메모리 사용량 |
| CONNECTIONS | 클라이언트 연결 수 |
| NETWORK IN/OUT | 네트워크 입출력 |
| GC_COUNT / GC_TIME_MS | GC 횟수 및 소요시간 |
| THREAD_COUNT | 스레드 수 |
| INCOMMING / OUTGOING | 수신 및 발신 메시지 수 |
| RETAINED_COUNT | Retained 메시지 수 |
| SUBSCRIPTIONS | 구독 수 |
| TOTAL_MESSAGE | 전체 메시지 수 |
KAFKA
| 패널 | 설명 |
|---|---|
| CPU_USED | Kafka 브로커 CPU (Gauge) |
| MEMORY_USED | 메모리 사용량 |
| GLOBAL_TOPIC | 전역 토픽 현황 |
| NETWORK IN/OUT | 네트워크 입출력 |
| TOPIC_BYTE_IN/OUT_PER_SEC | 토픽별 초당 바이트 |
| MESSAGE_PER_SEC_MEAN_RATE / 1M_RATE | 초당 메시지 처리량 |
| NETWORK_REQUEST_FETCH | Fetch 요청 건수 |
| OFFLINE_PARTITION_COUNT | 오프라인 파티션 수 |
| ACTIVE_CONTROLLER_COUNT | 활성 컨트롤러 수 |
WEBSOCKET
| 패널 | 설명 |
|---|---|
| CPU_USED | WebSocket 서버 CPU (Gauge) |
| MEMORY_USED | 메모리 사용량 |
| CONNECTION_COUNT | WebSocket 연결 수 |
| ENQUEUE / DEQUEUE | 큐 입출력 건수 |
모니터링 도구 연동
ELK Stack
컨테이너 로그를 Filebeat → Logstash → Elasticsearch → Kibana 파이프라인으로 수집하여, 로그 검색 및 분석 환경을 구축할 수 있습니다. 대규모 운영 환경에서 로그를 효율적으로 관리하고 싶으신 경우 도입을 검토해 보시기 바랍니다. 컨테이너 표준 출력은 docker 로깅 드라이버로, 컨테이너 안의 파일 로그는 호스트 마운트(PLANTPULSE_LOG_DIR)로 수집합니다.