본 게시글은 이상민 저자의 자바 트러블슈팅 책을 읽고 공부한 내용을 정리한 글이다.
XLog 사용법 - 필터링
- 원통형 아이콘부터 쌍안경 아이콘까지가 전부 필터링을 위한 메뉴이다.
- SQL Filter: SQL 쿼리에서 수행된 시간만을 보기 위한 필터
- 이 메뉴를 누르면 전체 응답시간의 산점도가 SQL 시간만을 나타내는 산점도로 바뀐다.
- API Filter: API 호출 시간만을 보기 위한 필터
- 이 메뉴를 누르면 API 호출 시간이 나오는데, 대체로 API 호출 시간이 높아 지연의 주요 요인인 걸 파악할 수 있다.
- Error Filter: Error가 발생한 것만을 보기위한 필터
- 빨간 예외 점들만 확인할 수 있다.
- 검색: 특정 URL이나 화면을 찾기 위한 메뉴
- SQL Filter: SQL 쿼리에서 수행된 시간만을 보기 위한 필터
- 쌍안경을 누르면 위의 화면이 나타난다.
- Object: 인스턴스 구분
- Service: URL 구분 (* 사용이 가능하다) EX) /api/v1/*
- IP: 특정 IP에서 요청된 것을 검색하고자 함
XLog 사용법 - 과거 데이터 불러오기
- 히스토리 제공 기능이 존재한다.
- Xlog에서 마우스 오른쪽 키를 눌러보면 Load History라는 메뉴를 발견할 수 있다.
- 여기서 원하는 날짜와 시간을 입력하면 된다.
- 단, 너무 긴 시간을 입력하고 요청을 표시하는 점의 개수가 많아질 경우 클라이언트가 메모리 부족으로 사망할 수 있다.
- 전체 디스크 용량의 80%가 넘는 경우에는 자동으로 오래된 데이터가 삭제된다는 점을 기억하자
통계 기능
- 통계 기능을 확인하는 방법은 두 가지가 있다.
- 하나는 메뉴에서 Collector -> Summary를 클릭하는 것
- 원하는 시간대를 골라서 통계를 내는 방법
- 다른 하나는 XLog에서 마우스 오른쪽 버튼을 누른 후 Summary를 클릭하는 것이다.
- 현재 XLog에 있는 점들에 대한 통계를 내는 방법
- 하나는 메뉴에서 Collector -> Summary를 클릭하는 것
- SQL, API CALL, User AGENT, Exception, Alert 등이 확인 가능하다.
- 만약 조회하고자 할 경우에는 원하는 기간을 선택한 후 GET 버튼을 누르면 된다.
Scouter 서버/에이전트 플러그인
- 플러그인은 scouter 수집 서버에서 사용하는 서버 플러그인과 에이전트에서 사용하는 에이전트 플러그인으로 나뉜다.
서버 플러그인의 종류
- 서버 플러그인은 수집 서버에서 설치해서 사용하는 플러그인을 의미한다.
- 빌트인 플러그인
- alert 플러그인
- counter 플러그인
- 주로 사용하는 것이 알림(alert) 플러그인인데, 기본적으로 제공하는 대상은 다음과 같다.
- telegram
- slack
- line
- dingtalk
- counter 플러그인은 성능 정보들을 시계열 DB인 influxDB로 연동하여 저장하는 기능을 제공한다.
- 스크립팅 플러그인
- 스크립팅 플러그인은 scouter 서버의 plugin이라는 디렉터리에 만들어놓으면 자동으로 컴파일을
하여 사용할 수 있는 상태가 된다.
- 스크립팅 플러그인은 scouter 서버의 plugin이라는 디렉터리에 만들어놓으면 자동으로 컴파일을
- 하단의 플로그인 종류는 모두 전처리를 담당한다.
다시 말해 관련된 데이터가 저장되기 전에 임의로 처리할 작업이 있을 경우 이 플러그인에 지정하여 작업하면 된다.- agent.plug: 알림
- counter.plug: 성능 카운터 데이터
- object.plug: 오브젝트 정보
- summary.plug: 성능 통계 정보
- xlog.plug: xlog 데이터
- xlogdb.plug: xlog 데이터 저장 직전 처리
- xlogprofile.plug: 상세 프로파일 정보
- 대부분의 운영 상황에서 서버의 빌트인 플러그인 중 알림 플러그인을 사용한다.
- 그 외의 플러그인은 그다지 활용할 일이 없다고 한다.
에이전트 플러그인
- 에이전트 플러그인은 scouter 에이전트에 지정해서 사용하는 플러그인이다.
- 해당 시점에 메서드로 넘어온 매개변수의 값을 확인하거나, 리턴되는 값을 확인할 때 유용하다.
- 예를 들어 어떤 특정 서버만 예외가 발생하는 경우 capture 플러그인을 사용하면,
문제가 발생한 메서드의 매개변수나 리턴값을 확인할 수 있기 때문에
디버깅 용도로 아주 유용하게 활용할 수 있다.
- 예를 들어 어떤 특정 서버만 예외가 발생하는 경우 capture 플러그인을 사용하면,
- 스카우터에서 기본적으로 제공하는 에이전트 플러그인의 종류는 다음과 같다.
- httpservice: WAS에 HTTP 요청이 들어오는 시점이나 나가는 시점
- httpcall: WAS에서 외부로 HttpClient를 사용하여 호출하는 시점
- service: 서비스의 시작, 종료 시점에 데이터 확인 (hook_service_pattern으로 설정된 대상이 여기에 속함)
- capture: 특정 클래스의 메서드가 호출되는 시점의 데이터 확인
- jdbcpool: DB 연결 요청 시점
HTTP Service 플러그인
- WAS에 HTTP를 사용한 요청이 들어왔을 때의 데이터를 확인하거나
필요한 작업을 수행할 경우 사용된다. - 이 플러그인을 활용하는 절차는 다음과 같다.
- scouter의 agent.java/plugin 디렉터리에 httpservice.plug라는 파일을 만든다.
- 다음과 같이 플러그인 파일을 만든다
[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
'APM > Scouter' 카테고리의 다른 글
[자바 트러블슈팅 공부] Scouter 그래프 보는 법 및 Xlog 보는 방법 (1) | 2024.12.31 |
---|---|
[자바 트러블슈팅 공부] 각종 메뉴와 필수 그래프 항목 (2) | 2024.12.27 |
[자바 트러블슈팅 공부] scouter와 SpringBoot 연동 ( + 파일들의 역할) (0) | 2024.12.24 |
[자바 트러블슈팅 공부] APM이란?, 스카우터 기본 세팅 (1) | 2024.12.19 |