Scouter APM(Application Performance Monitoring)을 이용한 Java 서비스 모니터링

Scouter APM(Application Performance Monitoring)을 이용한 Java 서비스 모니터링

소개

JVM 기반 WAS, OS 모니터링 시스템으로 Opensource APM(Application Performance Monitoring)입니다. APM은 응용 프로그램 성능 모니터링 또는 응용 프로그램 성능 관리를 의미합니다. Scouter는 Server(Collector), Agent, Client(Viewer)로 구성되어 있습니다.

Java 시스템에서 주로 사용하지만 Scouter 홈페이지의 설명에 따르면 다른 시스템도 모니터링 가능한것으로 보입니다.

https://github.com/scouter-project/scouter

  • Monitoring targets (from scouter agent)
    • Java Agent : Web application (on Tomcat, JBoss, Resin …), Standalone java application
    • Host Agent : Linux, Windows, Unix
  • Monitoring targets (from Telegraf support) Since @2.0.0
    • Redis, nginX, apache httpd, haproxy, Kafka, MySQL, MongoDB, RabbitMQ, ElasticSearch, Kube, Mesos …
  • Monitoring targets (from Zipkin-Scouter storage) Since @2.5.0

Server(Collector)

Scouter Agent의 성능 지표를 저장합니다. 데이터는 Scouter Client(Viewer)로 스트리밍 됩니다.

요구사항

  • JDK 1.8+

설치

Release – https://github.com/scouter-project/scouter/releases

$ wget https://github.com/scouter-project/scouter/releases/download/v2.7.1/scouter-all-2.7.1.tar.gz
$ tar xzvf scouter-all-2.7.1.tar.gz
$ cd scouter/sever

JAVA_HOME의 위치가 특정 위치로 설정되어있는 경우 startup.sh를 열고 java앞에 JAVA_HOME/bin/ 경로를 붙여줍니다.
ex) nohup $JAVA_HOME/bin/java -Xmx512m -classpath ./scouter-server-boot.jar scouter.boot.Boot ./lib > nohup.out &

실행

$ ./startup.sh
  ____                  _
 / ___|  ___ ___  _   _| |_ ___ _ __
 \___ \ / __/   \| | | | __/ _ \ '__|
  ___) | (_| (+) | |_| | ||  __/ |
 |____/ \___\___/ \__,_|\__\___|_|
 Open Source S/W Performance Monitoring
 Scouter version 2.7.1
$  ps -ef | grep scouter
  502 81608     1   0 11:47AM ttys005    0:04.48 java -Xmx512m -classpath ./scouter-server-boot.jar scouter.boot.Boot ./lib

사용 포트

$ sudo lsof -i:6100
COMMAND   PID USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
java    81608 happydaddy   99u  IPv6 0x7a820f1185cf2a2f      0t0  UDP *:synchronet-db
java    81608 happydaddy  101u  IPv6 0x7a820f1180f93157      0t0  TCP *:synchronet-db (LISTEN)

TCP 서비스 포트: 6100

스카우터 클라이언트, 에이전트와 통신하는 데 사용

UDP 수신 포트: 6100

성능 메트릭을 수집하는데 사용


Agent

성능 정보를 수집하여 Server(Collector)로 전송합니다. Host agent와 Java agent가 있으며 Host agent는 OS(Linux, Windows 및 OSX…)의 성능 메트릭을 수집합니다. Java agent는 JVM 및 WAS(웹 애플리케이션 서버. ex) Tomcat)의 프로파일 및 성능 메트릭을 수집합니다.

Host(OS) agent

요구사항

  • JDK 1.6+

설치

최신 릴리즈를 다운로드하여 압축을 풀고 config 내용을 수정한 후 실행합니다. net_collector_ip, net_collector_udp_port, net_collector_tcp_port의 주석을 풀고 net_collector_ip에는 Server(collector)의 ip를 설정합니다.

Release – https://github.com/scouter-project/scouter/releases

$ wget https://github.com/scouter-project/scouter/releases/download/v2.7.1/scouter-all-2.7.1.tar.gz
$ tar xzvf scouter-all-2.7.1.tar.gz
$ cd scouter/agent.host
$ vi conf/scouter.conf
### scouter host configruation sample
net_collector_ip=127.0.0.1
net_collector_udp_port=6100
net_collector_tcp_port=6100
#cpu_warning_pct=80
#cpu_fatal_pct=85
#cpu_check_period_ms=60000
#cpu_fatal_history=3
#cpu_alert_interval_ms=300000
#disk_warning_pct=88
#disk_fatal_pct=92

실행

$ ./host.sh
  ____                  _
 / ___|  ___ ___  _   _| |_ ___ _ __
 \___ \ / __/   \| | | | __/ _ \ '__|
  ___) | (_| (+) | |_| | ||  __/ |
 |____/ \___\___/ \__,_|\__\___|_|
 Open Source S/W Performance Monitoring
 Scouter version 2.7.1

Configure -Dscouter.config=./conf/scouter.conf
Scouter Host Agent Version 2.7.1 2020-01-04 06:36 GMT
System JRE version : 1.8.0_232
$ ps -ef | grep scouter.host
  502 82763     1   0 11:55AM ttys005    0:02.57 java -classpath ./scouter.host.jar scouter.boot.Boot ./lib

Java(JVM) agent

요구사항

  • JDK 1.6+

설치

최신 릴리즈를 다운로드하여 압축을 풀고 config 내용을 수정합니다. net_collector_ip, net_collector_udp_port, net_collector_tcp_port의 주석을 풀고 net_collector_ip에는 Server(collector)의 ip를 설정합니다. obj-name은 scouter viewer에서 보여질 서비스 이름입니다. 톰켓을 띄울 때 옵션으로도 설정 가능합니다.
-Dobj_name=spring-api

$ wget https://github.com/scouter-project/scouter/releases/download/v2.7.1/scouter-all-2.7.1.tar.gz
$ tar xzvf scouter-all-2.7.1.tar.gz
$ cd scouter/agent.java
$ vi conf/scouter.conf
### scouter java agent configuration sample
obj_name=spring-api
net_collector_ip=127.0.0.1
net_collector_udp_port=6100
net_collector_tcp_port=6100
#hook_method_patterns=sample.mybiz.*Biz.*,sample.service.*Service.*
#trace_http_client_ip_header_key=X-Forwarded-For
#profile_spring_controller_method_parameter_enabled=false
#hook_exception_class_patterns=my.exception.TypedException
#profile_fullstack_hooked_exception_enabled=true
#hook_exception_handler_method_patterns=my.AbstractAPIController.fallbackHandler,my.ApiExceptionLoggingFilter.handleNotFoundErrorResponse
#hook_exception_hanlder_exclude_class_patterns=exception.BizException

config에 사용할 수 있는 모든 옵션 정보는 아래 파일을 참고하면 됩니다.

https://github.com/scouter-project/scouter/blob/master/scouter.agent.java/src/main/java/scouter/agent/Configure.java

WAS 실행시 Agent 연동

Was 실행시 성능 메트릭을 수집하는 agent가 같이 실행되도록 설정합니다.

StandAlone Tomcat

독립적인 Tomcat을 설치하고 Java 서비스를 올리는 경우엔 Tomcat 실행 시 tomcat 실행 스크립트에 JAVA_OPTS를 설정하고 서버를 시작합니다.

${TOMCAT_DIR}/bin/catalina.sh or startup.sh

SCOUTER_AGENT_DIR=/home/ec2-user/scouter
JAVA_OPTS=" ${JAVA_OPTS} -javaagent:${SCOUTER_AGENT_DIR}/scouter.agent.jar"
JAVA_OPTS=" ${JAVA_OPTS} -Dscouter.config=${SCOUTER_AGENT_DIR}/conf/scouter.conf"
JAVA_OPTS=" ${JAVA_OPTS} -Dobj_name=spring-api"
Embedded Tomcat

내장 Was(ex. springboot)를 사용하는 경우는 아래와 같이 실행 시 scouter 정보를 옵션으로 설정하고 서버를 시작합니다.

$ java -javaagent:/home/ec2-user/scouter/scouter.agent.jar -Dscouter.config=/home/ec2-user/scouter/conf/scouter.conf -Dobj_name=spring-api -jar api-0.0.1-SNAPSHOT.jar

Client (Viewer)

RCP 기반 클라이언트 프로그램으로 Sever(collector)에 수집된 모니터링 정보를 유저가 보기 쉽게 시각화해주는 프로그램입니다.

요구사항

  • JDK 1.8+

설치

Release – https://github.com/scouter-project/scouter/releases

OS에 맞는 scouter client 다운로드

Mac(OSX) – https://github.com/scouter-project/scouter/releases/download/v2.7.1/scouter.client.product-macosx.cocoa.x86_64.tar.gz

Windows – https://github.com/scouter-project/scouter/releases/download/v2.7.1/scouter.client.product-win32.win32.x86_64.zip

실행

  • Server Address: Server(Collector)IP:6100
  • 기본 id/password – admin/admin

로그인이 완료되면 아래와 같이 기본 화면을 볼 수 있습니다. 화면이 제대로 뜨지 않는다면 메뉴 – Widow – Reset Perspective를 한번 실행해 줍니다.

기본으로 세팅되는 화면 외에도 collector 메뉴에서 항목을 추가할 수 있습니다. Linux 서버에 설치하였을 경우엔 메뉴 항목이 다르게 나올 수 있습니다.

  • OS 관련 메트릭 – Collector => OSX
  • Was 관련 메트릭 – Collector => Tomcat

실시간으로 CPU, 메모리 사용량, Heap정보, 응답시간, TPS 등을 확인할 수 있습니다. 또한 XLog를 통해 문제가 의심되는 요청 정보를 상세하게 확인 가능합니다. 아래 화면의 XLog에서 상세히 보고자 하는 요청을 드래그 하면 관련 정보를 상세히 볼수 있습니다. 빨간점으로 표시되는것은 요청시 처리가 실패한 경우입니다.

실제 서비스에 적용할 경우 XLog에 굉장히 많은 점을 확인할 수 있으며 빨간점으로 표시되거나 높은 Elapsed Time이 발생하는 요청에 대하여 확인하고 조치를 취하면 됩니다.

Scouter Object의 메뉴 확장을 통해 Performace Counter, Object Request의 주요 지표도 확인 가능합니다. Performace Counter는 시계열 성능 메트릭을 보여줍니다. 즉 시간 변화에 따른 메트릭 정보를 그래프로 볼 수 있습니다. Object Request는 원하는 시점에 특정 Object들이 어떤 정보를 가지고 있는지 확인할 때 사용합니다. 특정 시점에 문제가 있을 때 해당 시점의 Object정보를 확인하여 원인을 찾는데 사용할 수 있습니다.

메뉴를 보면 특정 시점의 Thread 덤프나 Heap Dump도 요청 가능하므로 문제 발생 시 신속하게 해당 데이터를 확인할 수 있는 편리함도 제공합니다.

Scouter에 대해서 간략히 살펴보았습니다. 설치 과정이 심플하고 추가적인 미들웨어를 요구하지 않기 때문에 부담 없이 서비스에 적용해 볼 수 있는 것이 장점입니다. 실제 서비스에서는 Scouter를 모든 서버에 설치하진 않고 서비스 그룹별로 1, 2대에만 설치해서 모니터링 합니다. 주로 작업량이 큰 배포 전 후 나 운영중 발생하는 크고 작은 장애 발생시 모니터링 용도로 많이 사용하고 있습니다.

공유