[ Scouter ] Scouter 모니터링 동작 원리 및 Agent와 plugin
# Scouter Agent는 어떻게 Tomcat을 모니터링하는걸까?
- Tomcat 실행 시 -javaagent 옵션으로 JVM에 로딩이 됩니다.
- JVM은 먼저 Java Agent를 초기화 함
- Java Agent는 JVM의 instrumentation API를 이용해서 Tomcat 및 애플리케이션 클래시의 바이트 코드를 동적으로 변환 함
이 말은 JVM에 클래스를 로딩할 때, 바이트코드 형태로 모니터링 로직을 삽입한 새로운 클래스가 메모리에 올라가게 한다는 것
# Scouter는 용도에 따라 Agent가 나뉘어 있습니다. 각각 모니터링 대상이 다르다고 보면 됩니다.
| agent.java | Java 애플리케이션(JVM) | TPS, 응답시간, SQL, GC, Heap, XLog, Method Profile 등 |
| agent.batch | Batch 프로그램 | 배치 실행 시간, 성공/실패, 수행 결과 등 |
| agent.host | 서버(OS) | CPU, Memory, Disk, Network, Load Average 등 |
1. agent.java
가장 많이 사용하는 Agent입니다.
Tomcat, Spring Boot, WebLogic, JEUS 등 JVM에서 실행되는 애플리케이션에 -javaagent 옵션으로 붙여 실행합니다.
이 Agent는 다음과 같은 애플리케이션 성능 정보를 수집합니다.
- TPS
- 응답시간
- Active Service
- SQL 실행 시간
- SQL 프로파일
- Method 프로파일
- GC
- Heap Memory
- Exception
2. agent.batch
웹 서비스가 아니라 배치 프로그램를 모니터링하기 위한 Agent입니다.
예를 들어,
- Spring Batch
- Quartz Job
- 매일 새벽 실행되는 ETL
- 데이터 이관 프로그램
등의 실행 시간을 수집할 때 사용합니다.
수집하는 정보는 예를 들어,
- 배치 시작 시간
- 종료 시간
- 수행 시간
- 성공/실패 여부
- 예외 발생 여부
입니다.
즉, HTTP 요청(TPS)을 모니터링하는 것이 아니라 Job 단위로 모니터링합니다.
3. agent.host
이 Agent는 애플리케이션이 아니라 서버 자체(OS)를 모니터링합니다.
예를 들어 Linux 서버에 설치하면
- CPU
- Memory
- Disk
- Network
- Process
- Load Average
등을 Collector로 전송합니다.
Java가 없어도 Host Agent만 실행할 수 있습니다.
이처럼 각 Agent는 서로 다른 대상을 모니터링하며, 필요에 따라 함께 사용할 수 있습니다. 대부분의 웹 서비스 환경에서는 agent.java만 사용해도 충분한 경우가 많고, 서버 자원까지 함께 모니터링하려면 agent.host를 추가합니다. 배치 프로그램의 실행 현황까지 추적하려는 경우에는 agent.batch도 함께 사용하는 구성이 일반적입니다.
# 기본 Agent가 수집하는 정보 외에 추가 정보를 수집하거나 기존 수집 방식을 확장할 수 있는데 그것이 바로 Agent Plugin이다.
Agent Plugin으로 할 수 있는 것
1. Custom 데이터 추가 수집
기본 Java Agent는 다음 정도를 수집합니다.
- TPS
- 응답시간
- SQL
- GC
- Heap
- CPU 등
하지만 업무 관점의 데이터는 모릅니다.
예:
- 현재 로그인 사용자 수
- 주문 처리 건수
- 장바구니 개수
- 특정 비즈니스 상태
- Queue 적재량
이런 정보는 Plugin으로 추가할 수 있습니다.
2. Trace(XLog)에 사용자 정보 추가
Java Agent Plugin에서 많이 사용하는 용도입니다.
예를 들어 XLog를 볼 때 기본적으로:
POST /order/create
Response Time: 800ms
SQL: 5개
정도만 보이는데,
Plugin을 사용하면:
POST /order/create
User: hong123
OrderNo: ORD-20260721
Payment: CARD
같은 정보를 붙일 수 있습니다.
장애 분석할 때 매우 유용합니다.
3. 특정 로직 감시
예를 들어:
결제 API
└─ 결제 승인 시간 측정
같은 업무 로직의 수행 시간을 Scouter에 표시할 수 있습니다.
4. 기본 Agent 동작 변경
Plugin으로 다음 같은 처리를 할 수도 있습니다.
- 특정 URL 제외
- 특정 SQL 필터링
- 민감 데이터 마스킹
- 특정 Exception 처리 변경
- 사용자 정의 알람 데이터 생성