> For the complete documentation index, see [llms.txt](https://kopens.gitbook.io/plantpulse-platform/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://kopens.gitbook.io/plantpulse-platform/admin/monitoring.md).

# 시스템 모니터링

## 개요

PlantPulse 의 모니터링은 **3 계층** 으로 구성됩니다. 각 계층의 도구를 함께 사용하여 문제를 조기에 발견하고 신속하게 대응할 수 있습니다.

```mermaid
graph TB
  subgraph L3["3. 외부 모니터링 (선택)"]
    PROM[Prometheus]
    GRAFANA_EXT[외부 Grafana]
    ALERT[Alertmanager · Slack · Email]
  end

  subgraph L2["2. 플랫폼 내장 (자동)"]
    MON[plantpulse-monitor :4949<br/>모듈별 메트릭]
    TSUI[plantpulse-timeseries UI :3000<br/>Grafana 동봉 대시보드]
    JMX[JMX :6199-7899<br/>JVM 상세]
    SPARK_UI[Spark UI :4440]
    KESTRA_UI[Kestra UI :8380]
    TP_UI[Temporal UI :8233]
  end

  subgraph L1["1. 호스트 / OS (수동 점검)"]
    STATUS[status.sh<br/>모듈 RUNNING]
    OPS[ops-check.sh<br/>헬스 + critical log]
    LOG[log-viewer.sh<br/>통합 로그]
    DOC[doctor.sh<br/>진단 tarball]
  end

  L1 --> L2 --> L3
```

| 계층             | 책임                                 | 빈도              |
| -------------- | ---------------------------------- | --------------- |
| **L1 호스트/OS**  | 모듈 RUNNING 여부, 자원 사용량, 헬스 응답       | 매 분\~5분 (자동/수동) |
| **L2 플랫폼 내장**  | 모듈별 비즈니스 메트릭 (처리량, lag, 큐 깊이, JVM) | 실시간             |
| **L3 외부 모니터링** | 장기 추세, 알람, 다중 호스트 통합 뷰             | 실시간             |

## 플랫폼 서비스 모듈 <a href="#service-modules" id="service-modules"></a>

PlantPulse 는 `/opt/kopens/plantpulse-platform/` (바이너리 설치) 디렉토리에 `plantpulse-` 접두사로 시작하는 다수의 서비스 모듈로 구성됩니다. 각 모듈은 고유한 역할과 포트를 가지고 있으며, 독립적으로 시작하고 중지할 수 있습니다.

### 핵심 서비스 모듈

| 모듈                        | 포트              | 설명                              |
| ------------------------- | --------------- | ------------------------------- |
| `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`      | 4949            | 시스템 모니터링 에이전트                   |
| `plantpulse-warehouse`    | 9600            | 데이터 웨어하우스                       |
| `plantpulse-plugin`       | 11004           | 플러그인 (OPC-UA 등)                 |

### 메시징 모듈 (`plantpulse-messaging`)

| 서비스             | 포트    | 설명              |
| --------------- | ----- | --------------- |
| Kafka           | 9092  | 분산 메시지 스트리밍     |
| MQTT            | 1883  | IoT 경량 메시지 프로토콜 |
| MQTT Enterprise | -     | MQTT 엔터프라이즈 에디션 |
| STOMP           | 61000 | 텍스트 기반 메시지 프로토콜 |

### 스토리지 모듈 (`plantpulse-storage`)

| 서비스             | 포트   | 설명                |
| --------------- | ---- | ----------------- |
| Cassandra 5.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`)

| 서비스      | 포트   | 설명               |
| -------- | ---- | ---------------- |
| Kestra   | 8233 | 워크플로우 오케스트레이션 엔진 |
| Temporal | 8380 | 분산 워크플로우 배치 엔진   |

### 유틸리티 모듈

| 모듈                        | 설명                       |
| ------------------------- | ------------------------ |
| `plantpulse-startup`      | 플랫폼 시작/중지/재시작 스크립트       |
| `plantpulse-setup`        | 초기 셋업 도구 (모델, CSV 설정)    |
| `plantpulse-backup`       | 백업 서비스                   |
| `plantpulse-recovery`     | 데이터 복구 도구                |
| `plantpulse-exporter`     | 에셋 데이터 내보내기 도구           |
| `plantpulse-migrator`     | 데이터 마이그레이션 도구 (Spark 기반) |
| `plantpulse-mirror-maker` | 데이터 복제 도구                |
| `plantpulse-simulator`    | 데이터 시뮬레이터 (테스트용)         |
| `plantpulse-api`          | REST API 클라이언트 라이브러리     |

### 서비스 상태 확인

플랫폼의 전체 서비스 상태를 확인하려면 아래 명령어를 실행해 주세요:

```bash
cd /opt/kopens/plantpulse-platform/plantpulse-startup/
./status.sh
```

출력 예시:

```
==============================================================================================================
 PLANTPULSE PLATFORM - ALL SERVICE STATUS
 2026-03-01 12:00:00
==============================================================================================================

<SYSTEM RESOURCE OVERVIEW>
--------------------------------------------------------------------------------------------------------------
 포트   서비스                     상태
--------------------------------------------------------------------------------------------------------------
 9092   PP_MESSAGING[KAFKA]        ● RUNNING
 1883   PP_MESSAGING[MQTT]         ● RUNNING
 61000  PP_MESSAGING[STOMP]        ● 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
 8233   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
 4949   PP_MONITOR                 ● RUNNING
 60000  PP_AGENT                   ● RUNNING
 80     PP_SERVER                  ● RUNNING
 9500   PP_BATCH                   ● RUNNING
 9600   PP_WAREHOUSE               ● RUNNING
 11004  PP_PLUGIN[OPCUA]           ● RUNNING
```

### 환경 변수 (`env.sh`)

플랫폼 시작 시 사용되는 환경 변수는 `/opt/kopens/plantpulse-platform/plantpulse-startup/env.sh`에서 관리합니다.

| 변수                          | 설명            | 예시                                  |
| --------------------------- | ------------- | ----------------------------------- |
| `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}` |

## 모니터링 대상 <a href="#monitoring-targets" id="monitoring-targets"></a>

PlantPulse 플랫폼에서 모니터링해야 하는 주요 대상과 항목은 다음과 같습니다. 각 항목을 정기적으로 확인해 주시면 안정적인 운영에 도움이 됩니다.

| 대상         | 모니터링 항목               |
| ---------- | --------------------- |
| 애플리케이션 서버  | CPU, 메모리, 디스크, 스레드    |
| JVM        | 힙 메모리, GC, 클래스 로딩     |
| PostgreSQL | 연결 풀, 쿼리 성능, 디스크      |
| Cassandra  | 클러스터 상태, 지연, 컴팩션      |
| Redis      | 메모리, 히트율, 연결 수        |
| 엔진         | 파이프라인 처리량, 큐 깊이, 에러율  |
| 네트워크       | OPC 연결, WebSocket, 지연 |

## 웹 콘솔 모니터링 <a href="#web-console" id="web-console"></a>

### 시스템 모니터링 화면

경로: `/monitoring/index`

실시간 시스템 상태를 대시보드 형태로 표시합니다. 각 지표가 아래 표의 "정상 범위"를 벗어나면 성능 저하의 원인이 될 수 있으므로 확인해 주세요.

| 지표                 | 설명          | 정상 범위             |
| ------------------ | ----------- | ----------------- |
| CPU 사용률            | 서버 CPU 부하   | < 70%             |
| JVM 힙 메모리          | 힙 사용량/최대    | < 80%             |
| 활성 스레드             | 동작 중 스레드 수  | < 500             |
| MPS (Messages/sec) | 초당 메시지 처리 수 | 설정된 rate limit 이하 |
| 파이프라인 큐            | 대기 중 메시지 수  | < 10,000          |
| DB 연결              | 활성 DB 연결 수  | < 풀 최대값           |

### 서버 상태

경로: `/server/status`

| 항목        | 설명                        |
| --------- | ------------------------- |
| 서버 가동 시간  | Uptime                    |
| 엔진 상태     | RUNNING / STOPPED / ERROR |
| 마지막 시작 시각 | 엔진 최종 시작 일시               |
| 버전 정보     | 플랫폼 버전                    |

## 로그 모니터링 <a href="#log-monitoring" id="log-monitoring"></a>

로그는 시스템의 동작 상태를 기록하는 텍스트 파일입니다. 문제가 발생했을 때 로그를 확인하면 원인을 파악하는 데 큰 도움이 됩니다.

### Tomcat 로그

```bash
# 실시간 로그 확인
tail -f /opt/tomcat/logs/catalina.out

# 에러 로그 필터링
grep -i "ERROR\|EXCEPTION" /opt/tomcat/logs/catalina.out | tail -100
```

### 로그 레벨

| 레벨    | 설명                           |
| ----- | ---------------------------- |
| INFO  | 정상 동작 정보입니다                  |
| WARN  | 경고 메시지입니다 (성능 저하, 재시도 등의 상황) |
| ERROR | 오류가 발생했습니다 (처리 실패, 연결 오류 등)  |

### 주요 로그 패턴

아래 로그 패턴이 나타나면 해당 조치를 취해 주세요:

| 패턴                            | 의미                                                    |
| ----------------------------- | ----------------------------------------------------- |
| `Engine started successfully` | 엔진이 정상적으로 기동되었습니다                                     |
| `Pipeline queue overflow`     | 파이프라인 큐가 초과되었습니다 — 처리 속도를 점검해 주세요                     |
| `Cassandra connection failed` | Cassandra 연결에 실패했습니다 — 클러스터 상태를 확인해 주세요               |
| `OPC connection lost`         | OPC 서버 연결이 끊어졌습니다 — 네트워크 및 OPC 서버를 확인해 주세요            |
| `Rate limit exceeded`         | 처리율이 초과되었습니다 — `engine.pipeline.ratelimit` 값을 조정해 주세요 |

## 데이터베이스 모니터링 <a href="#db-monitoring" id="db-monitoring"></a>

데이터베이스의 상태를 정기적으로 모니터링하면 성능 저하나 장애를 사전에 예방할 수 있습니다.

### PostgreSQL

```bash
# 활성 연결 확인
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

```bash
# 클러스터 상태
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

```bash
# Redis 상태 확인
redis-cli -a redis123! INFO

# 메모리 사용량
redis-cli -a redis123! INFO memory

# 키 수 확인
redis-cli -a redis123! DBSIZE

# 슬로우 로그
redis-cli -a redis123! SLOWLOG GET 10
```

## JMX 모니터링 <a href="#jmx" id="jmx"></a>

> **안내:** JMX(Java Management Extensions)는 Java 애플리케이션의 내부 상태를 외부에서 모니터링할 수 있도록 제공하는 기술입니다. PlantPulse는 JMX를 통해 150개 이상의 속성을 제공하고 있습니다.

### JMX 접속

```bash
# 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 <a href="#codahale-metrics" id="codahale-metrics"></a>

> **안내:** Codahale Metrics는 애플리케이션의 성능 지표를 수집하는 라이브러리입니다. PlantPulse에서는 70개 이상의 메트릭이 수집되며, `/admin/tool/metrics` 경로에서 조회하실 수 있습니다.

### 메트릭 유형

| 유형        | 설명                           |
| --------- | ---------------------------- |
| Counter   | 누적 카운터입니다 (이벤트 수, 에러 수 등)    |
| Timer     | 처리 시간을 측정합니다 (평균, p95, p99)  |
| Histogram | 값의 분포를 표시합니다 (큐 깊이, 배치 크기)   |
| Gauge     | 현재 시점의 값을 표시합니다 (활성 연결, 메모리) |

## 헬스체크 스크립트 <a href="#healthcheck" id="healthcheck"></a>

헬스체크 스크립트를 활용하면 플랫폼의 주요 서비스가 정상적으로 동작하고 있는지 자동으로 확인할 수 있습니다.

### 자동 헬스체크

아래는 주요 서비스의 상태를 자동으로 점검하는 스크립트 예시입니다:

```bash
#!/bin/bash
# healthcheck.sh

# API 헬스체크
HTTP_STATUS=$(curl -s -o /dev/null -w "%{http_code}" http://localhost:8080/api/v4/ping)
if [ "$HTTP_STATUS" != "200" ]; then
    echo "[ALERT] PlantPulse API is not responding (HTTP $HTTP_STATUS)"
    # 알림 발송 로직 추가
fi

# 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 redis123! ping | grep -q "PONG"
if [ $? -ne 0 ]; then
    echo "[ALERT] Redis is not responding"
fi
```

crontab에 등록하여 주기적으로 실행하실 수 있습니다:

```bash
# 5분마다 헬스체크
*/5 * * * * /opt/scripts/healthcheck.sh >> /var/log/plantpulse-healthcheck.log 2>&1
```

## Grafana 모니터링 대시보드 <a href="#grafana" id="grafana"></a>

플랫폼 모니터링은 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 | 큐 입출력 건수                 |

***

## 모니터링 도구 연동 <a href="#tool-integration" id="tool-integration"></a>

### ELK Stack

Tomcat 로그를 Filebeat → Logstash → Elasticsearch → Kibana 파이프라인으로 수집하여, 로그 검색 및 분석 환경을 구축할 수 있습니다. 대규모 운영 환경에서 로그를 효율적으로 관리하고 싶으신 경우 도입을 검토해 보시기 바랍니다.
