1. 개요
Aspectow AppMon은 Aspectran 프레임워크 기반의 애플리케이션을 위한 경량(Lightweight) 실시간 모니터링 솔루션입니다. 애플리케이션의 성능에 미치는 영향을 최소화하면서, 운영 중에 발생하는 다양한 이벤트, 로그, 시스템 메트릭 등을 웹 UI를 통해 실시간으로 관찰할 수 있도록 설계되었습니다.
복잡한 설정 없이 Aspectran 애플리케이션에 쉽게 통합할 수 있으며, 개발자와 운영자가 애플리케이션의 내부 동작을 직관적으로 파악하고 문제를 신속하게 진단할 수 있도록 돕습니다.
2. 주요 특징
- 실시간 모니터링: WebSocket 또는 Long-Polling 방식을 통해 서버에서 발생하는 데이터를 실시간으로 스트리밍하여 UI에 표시합니다.
- 경량성 및 쉬운 통합: 모니터링 대상 애플리케이션에 Aspectran 빈(Bean)으로 간단하게 등록할 수 있으며, 최소한의 리소스를 사용하여 애플리케이션 성능 저하를 최소화합니다.
- 동적 모니터링: Aspectran의 AOP 기능을 활용하여 애플리케이션 코드 변경 없이 특정 트랜잭션(Activity)의 실행을 동적으로 추적하고 성능을 측정합니다.
- 다양한 데이터 소스 지원:
- 이벤트(Events): HTTP 요청 처리, 세션 생성/소멸 등 애플리케이션의 주요 이벤트를 추적하고 카운팅합니다.
- 메트릭(Metrics): JVM 힙 메모리 사용량, Undertow 스레드 풀 상태, HikariCP 커넥션 풀 상태 등 다양한 시스템 메트릭을 수집합니다.
- 로그(Logs): 지정된 로그 파일을 실시간으로 테일링(Tailing)하여 UI에 표시합니다.
- 데이터 영속성: 주요 이벤트 카운트 데이터를 내장된 H2 데이터베이스에 주기적으로 저장하여, 애플리케이션 재시작 시에도 통계 데이터가 유지될 수 있도록 합니다.
- 유연한 설정: APON(Aspectran Object Notation) 기반의 설정 파일을 통해 어떤 인스턴스의 어떤 데이터를 모니터링할지 유연하게 정의할 수 있습니다.
3. 핵심 아키텍처
Aspectow AppMon은 다음과 같은 주요 컴포넌트로 구성됩니다.
- AppMonManager: AppMon의 전체적인 생명주기와 설정을 관리하는 핵심 엔진입니다.
- Exporter: 특정 데이터 소스(로그, 메트릭, 이벤트)로부터 데이터를 수집하는 역할을 담당합니다.
- Reader:
Exporter
가 데이터를 수집하는 구체적인 방법을 구현합니다. (예: JMX를 통해 JVM 메트릭 조회, 파일 시스템에서 로그 파일 읽기 등)
- Reader:
- PersistManager: 수집된 데이터(주로 이벤트 카운트)를 데이터베이스에 저장하는 영속성 처리를 담당합니다.
- CounterPersistSchedule: 스케줄러에 의해 주기적으로 실행되어 카운터 데이터를 DB에 저장합니다.
- ExportService: 클라이언트(웹 UI)와의 통신을 담당하며, 수집된 데이터를 WebSocket 또는 Polling 방식으로 전송합니다.
- Activity (Front/Backend): 웹 UI 또는 외부 에이전트로부터의 HTTP 요청을 처리하는 컨트롤러 역할을 합니다.
4. 시작하기 (간단 가이드)
- 의존성 추가:
pom.xml
에aspectow-appmon
의존성을 추가합니다. - 팩토리 빈 등록: Aspectran 설정 파일에
AppMonManagerFactoryBean
을 컴포넌트로 등록합니다. 이 팩토리 빈이 AppMon의 모든 기능을 활성화합니다. - 설정 파일 작성:
appmon-config.apon
파일을 작성하여 모니터링할 인스턴스, 이벤트, 메트릭, 로그 등의 대상을 상세하게 정의합니다. - 애플리케이션 실행: Aspectran 애플리케이션을 실행하면 AppMon이 함께 구동됩니다.
- 웹 UI 접속: 지정된 URL로 접속하여 실시간 모니터링을 시작합니다.
5. 데이터 영속성 구조
Aspectow AppMon은 이벤트 카운팅 데이터를 데이터베이스에 저장하여 통계를 유지합니다. 기본적으로 내장된 H2 데이터베이스를 사용하며, 스키마는 다음과 같습니다.
appmon_event_count
- 분, 시간, 일, 월, 년 단위로 집계된 이벤트 카운트 데이터를 저장합니다.
- 이 테이블의 데이터는 통계 차트를 그리는 데 사용됩니다.
- 주요 컬럼:
domain
,instance
,event
: 어떤 이벤트의 카운트인지를 식별합니다.datetime
: 집계된 시간 단위 (예:yyyyMMddHHmm
).total
: 누적 전체 카운트.delta
: 해당 시간 단위 동안 발생한 카운트.error
: 해당 시간 단위 동안 발생한 오류 카운트.
appmon_event_count_last
- 각 이벤트의 마지막 카운트 상태를 저장합니다.
- 애플리케이션이 재시작될 때 이 테이블의 데이터를 읽어 카운터를 복원함으로써, 재시작 전의 통계가 유실되지 않도록 합니다.
appmon_event_count
테이블과 유사한 구조를 가지지만,datetime
대신 마지막 등록 시간을 나타내는reg_dt
컬럼이 있습니다.
6. AppMon 설정 방법
AppMon의 모든 동작은 appmon-config.apon
파일을 통해 설정됩니다. 이 파일은 모니터링할 대상과 방법을 정의하는 여러 섹션으로 구성됩니다.
주요 설정 섹션
counterPersistInterval
: 이벤트 카운터의 집계 데이터를 데이터베이스에 저장하는 주기를 분(minute) 단위로 설정합니다. 설정하지 않으면 기본값인 5분으로 동작합니다.pollingConfig
: 클라이언트가 Long-Polling 방식으로 접속할 때의 동작을 설정합니다. (pollingInterval
,sessionTimeout
등)domain
: 모니터링 대상이 되는 서버 인스턴스를 정의하고 논리적으로 그룹화합니다. 각domain
은 하나의 모니터링 대상 서버를 가리키며, 해당 서버에 접속하기 위한 엔드포인트(endpoint
) 정보를 포함합니다.instance
: 모니터링할 개별 애플리케이션 또는 컴포넌트 단위를 정의합니다. 대부분의 상세 설정이 이 섹션 아래에 위치합니다.
instance
상세 설정
instance
섹션 아래에는 event
, metric
, log
를 설정하여 원하는 데이터를 수집할 수 있습니다.
event
설정:name
:activity
또는session
과 같이 미리 정의된 이벤트 타입을 지정합니다.target
: 모니터링할 대상을 지정합니다.activity
의 경우: Aspectran의 ActivityContext 이름 (예:jpetstore
).session
의 경우: 서블릿 컨텍스트 경로 (예:tow.server/jpetstore
).
parameters
:activity
이벤트에 대한 Pointcut을 설정하여 특정 요청 경로만 포함하거나 제외할 수 있습니다.
metric
설정:reader
: 메트릭을 수집할MetricReader
구현 클래스의 전체 이름을 지정합니다. 이 설정을 통해 커스텀 메트릭 수집기를 쉽게 추가할 수 있습니다.- 예:
com.aspectran.appmon.exporter.metric.jvm.HeapMemoryUsageReader
- 예:
parameters
:reader
클래스에 전달할 파라미터를 설정합니다. (예: HikariCP의poolName
)
log
설정:file
: 테일링할 로그 파일의 경로를 지정합니다.lastLines
: UI에 처음 접속했을 때 보여줄 로그의 마지막 라인 수를 지정합니다.
설정 예시 (appmon-config.apon
)
다음은 2개의 서버(backend1
, backend2
)를 모니터링 대상으로 정의하고, 그 중 jpetstore
인스턴스를 상세하게 모니터링하는 설정 예시입니다.
# DB 저장 주기 (분 단위), 0으로 설정하면 비활성화
counterPersistInterval: 10
# 모니터링 대상 서버 정의
domain: {
name: backend1
title: Server-1
endpoint: {
mode: auto
url: /appmon/backend1
}
}
domain: {
name: backend2
title: Server-2
endpoint: {
mode: auto
url: /appmon/backend2
}
}
# 모니터링할 인스턴스 상세 정의
instance: {
name: jpetstore
title: JPetStore
event: {
name: activity
target: jpetstore
parameters: {
+: /**
}
}
event: {
name: session
target: tow.server/jpetstore
}
metric: {
name: cp-jpetstore
title: CP-jpetstore
description: Shows the JDBC connection pool usage status
reader: com.aspectran.appmon.exporter.metric.jdbc.HikariPoolMBeanReader
parameters: {
poolName: jpetstore
}
sampleInterval: 50
exportInterval: 900
}
log: {
name: app
title: JPetStore App
file: /logs/jpetstore.log
lastLines: 1000
sampleInterval: 300
}
}
7. 결론
Aspectow AppMon은 Aspectran 애플리케이션의 투명성과 관찰 가능성(Observability)을 크게 향상시키는 강력한 도구입니다. 복잡한 APM 솔루션 도입이 부담스러운 환경에서 최소한의 설정으로 애플리케이션의 내부 상태를 실시간으로 들여다보고, 성능 문제를 조기에 발견하고 싶을 때 최적의 선택이 될 수 있습니다.