본문으로 건너뛰기

시스템 모니터링

개요

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-server80 / 443 / 7443웹 서버 및 관리 콘솔, REST API
plantpulse-cep7400 / 7401복합 이벤트 처리 엔진 (Esper)
plantpulse-batch9500배치 처리 서버
plantpulse-data-gateway5500데이터 게이트웨이 (HTTP REST 기반 데이터 조회)
plantpulse-sql4000SQL 쿼리 도구
plantpulse-monitor4950 (HTTPS)시스템 모니터링 에이전트. 호스트에 publish 되는 유일한 헬스 포트
plantpulse-warehouse9600데이터 웨어하우스
plantpulse-plugin-opcua-server11004 / 11005OPC-UA 서버 플러그인
plantpulse-plugin-aasx-server(호스트 미공개)AASX 서버 플러그인
plantpulse-ha10210이중화 복구 데몬
plantpulse-proxy80 / 443 / 1883 / 1884사용자·설비가 닿는 유일한 입구

메시징 모듈 (plantpulse-messaging)

서비스포트설명
Kafka9092분산 메시지 스트리밍
MQTT1883IoT 경량 메시지 프로토콜
MQTT Enterprise-MQTT 엔터프라이즈 에디션

스토리지 모듈 (plantpulse-storage)

서비스포트설명
Cassandra 6.09042시계열 데이터베이스 (CQL)
PostgreSQL5432메타데이터 관계형 데이터베이스
Valkey (Redis)6379인메모리 캐시
MinIO9000오브젝트 스토리지 (S3 호환)
JanusGraph-그래프 데이터베이스
RustFS / WeedFS-분산 파일 시스템

분석 모듈 (plantpulse-analytics)

서비스포트설명
Spark Master7077분산 분석 엔진
Spark UI4440Spark 관리 콘솔
Kyuubi10000분산 SQL 게이트웨이 (JDBC/Thrift)
Gravitino19001데이터 카탈로그
Hadoop-분산 파일 시스템
Hive-데이터 웨어하우스 쿼리 엔진

시계열 모듈 (plantpulse-timeseries)

서비스포트설명
시계열 엔진7800시계열 데이터 처리 엔진
시계열 UI3000시계열 데이터 시각화 UI

워크플로우 모듈 (plantpulse-workflow)

서비스포트설명
Temporal7233분산 워크플로우 엔진 (Web UI 8233)
Kestra8380워크플로우 오케스트레이션 / 스케줄러

유틸리티 모듈

모듈설명
plantpulse-datalake-cli (pd)데이터레이크 기동/정지/재시작·설정·노드 관리 CLI
plantpulse-setup초기 셋업 도구 (모델, CSV 설정)
plantpulse-backup백업 서비스
plantpulse-recovery데이터 복구 도구
plantpulse-exporter에셋 데이터 내보내기 도구
plantpulse-migrator데이터 마이그레이션 도구 (Spark 기반)
plantpulse-mirror-maker데이터 복제 도구
plantpulse-simulator데이터 시뮬레이터 (테스트용)
plantpulse-apiREST 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내부 IP192.168.0.41
PP_SERVICE_IP서비스 IP192.168.0.41
PP_MASTER_IP마스터 노드 IP192.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 failedCassandra 연결에 실패했습니다 — 클러스터 상태를 확인해 주세요
OPC connection lostOPC 서버 연결이 끊어졌습니다 — 네트워크 및 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 상태 코드:

상태설명
UNUp / Normal — 정상 상태입니다
DNDown / Normal — 노드가 다운된 상태입니다
UJUp / Joining — 클러스터에 조인하는 중입니다
ULUp / 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.statusCassandra 연결 상태

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 / 비고
serverhttp://HOST:80/api/healthreadinessengine — 엔진 수명주기 상태(전 단계 기동 완료 RUNNING 일 때만 UP)
batchhttp://HOST:9500/api/healthreadinesstimer(배치 파이프라인 가동) / redis(InMemory 연결)
cephttp://HOST:7400/api/healthreadinessengine(CEP 엔진+컨슈머+복구 완료) / redis(InMemory 연결)
sqlhttps://HOST:4001/api/healthreadinessdatabase_manager(DB 매니저 초기화 완료) — HTTPS 로 제공
data-gatewayhttp://HOST:5500/api/healthreadinessdatabase / inmemory / query_log — 이 경로만 HTTPS 강제(CONFIDENTIAL)에서 제외, localhost HTTP 프로브 허용
warehouse (s3 서비스)http://HOST:9600/api/healthreadinesstemporal — Temporal 워커 등록 완료 여부. 미등록이면 STARTING + 503 (웹서버가 먼저 뜨고 워커가 뒤따르므로 부팅 직후 503 은 정상). 공통 3개 필드 + 시스템/JVM 메트릭 포함
plugin — AAS V3http://HOST:8090/api/healthlivenessreadiness 미승격
plugin — OPC-UA Browse UIhttp://HOST:12780/api/healthliveness포트는 opc.ua.browser.ui.port 설정 (기본 12780)

용도는 두 가지입니다.

  1. 운영 점검 — 수동 확인, crontab / 외부 모니터링의 readiness 프로브
  2. 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 (요약)

패널유형설명
VERSIONStat플랫폼 버전 정보
서버시작일Stat엔진 최초 시작 일시
CPU 부하Gauge서버 CPU 사용률
메모리 사용률Gauge서버 메모리 사용률
1초당 수신 건수Stat초당 메시지 수신량 (MPS)
전체 저장 건수Stat누적 저장 데이터 건수
네트워크 지연Stat메시지 수신 네트워크 지연(ms)
진단Stat진단 이벤트 상태

SERVER-METRICS (서버 메트릭)

패널유형설명
CACHE / MQTT / KAFKA / WEBSOCKET / DATABASE / TSEStat각 서비스 연결 상태
서버 CPU 사용률GraphCPU 사용률 시계열 추이
서버 메모리 사용량Graph메모리 사용량 시계열 추이
JAVA 힙 사용량GraphJVM 힙 메모리 사용량
데이터 DISK R/W 현황Graph디스크 읽기/쓰기 트래픽
프로토콜별 메세지 수신 건수GraphOPC, MQTT, Kafka 등 프로토콜별 수신량
메세지 수신 네트워크 지연Graph네트워크 지연 시계열
전체 메세지 수신량Graph누적 메시지 수신량
메세지 수신 건수 BY 1SECGraph초당 메시지 수신 추이
파이프라인 대기 큐Graph파이프라인 큐 깊이
파이프라인 오프로드 큐 크기GraphRocksDB 오프로드 큐
파이프라인 검증 실패건Graph유효성 검증 실패 건수
파이프라인 작업자 처리시간Graph워커 처리 소요시간
타임아웃 메세지 백업 처리Graph타임아웃 메시지 백업 건수
파이프라인 수집기Graph수집기 동작 현황
스토리지 저장 버퍼Graph저장 버퍼 크기
스트리밍 처리 건수GraphWebSocket 스트리밍 처리량
스트리밍 동작 스레드 건수Graph스트리밍 활성 스레드
스트리밍 대기큐 건수Graph스트리밍 큐 대기 건수
스토리지 저장 건수GraphDB 저장 건수
스토리지 배치 건수Graph배치 저장 건수
스토리지 작업자 건수Graph저장 워커 수
DDS 처리 건수GraphKafka DDS 분배 건수
비동기 스레드 액티브 카운트Graph비동기 실행 활성 스레드
비동기 스레드 풀 사이즈Graph스레드 풀 크기
진단 에러 건수Graph진단 에러 발생 추이
로깅 예외Graph예외 로그 발생 추이
GC 시간GraphJVM GC 소요시간
DISK 사용량Graph디스크 사용량 추이

2. 플랜트펄스 - 데이터 래이크 하우스

데이터베이스 및 스토리지 계층의 성능과 상태를 모니터링하는 대시보드입니다.

DATA-GATEWAY (데이터 게이트웨이)

패널설명
TOTAL_QUERY전체 쿼리 건수
QPS초당 쿼리 처리량 (Gauge)
QUERY_LATENCY쿼리 지연 시계열
QUERY_LATENCY_MAX최대 쿼리 지연
SUCCESS / ERROR성공 및 실패 건수

CACHE (REDIS)

패널설명
CLIENTSRedis 클라이언트 연결 수
ALLOCATOR메모리 할당기 상태
KEY_COUNT저장된 키 수
FRAGMENTATION메모리 단편화 비율

CEP (ESPER)

패널설명
JAVA_HEAP_USEDCEP 엔진 힙 메모리
EVENT_INGESTION_RATE이벤트 인제스트 비율
EQL_CPU_TIMEEPL 쿼리 CPU 시간
EQL_MAP_COUNTEPL 맵 카운트
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_MEMORYJVM 메모리
CACHE / CACHE_HIT_RATE캐시 및 히트율
TOTAL_DATA_SIZE전체 데이터 크기
MEMTABLEMemtable 상태
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_TIMEHTTP 응답 시간
TSE_DATASTORE데이터스토어 상태
TSE_QUEUE_PROCESS_COUNT큐 처리 건수

ANALYTICS-STORE (SPARK)

패널설명
MEMORY_USEDSpark 메모리 사용량
CONNECTION연결 수
OPERATION작업 수
REQUEST_RATE요청 비율

3. 플랜트펄스 - 엣지 게이트웨이

엣지 디바이스의 상태, PLC 연결, 데이터 수신 현황을 모니터링하는 대시보드입니다.

요약 패널

패널설명
전체 엣지 게이트웨이등록된 엣지 게이트웨이 수
전원 (정상/이상)전원 상태 정상 및 이상 건수
PLCPLC 연결 수
전체 데이터 용량수집된 전체 데이터 크기
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_HEAPJVM 힙 사용량
NETWORK_READ_BYTES네트워크 수신 바이트

MQTT

패널설명
CPU_USEDMQTT 브로커 CPU (Gauge)
MEMORY_USED메모리 사용량
CONNECTIONS클라이언트 연결 수
NETWORK IN/OUT네트워크 입출력
GC_COUNT / GC_TIME_MSGC 횟수 및 소요시간
THREAD_COUNT스레드 수
INCOMMING / OUTGOING수신 및 발신 메시지 수
RETAINED_COUNTRetained 메시지 수
SUBSCRIPTIONS구독 수
TOTAL_MESSAGE전체 메시지 수

KAFKA

패널설명
CPU_USEDKafka 브로커 CPU (Gauge)
MEMORY_USED메모리 사용량
GLOBAL_TOPIC전역 토픽 현황
NETWORK IN/OUT네트워크 입출력
TOPIC_BYTE_IN/OUT_PER_SEC토픽별 초당 바이트
MESSAGE_PER_SEC_MEAN_RATE / 1M_RATE초당 메시지 처리량
NETWORK_REQUEST_FETCHFetch 요청 건수
OFFLINE_PARTITION_COUNT오프라인 파티션 수
ACTIVE_CONTROLLER_COUNT활성 컨트롤러 수

WEBSOCKET

패널설명
CPU_USEDWebSocket 서버 CPU (Gauge)
MEMORY_USED메모리 사용량
CONNECTION_COUNTWebSocket 연결 수
ENQUEUE / DEQUEUE큐 입출력 건수

모니터링 도구 연동

ELK Stack

컨테이너 로그를 Filebeat → Logstash → Elasticsearch → Kibana 파이프라인으로 수집하여, 로그 검색 및 분석 환경을 구축할 수 있습니다. 대규모 운영 환경에서 로그를 효율적으로 관리하고 싶으신 경우 도입을 검토해 보시기 바랍니다. 컨테이너 표준 출력은 docker 로깅 드라이버로, 컨테이너 안의 파일 로그는 호스트 마운트(PLANTPULSE_LOG_DIR)로 수집합니다.