APM/Scouter

[자바 트러블슈팅 공부] XLog(필터링, 통계), PlugIn, Scouter 사용시 유용한 팁

대기업 가고 싶은 공돌이 2025. 1. 15. 05:27

본 게시글은 이상민 저자의 자바 트러블슈팅 책을 읽고 공부한 내용을 정리한 글이다.

 

XLog 사용법 - 필터링

  • 원통형 아이콘부터 쌍안경 아이콘까지가 전부 필터링을 위한 메뉴이다.
    • SQL Filter: SQL 쿼리에서 수행된 시간만을 보기 위한 필터
      • 이 메뉴를 누르면 전체 응답시간의 산점도가 SQL 시간만을 나타내는 산점도로 바뀐다.
    • API Filter: API 호출 시간만을 보기 위한 필터
      • 이 메뉴를 누르면 API 호출 시간이 나오는데, 대체로 API 호출 시간이 높아 지연의 주요 요인인 걸 파악할 수 있다.
    • Error Filter: Error가 발생한 것만을 보기위한 필터
      • 빨간 예외 점들만 확인할 수 있다.
    • 검색: 특정 URL이나 화면을 찾기 위한 메뉴

  • 쌍안경을 누르면 위의 화면이 나타난다.
    • Object: 인스턴스 구분
    • Service: URL 구분 (* 사용이 가능하다) EX) /api/v1/*
    • IP: 특정 IP에서 요청된 것을 검색하고자 함

XLog 사용법 - 과거 데이터 불러오기

  • 히스토리 제공 기능이 존재한다.
  • Xlog에서 마우스 오른쪽 키를 눌러보면 Load History라는 메뉴를 발견할 수 있다.

  • 여기서 원하는 날짜와 시간을 입력하면 된다.
  • 단, 너무 긴 시간을 입력하고 요청을 표시하는 점의 개수가 많아질 경우 클라이언트가 메모리 부족으로 사망할 수 있다.
  • 전체 디스크 용량의 80%가 넘는 경우에는 자동으로 오래된 데이터가 삭제된다는 점을 기억하자

통계 기능

  • 통계 기능을 확인하는 방법은 두 가지가 있다.
    • 하나는 메뉴에서 Collector -> Summary를 클릭하는 것
      • 원하는 시간대를 골라서 통계를 내는 방법
    • 다른 하나는 XLog에서 마우스 오른쪽 버튼을 누른 후 Summary를 클릭하는 것이다.
      • 현재 XLog에 있는 점들에 대한 통계를 내는 방법
  • SQL, API CALL, User AGENT, Exception, Alert 등이 확인 가능하다.
  • 만약 조회하고자 할 경우에는 원하는 기간을 선택한 후 GET 버튼을 누르면 된다.

Scouter 서버/에이전트 플러그인

  • 플러그인은 scouter 수집 서버에서 사용하는 서버 플러그인과 에이전트에서 사용하는 에이전트 플러그인으로 나뉜다.

서버 플러그인의 종류

  • 서버 플러그인은 수집 서버에서 설치해서 사용하는 플러그인을 의미한다.

 

  • 빌트인 플러그인
    • alert 플러그인
    • counter 플러그인
  • 주로 사용하는 것이 알림(alert) 플러그인인데, 기본적으로 제공하는 대상은 다음과 같다.
    • email
    • telegram
    • slack
    • line
    • dingtalk
  • counter 플러그인은 성능 정보들을 시계열 DB인 influxDB로 연동하여 저장하는 기능을 제공한다.
  • 스크립팅 플러그인
    • 스크립팅 플러그인은 scouter 서버의 plugin이라는 디렉터리에 만들어놓으면 자동으로 컴파일을
      하여 사용할 수 있는 상태가 된다.
  • 하단의 플로그인 종류는 모두 전처리를 담당한다.
    다시 말해 관련된 데이터가 저장되기 전에 임의로 처리할 작업이 있을 경우 이 플러그인에 지정하여 작업하면 된다.
    • agent.plug: 알림
    • counter.plug: 성능 카운터 데이터
    • object.plug: 오브젝트 정보
    • summary.plug: 성능 통계 정보
    • xlog.plug: xlog 데이터
    • xlogdb.plug: xlog 데이터 저장 직전 처리
    • xlogprofile.plug: 상세 프로파일 정보
  • 대부분의 운영 상황에서 서버의 빌트인 플러그인 중 알림 플러그인을 사용한다.
  • 그 외의 플러그인은 그다지 활용할 일이 없다고 한다.

에이전트 플러그인

  • 에이전트 플러그인은 scouter 에이전트에 지정해서 사용하는 플러그인이다.
  • 해당 시점에 메서드로 넘어온 매개변수의 값을 확인하거나, 리턴되는 값을 확인할 때 유용하다.
    • 예를 들어 어떤 특정 서버만 예외가 발생하는 경우 capture 플러그인을 사용하면,
      문제가 발생한 메서드의 매개변수나 리턴값을 확인할 수 있기 때문에
      디버깅 용도로 아주 유용하게 활용할 수 있다.
  • 스카우터에서 기본적으로 제공하는 에이전트 플러그인의 종류는 다음과 같다.
    • httpservice: WAS에 HTTP 요청이 들어오는 시점이나 나가는 시점
    • httpcall: WAS에서 외부로 HttpClient를 사용하여 호출하는 시점
    • service: 서비스의 시작, 종료 시점에 데이터 확인 (hook_service_pattern으로 설정된 대상이 여기에 속함)
    • capture: 특정 클래스의 메서드가 호출되는 시점의 데이터 확인
    • jdbcpool: DB 연결 요청 시점

HTTP Service 플러그인

  • WAS에 HTTP를 사용한 요청이 들어왔을 때의 데이터를 확인하거나
    필요한 작업을 수행할 경우 사용된다.
  • 이 플러그인을 활용하는 절차는 다음과 같다.
  1. scouter의 agent.java/plugin 디렉터리에 httpservice.plug라는 파일을 만든다.
  2. 다음과 같이 플러그인 파일을 만든다
[start]
// void start(WrContext $ctx, WrRequest $req, WrResponse $res)
[end]
// void end(WrContext $ctx, WrRequest $req, WrResponse $res)
[reject]
// boolean reject(WrContext $ctx, WrRequest $req, WrResponse $res)
return false;

   3.  다음과 같이 플러그인 파일에 코드를 추가한 후 저장한다.

[start]
// void start(WrContext $ctx, WrRequest $req, WrResponse $res)
$ctx.profile("http plugin start")
[end]
// void end(WrContext $ctx, WrRequest $req, WrResponse $res)
$ctx.profile("http plugin end")
[reject]
// boolean reject(WrContext $ctx, WrRequest $req, WrResponse $res)
return false;

   4. 모니터링하는 WAS의 URL을 호출해 보면 XLog의 프로파일링 정보에 여기에서 추가한 코드가 실행된다.

즉, 호출될 때 http plugin start가, 종료 전에 http plugin end가 프로파일링에 포함되어 있는 것을 확인할 수 있다.]

 

  • 위에서 작성한 코드를 저장하는 순간 해당 코드는 컴파일이 된다.
  • 정상적으로 컴파일이 되었는지 확인하려면 모니터링하는 WAS의 로그 파일을 확인해 보면 된다
  • 톰캣을 사용할 때에는 catalina.out 파일에 해당 내용이 출력되며, 정상적인 경우 플러그인 실행 로그가 출력된다.
  • 만약 $ctx가 아닌 다른 값을 지정할 경우 스크립트가 정상적으로 컴파일 되지 않기 때문에 error가 발생한다.

추가로 매개변수에 있는 WrContext $ctx, WrRequest $req, WrResponse $res에 대해서 살펴보자.

  • ctx는 스카우터의 프로파일링에 필요한 정보들을 얻거나 관련 정보들을 할당할 때 사용하며,
    주로 많이 사용하는 것은 profile(String) 메서드다.
    • profile메서드의 매개변수에 문자열을 지정해주면 앞서 봤듯이 프로파일링 정보에 해당 값이 저장된다.
  • req는 리퀘스트 정보, res는 리스폰스 관련 정보를 읽을 수 있다.
  • start블록에서 스크립트 처리를 잘못할 경우 운영중인 서버에 잘못된 정보가 들어갈 수 있다.
    따라서 end 블록에서 필요한 데이터를 읽어 처리할 수 있도록 하자.

scouter 사용 시 유용한 팁

수집 서버의 디스크 사용량 안전하게 관리하기

  • scouter 수집 서버를 기본값으로 사용할 경우 디스크 사용량이 80%가 될 때까지 지속해서 저장한다.
  • 따라서 저장되는 데이터를 관리하는 옵션을 알고 있으면 필요한 데이터를 잘 관리하고 보존할 수 있다.
  • 수집 서버의 설정에는 다음과 같은 값들을 지정할 수 있다.
#저장소 자동 삭제 동작여부
mgr_purge_enabled=true

#프로파일 데이터를 자동으로 지우는 디스크 사용량 %
mgr_purge_disk_usage_pct=80

#프로파일 데이터가 자동으로 지워지기 전에 유지되는 날자 수
mgr_purge_profile_keep_days=10

#xlog 점의 데이터가 자동으로 지워지기 전에 유지되는 날짜 수
mgr_purge_xlog_keep_days=30

#각종 카운터(선 그래프의 값)가 자동으로 지워지기 전에 유지되는 날짜 수
mgr_purge_counter_keep_days=70

알림 설정은 필수다

  • scouter에서의 알림은 호스트 에이전트에서 발생할 수 있고,
    수집 서버에 취합된 데이터를 바탕으로 발생시킬 수도 있다.
  • 호스트 에이전트에서는 다음과 같은 설정을 할 수 있다.

  • host agent의 conf 파일이다. 여기서 waring, fatal 비율을 설정해서 알림 조건을 지정할 수 있다.
  • 조건을 만족하면 scouter 클라이언트 창의 Alert 창에 경고가 나타난다.

  • 만약 이 알림을 사용하고 있는 메신저로 내보내고 싶다면 앞서 소개한 각종 알림 플러그인들을 활용하면 된다.
  • 호스트의 사용량 알림 외에도 운영자가 직접 서버의 특정 상황에서 알림이 발생하도록 설정할 수 있다.
  • 수집 서버를 선택하고 마우스 오른쪽 버튼을 눌러 Customizeable Alert 메뉴를 찾으면
    직접 스크립팅을 해서 알림 설정을 할 수 있다.
  • 예를 들어 GC 소요 시간이 1초를 넘어갈 때 알림을 받고 싶다면, 아래 메뉴에서 javaee:GCTime을 클릭한다.

  • 하나를 클릭한 후 나오는 창에서 스크립트를 작성하면 된다.
  • 스크립트를 작성하는 내용은 scouter 문서 페이지에 정리되어 있으니 그 문서를 참고하면 된다.
 

scouter/scouter.document/main/Alert-Plugin-Guide_kr.md at master · scouter-project/scouter

Scouter is an open source APM (Application Performance Management) tool. - scouter-project/scouter

github.com