Skip to main content

System Monitoring

Overview​

PlantPulse monitoring consists of 3 layers. By using the tools in each layer together, you can detect problems early and respond quickly.

LayerResponsibilityFrequency
L1 Host/StackContainer status/health, resource usage, health responsesEvery 1~5 min (Auto/Manual)
L2 Platform Built-inBusiness metrics by module (throughput, lag, queue depth, JVM)Real-time
L3 External MonitoringLong-term trends, alarms, integrated view of multiple hostsReal-time

Platform Service Modules​

PlantPulse consists of multiple service modules starting with the plantpulse- prefix. Modules and containers are not 1:1 — the six application modules each have their own container, while the remaining infrastructure modules run together within one plantpulse-datalake container.

LocationModule
Own Containerplantpulse-server-web · plantpulse-batch-web · plantpulse-warehouse-web · plantpulse-plugin-opcua · plantpulse-plugin-aasx · plantpulse-ha
Inside plantpulse-datalake Containerstorage · messaging · analytics · timeseries · workflow · cep · data-gateway · sql · monitor · backup

Container-level status is viewed from the host via bin/status.sh, while module-level status within the datalake is viewed via status.sh inside the container. The «ports» below are the ports opened by the module inside the container; only some of these are exposed to the host → Port Configuration Information

Core Service Modules​

ModulePortDescription
plantpulse-server80 / 443Web server and administration console, REST API
plantpulse-cep7400 / 7401Complex Event Processing engine (Aster CEP)
plantpulse-batch9500Batch processing server
plantpulse-data-gateway5500Data gateway (HTTP REST-based data inquiry)
plantpulse-datalake-admin-api4950 (HTTPS)Administration console API and monitoring agent. The only health port published to the host
plantpulse-warehouse-web9600Data warehouse
plantpulse-plugin-opcua11004 / 11005OPC-UA server plugin
plantpulse-plugin-aasx(Not exposed to host)AASX server plugin
plantpulse-ha10210Redundancy recovery daemon
plantpulse-proxy80 / 443 / 1883 / 1884Sole entry point for users and equipment

Messaging Modules (plantpulse-messaging)​

ServicePortDescription
Kafka9092Distributed message streaming
MQTT1883IoT lightweight message protocol
MQTT Enterprise-MQTT Enterprise Edition

Storage Modules (plantpulse-storage)​

ServicePortDescription
Cassandra 6.09042Time series database (CQL)
PostgreSQL5432Metadata relational database
Valkey (Redis)6379In-memory cache
RustFS9000Object storage (S3 compatible)
Neo4j-Graph database
RustFS / WeedFS-Distributed file system

Analytics Modules (plantpulse-analytics)​

ServicePortDescription
Spark Master7077Distributed analytics engine
Spark UI4440Spark administration console
Kyuubi10000Distributed SQL gateway (JDBC/Thrift)
Gravitino19001Data catalog
Hadoop-Distributed file system
Hive-Data warehouse query engine

Time Series Modules (plantpulse-timeseries)​

ServicePortDescription
Time series engine7800Time series data processing engine
Time series UI3000Time series data visualization UI

Workflow Modules (plantpulse-workflow)​

ServicePortDescription
Temporal7233Distributed workflow engine (Web UI 8233)
Kestra8380Workflow orchestration / scheduler

Utility Modules​

ModuleDescription
plantpulse-datalake-cli (pd)CLI for datalake start/stop/restart, configuration, and node management
plantpulse-setupInitial setup tool (model, CSV configuration)
plantpulse-backupBackup service
plantpulse-recoveryData recovery tool
plantpulse-exporterAsset data export tool
plantpulse-migratorData migration tool (Spark-based)
plantpulse-mirror-makerData replication tool
plantpulse-simulatorData simulator (for testing)
plantpulse-apiREST API client library

Verifying Service Status​

First, check the overall stack status from the host.

cd /opt/kopens/plantpulse-platform-docker/bin
./status.sh # 0 = 정상 / 2 = 비정상
./ops-check.sh # 헬스 + 최근 critical log

Check the port-level status of infrastructure modules inside the datalake container.

./shell.sh
/opt/kopens/plantpulse-platform/plantpulse-datalake-cli/bin/pd status

Output example:

==============================================================================================================
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
App containers are not shown in the list above

The status.sh inside the datalake only monitors the modules within that container. Even if PP_SERVER, PP_BATCH, PP_WAREHOUSE, or PP_PLUGIN appear as STOPPED or are missing entirely, it is not a failure — those apps run in their own containers, and their status is determined by bin/status.sh on the host.

Environment Variables​

Host-side values are determined by /opt/kopens/plantpulse-platform-docker/bin/env.sh, and values actually seen by the container are determined by compose/docker-compose.yml. For detailed relationships and priorities, refer to the Environment Variable Reference. Below are the names used inside the container.

VariableDescriptionExample
PP_SCHEMESchema namePP
PP_MODEExecution modeMASTER
PP_HOST_IPInternal IP192.168.0.41
PP_SERVICE_IPService IP192.168.0.41
PP_MASTER_IPMaster node IP192.168.0.41
PP_DATA_DIRData directory/data1/pp-data
PP_TEMP_DIRTemporary directory/data1/pp-temp
PP_BACKUP_DIRBackup directory/data1/pp-backup
PP_CLUSTER_CORESCluster CPU core count16
PP_CLUSTER_MEMORY_BY_COREMemory per core2G
PP_OPTIONSAdditional options (JSON){"use-infra":true,"use-app":true}

Monitoring Targets​

The following are the primary targets and items to monitor in the PlantPulse platform. Regularly checking these items helps ensure stable operation.

TargetMonitoring Item
Application ServerCPU, Memory, Disk, Thread
JVMHeap Memory, GC, Class Loading
PostgreSQLConnection Pool, Query Performance, Disk
Aster TSDBCluster Status, Latency, Compaction
RedisMemory, Hit Rate, Connection Count
EnginePipeline Throughput, Queue Depth, Error Rate
NetworkOPC Connection, WebSocket, Latency

Web Console Monitoring​

System Monitoring Screen​

Path: /monitoring/index

Displays the real-time system status in a dashboard format. If any metric falls outside the "Normal Range" in the table below, it may cause performance degradation and should be investigated.

MetricDescriptionNormal Range
CPU UsageServer CPU load< 70%
JVM Heap MemoryHeap usage/max< 80%
Active ThreadsNumber of operating threads< 500
MPS (Messages/sec)Number of messages processed per secondBelow set rate limit
Pipeline QueueNumber of messages waiting< 10,000
DB ConnectionsNumber of active DB connections< Pool maximum

Server Status​

Path: /server/status

ItemDescription
Server UptimeUptime
Engine StatusRUNNING / STOPPED / ERROR
Last Start TimeFinal engine start date and time
Version InformationPlatform version

Log Monitoring​

Logs are text files that record the operating status of the system. Checking logs when a problem occurs is highly beneficial for identifying the cause.

From the Host — logs.sh​

Since there are eight containers, the fastest way to start when you don't know which container has the problem is without arguments.

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 로 종료)

By default, it prints the last N lines (default 200) and exits. To follow the logs, append -f.

Log Files Inside the Container​

# 웹 서버 — 자기 컨테이너 안에 있습니다
./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

To copy logs to the host all at once, use ./tools/copy-log-to-local.sh; for support request bundles, use ./doctor.sh.

Log Levels​

LevelDescription
INFONormal operation information
WARNWarning messages (performance degradation, retries, etc.)
ERRORAn error occurred (processing failure, connection error, etc.)

Key Log Patterns​

If the following log patterns appear, please take the corresponding action:

PatternMeaning
Engine started successfullyEngine started normally
Pipeline queue overflowPipeline queue exceeded — please check processing speed
Cassandra connection failedFailed to connect to Aster TSDB — please check cluster status
OPC connection lostOPC server connection lost — please check network and OPC server
Rate limit exceededThroughput exceeded — please adjust the engine.pipeline.ratelimit value

Database Monitoring​

Regularly monitoring the status of the database can prevent performance degradation or failure in advance.

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;"

Aster TSDB​

# 클러스터 상태
nodetool status

# 테이블별 통계
nodetool tablestats pp

# 컴팩션 상태
nodetool compactionstats

# GC 로그 확인
nodetool gcstats

# 지연 히스토그램
nodetool tablehistograms pp tm_tag_point

Aster TSDB Status Codes:

StatusDescription
UNUp / Normal — Normal status
DNDown / Normal — Node is down
UJUp / Joining — Joining the cluster
ULUp / Leaving — Leaving the cluster

Redis​

# Redis 상태 확인
redis-cli -a 설치-시-변경 INFO

# 메모리 사용량
redis-cli -a 설치-시-변경 INFO memory

# 키 수 확인
redis-cli -a 설치-시-변경 DBSIZE

# 슬로우 로그
redis-cli -a 설치-시-변경 SLOWLOG GET 10

JMX Monitoring​

Note: JMX (Java Management Extensions) is a technology that allows the internal state of Java applications to be monitored from the outside. PlantPulse provides over 150 attributes through JMX.

JMX Connection​

# 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
  • Category: 12 categories including engine, cache, storage, network, pipeline, cep, scheduler, monitoring, etc.

Key JMX Attributes​

AttributeDescription
engine.statusEngine status
engine.uptimeUptime
pipeline.queue.sizePipeline queue size
pipeline.mpsNumber of messages processed per second
cache.tag.countNumber of cached tags
storage.cassandra.statusAster TSDB connection status

Codahale Metrics​

Note: Codahale Metrics is a library used to collect performance metrics of an application. PlantPulse collects over 70 metrics, which can be viewed at the /admin/tool/metrics path.

Metric Types​

TypeDescription
CounterCumulative counter (event count, error count, etc.)
TimerMeasures processing time (average, p95, p99)
HistogramShows the distribution of values (queue depth, batch size)
GaugeShows the value at the current point in time (active connections, memory)

Standard Health Check API​

Web app / plugin services provide a health check endpoint GET /api/health based on the common platform specification. For major web apps (server / batch / cep / sql / data-gateway), this endpoint signifies readiness — it does not report UP simply because the process (context) is alive, but returns UP only when the internal engine / core dependencies are normal and ready to receive traffic (Platform design decision, 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 — Reports 200 UP only when ready. If booting is in progress, it reports 503 STARTING; if some dependencies go down after booting is complete, it reports 503 DEGRADED.
  • No dependency ping — The checks only read in-memory status flags already maintained by each service (no live DB queries / network pings — polling does not load the data store).
  • Anonymous access — Can be called without authentication (for operational inspection / automated deployment verification).
  • Cache forbidden — Headers of the Cache-Control: no-cache series are always included.
  • Response fields include status / service (artifact name) / ts (epoch ms) + the checks (detailed check per service) of the readiness-promoted service.
ServiceHealth URLMeaningchecks / Notes
serverhttp://HOST:80/api/healthreadinessengine — Engine lifecycle status (UP only when previous stage booting is complete RUNNING)
batchhttp://HOST:9500/api/healthreadinesstimer (Batch pipeline operation) / redis (InMemory connection)
cephttp://HOST:7400/api/healthreadinessengine (CEP engine+consumer+recovery complete) / redis (InMemory connection)
sqlhttps://HOST:4001/api/healthreadinessdatabase_manager (DB manager initialization complete) — Provided via HTTPS
data-gatewayhttp://HOST:5500/api/healthreadinessdatabase / inmemory / query_log — This path is excluded from HTTPS enforcement (CONFIDENTIAL), allowing localhost HTTP probes
warehouse (s3 service)http://HOST:9600/api/healthreadinesstemporal — Temporal worker registration status. If not registered, reports STARTING + 503 (Normal for 503 immediately after boot as web server starts first and worker follows). Includes 3 common fields + system/JVM metrics
plugin — AAS V3http://HOST:8090/api/healthlivenessNot promoted to readiness
plugin — OPC-UA Browse UIhttp://HOST:12780/api/healthlivenessPort is set via opc.ua.browser.ui.port (Default 12780)

There are two purposes.

  1. Operational Inspection — Manual verification, readiness probes for crontab / external monitoring.
  2. CI Deployment Auto-verification — The deploy:dev job polls this URL (DEPLOY_HEALTH, 240 seconds) after deployment to verify booting (refer to setup and deployment guide). Since it means readiness, 503 during boot is normal, and polling waits for the transition to UP.

Role Distinction: plantpulse-datalake-admin-api (:4950) is an infrastructure monitoring agent that collects and exposes host / JVM / module metrics, while /api/health is a readiness endpoint provided by each web app itself. They are complementary, not redundant.

In a container environment, since the compose healthcheck already determines the readiness of each app, operators can receive the determination of all eight containers in one line via bin/status.sh.

Health Check Script​

By utilizing health check scripts, you can automatically verify if the platform's primary services are operating normally.

Automated Health Check​

Below is an example script that automatically checks the status of major services:

#!/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

You can register this in crontab to execute it periodically:

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

PlantPulse Dashboard Monitoring Dashboard​

Platform monitoring is visually provided through the PlantPulse Dashboard. Access URL: http://localhost:3000/

Note: PlantPulse Dashboard is a data visualization tool bundled with the platform, displaying various PlantPulse metrics through graphs and charts. Five default dashboards are provided under the PLANTPULSE folder.


1. PlantPulse - Server​

The core dashboard for grasping the overall status of the platform server at a glance.

SUMMARY

PanelTypeDescription
VERSIONStatPlatform version information
Server Start DateStatInitial engine start date and time
CPU LoadGaugeServer CPU usage
Memory UsageGaugeServer memory usage
Messages per SecondStatMessage reception rate (MPS)
Total Storage CountStatCumulative stored data count
Network LatencyStatMessage reception network latency (ms)
DiagnosticsStatDiagnostic event status

SERVER-METRICS

PanelTypeDescription
CACHE / MQTT / KAFKA / WEBSOCKET / DATABASE / TSEStatConnection status of each service
Server CPU UsageGraphTime series trend of CPU usage
Server Memory UsageGraphTime series trend of memory usage
JAVA Heap UsageGraphJVM heap memory usage
Data DISK R/W StatusGraphDisk read/write traffic
Messages Received by ProtocolGraphReception volume by protocol (OPC, MQTT, Kafka, etc.)
Message Reception Network LatencyGraphNetwork latency time series
Total Message ReceptionGraphCumulative message reception volume
Messages Received BY 1SECGraphMessage reception trend per second
Pipeline Waiting QueueGraphPipeline queue depth
Pipeline Offload Queue SizeGraphRocksDB offload queue
Pipeline Validation FailuresGraphNumber of validity verification failures
Pipeline Worker Processing TimeGraphWorker processing time
Timeout Message Backup ProcessingGraphNumber of timeout message backups
Pipeline CollectorGraphCollector operation status
Storage Save BufferGraphSave buffer size
Streaming Processing CountGraphWebSocket streaming throughput
Streaming Operating Thread CountGraphStreaming active threads
Streaming Waiting Queue CountGraphStreaming queue waiting count
Storage Save CountGraphDB save count
Storage Batch CountGraphBatch save count
Storage Worker CountGraphNumber of save workers
DDS Processing CountGraphKafka DDS distribution count
Async Thread Active CountGraphActive async execution threads
Async Thread Pool SizeGraphThread pool size
Diagnostics Error CountGraphTrend of diagnostic errors
Logging ExceptionGraphException log occurrence trend
GC TimeGraphJVM GC duration
DISK UsageGraphDisk usage trend

2. PlantPulse - Data Lakehouse​

Dashboard for monitoring the performance and status of the database and storage layers.

DATA-GATEWAY

PanelDescription
TOTAL_QUERYTotal number of queries
QPSQuery throughput per second (Gauge)
QUERY_LATENCYQuery latency time series
QUERY_LATENCY_MAXMaximum query latency
SUCCESS / ERRORSuccess and failure counts

CACHE (REDIS)

PanelDescription
CLIENTSNumber of Redis client connections
ALLOCATORMemory allocator status
KEY_COUNTNumber of stored keys
FRAGMENTATIONMemory fragmentation ratio

CEP

PanelDescription
JAVA_HEAP_USEDCEP engine heap memory
EVENT_INGESTION_RATEEvent ingestion rate
EQL_CPU_TIMENo value provided — CEP does not measure CPU time per statement
EQL_MAP_COUNTNumber of deployed EQL statements
EVENT_INGEST_DIFFEvent ingestion difference
EVENT_DELAY_HISTOGRAMEvent delay distribution
CEP_STATEMENT_MATCH_RATEStatement matching ratio
EQL_STATEMENT_OUTPUT_RATEStatement output ratio

META-STORE (POSTGRES)

PanelDescription
TOTAL_CONNECTIONSTotal number of connections
QUERY_LATENCYQuery latency
TOTAL_READS_HITSNumber of read hits
TOTAL_DB_SIZETotal DB size

EVENT-STORE (CASSANDRA)

PanelDescription
NATIVE_CLIENTNative client connections
LATENCYRead/write latency
READ_PER_SECONDS / WRITE_PER_SECONDSReads/writes per second
HEAP / DIRECT_MAPPED_MEMORYJVM memory
CACHE / CACHE_HIT_RATECache and hit rate
TOTAL_DATA_SIZETotal data size
MEMTABLEMemtable status
COMPACTION / COMPACTION_BYTESCompaction status
TABLE_COMPACTIONS / TABLE_SSTABLE_COUNTCompaction and SSTable by table
BLOOM_FILTER_FALSE_RATIOBloom filter false positive rate
TABLE_READ_LATENCY / TABLE_RANGE_LATENCY / TABLE_WRITE_LATENCYLatency by table
PENDINGS / FLUSH / THREAD_POOLPending, flush, thread pool
STATEMENT / COMMITLOG / EXCEPTION / MUTATIONInternal metrics
COMPRESSION / TOTAL_SSTABLECompression and SSTable status

TIMESERIES-STORE (TSE)

PanelDescription
TSE_MEMORYTime series engine memory
TSE_HTTP_TIMEHTTP response time
TSE_DATASTOREDatastore status
TSE_QUEUE_PROCESS_COUNTQueue processing count

ANALYTICS-STORE (SPARK)

PanelDescription
MEMORY_USEDSpark memory usage
CONNECTIONConnection count
OPERATIONNumber of operations
REQUEST_RATERequest rate

3. PlantPulse - Edge Gateway​

Dashboard for monitoring edge device status, PLC connections, and data reception.

Summary Panel

PanelDescription
Total Edge GatewaysNumber of registered edge gateways
Power (Normal/Anomaly)Count of normal and anomaly power statuses
PLCNumber of PLC connections
Total Data VolumeTotal size of collected data
Total Reception Sum per SecondTotal reception sum of all edges per second (Gauge)
Max Data Reception LatencyMaximum reception latency (ms) (Gauge)
LogLog status

PLC STATUS

PanelDescription
PLC Ping Failure CountTrend of PLC connection ping failures
PLC Connected / DisconnectedTrend of PLC connection status
PLC Value Read Success CountTrend of data read successes
PLC Data Read Failure CountTrend of data read failures
System Error Count TrendTrend of system errors

DATA POINT

PanelDescription
Total Transmission SUM(MPS) per SecondTotal transmission sum of all edges per second
Point Transmission CountTrend of point transmission counts
Transmitted Point BytesTransmitted data bytes
Min/Avg/Max Reception LatencyReception latency distribution

EDGE H/W

PanelDescription
CPUEdge device CPU usage
MemoryMemory usage
Disk (SSD)Disk usage
Network Upload/DownloadNetwork traffic
TemperatureDevice temperature

4. PlantPulse - Statistics​

Dashboard for tracking long-term statistics such as daily data growth and system resource peaks. Useful for identifying long-term growth trends.

PanelDescription
Total Data VolumeTotal stored data size
Daily Total Data VolumeDaily data volume trend
Daily Message TransmissionDaily message transmission count
Daily Data IncreaseDaily data growth trend
Message Reception CountMessage reception count trend
Average/Max Network LatencyNetwork latency statistics
SSTABLE IncreaseAster TSDB SSTable growth trend
Max DB Client ConnectionsMaximum DB connections
Max Async Thread ExecutionsAsync processing peak
Max JAVA GC TimeMaximum GC duration
Max CQL Prepared StatementsMaximum CQL Prepared Statement count
Max Partition SizeAster TSDB maximum partition size
Min JAVA Heap Free SpaceMinimum JVM heap free space
Max Async Thread Waiting CountMaximum async queue wait
Max Memory Buffer SizeMaximum memory buffer
Backup Message Processing CountBackup processing count

5. PlantPulse - Messaging​

Dashboard for monitoring the status of MQTT, Kafka, and WebSocket message brokers.

SUMMARY

PanelDescription
MQTT / KAFKA / WEBSOCKETConnection status of each broker
CPUServer CPU usage
JAVA_HEAPJVM heap usage
NETWORK_READ_BYTESNetwork reception bytes

MQTT

PanelDescription
CPU_USEDMQTT broker CPU (Gauge)
MEMORY_USEDMemory usage
CONNECTIONSClient connection count
NETWORK IN/OUTNetwork input/output
GC_COUNT / GC_TIME_MSGC count and duration
THREAD_COUNTThread count
INCOMING / OUTGOINGReceived and sent message counts
RETAINED_COUNTNumber of Retained messages
SUBSCRIPTIONSNumber of subscriptions
TOTAL_MESSAGETotal message count

KAFKA

PanelDescription
CPU_USEDKafka broker CPU (Gauge)
MEMORY_USEDMemory usage
GLOBAL_TOPICGlobal topic status
NETWORK IN/OUTNetwork input/output
TOPIC_BYTE_IN/OUT_PER_SECBytes per second by topic
MESSAGE_PER_SEC_MEAN_RATE / 1M_RATEMessage throughput per second
NETWORK_REQUEST_FETCHNumber of Fetch requests
OFFLINE_PARTITION_COUNTNumber of offline partitions
ACTIVE_CONTROLLER_COUNTNumber of active controllers

WEBSOCKET

PanelDescription
CPU_USEDWebSocket server CPU (Gauge)
MEMORY_USEDMemory usage
CONNECTION_COUNTWebSocket connection count
ENQUEUE / DEQUEUEQueue input/output counts

Monitoring Tool Integration​

ELK Stack​

You can build a log search and analysis environment by collecting container logs through a Filebeat → Logstash → Elasticsearch → Kibana pipeline. Consider adopting this if you wish to efficiently manage logs in a large-scale operational environment. Container standard output is collected via the docker logging driver, and file logs inside containers are collected via host mount (PLANTPULSE_LOG_DIR).