자바

[ Scouter ] Scouter 모니터링 동작 원리 및 Agent와 plugin

hola. 2026. 7. 21. 17:30

# Scouter Agent는 어떻게 Tomcat을 모니터링하는걸까?

 

- Tomcat 실행 시 -javaagent 옵션으로 JVM에 로딩이 됩니다.

- JVM은 먼저 Java Agent를 초기화 함

 - Java Agent는 JVM의 instrumentation API를 이용해서 Tomcat 및 애플리케이션 클래시의 바이트 코드를 동적으로 변환 함

이 말은 JVM에 클래스를 로딩할 때, 바이트코드 형태로 모니터링 로직을 삽입한 새로운 클래스가 메모리에 올라가게 한다는 것

 


 

# Scouter는 용도에 따라 Agent가 나뉘어 있습니다. 각각 모니터링 대상이 다르다고 보면 됩니다.

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 처리 변경
  • 사용자 정의 알람 데이터 생성