Scouter 란?
사내에서 사용할 APM(Application Performance Management) 애플리케이션 성능 관리 도구를 사용하기 위해 찾아보다가 LG CNS에서 개발한 오픈소스 APM Scouter에 대해 검증해 보기로 했다.
Scouter는 주로 Java 기반의 웹 애플리케이션을 모니터링하는 데 강점을 가지고 있지만, 다른 시스템 및 언어와도 통합할 수 있다고 한다.
Scouter의 구성은 Collertor 서버가 Agent를 통해서 각 클라이언트의 정보를 수집하는 방식이다.
Scouter 설치
환경 정보
- OS : Linux
- Scouter 버전 : 2.15.0
사전 준비
버전에 맞는 scouterl 패키지를 다운로드하고 압축을 해제합니다.
# scouter-all 릴리즈 다운로드
wget https://github.com/scouter-project/scouter/releases/download/v2.20.0/scouter-all-2.15.0.tar.gz
tar -xvf scouter-all-2.15.0.tar.gz
# 압축 해제
tar -xvf scouter-all-2.15.0.tar.gz
# 폴더 구조 확인
~/apm/scouter-all-2.15.0# tree -L 1
.
├── agent.batch
├── agent.host
├── agent.java
├── agent.java_6_7
├── nohup.out
├── server
└── webapp
서버 구성( collector )
server 디렉터리까지 이동하여 startup.sh 파일을 실행합니다.
# server 디렉토리 이동
cd scouter-all-2.15.0/server
# 서버 기동
./startup.sh
agent.host 구성
agent.host 또한 실행합니다.
# 디렉토리 이동
cd agent.host/
# host 기동
./host.sh
Java(JVM) Agent 구성
외장 Tomcat 사용 시
- ${TOMCAT_HOST}/bin/catalina.sh or startup.sh 파일 설정
SCOUTER_AGENT_DIR=/home/ec2-user/scouter/agent.java
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=TEST-WAS-01"
임베디드 Tomcat 사용 시
# 기본
java -javaagent:/root/spjang/scouter/agent.java/scouter.agent.jar \
-Dscouter.config=/root/spjang/scouter/agent.java/conf/scouter.conf \
-Dobj_name=TEST-API-01 \
-jar spring-boot-0.0.1-SNAPSHOT.jar
# 서버 포트 변경
java -javaagent:/root/spjang/scouter/agent.java/scouter.agent.jar \
-Dscouter.config=/root/spjang/scouter/agent.java/conf/scouter.conf \
-Dobj_name=TEST-API-02 \
-jar spring-boot-2-hello-world-1.0.2-SNAPSHOT.jar --server.port=8083
Collector(server)가 원격일 경우, net_collector_ip : 원격 대상 IP 설정
vi /root/spjang/scouter/agent.java/conf/scouter.conf
### scouter java agent configuration sample
#obj_name=WAS-01
net_collector_ip=172.10.40.173
#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
Dockerfile에 agent 설정
FROM openjdk:11-jre-slim
# 애플리케이션 JAR 파일과 에이전트 JAR 파일을 복사합니다.
COPY spring-boot-2-hello-world-1.0.2-SNAPSHOT.jar /app/spring-boot-2-hello-world-1.0.2-SNAPSHOT.jar
COPY scouter.agent.jar /app/scouter.agent.jar
COPY scouter.conf /app/scouter.conf
# -javaagent 옵션을 추가하여 애플리케이션을 실행합니다.
ENTRYPOINT ["java", "-javaagent:/app/scouter.agent.jar","-Dscouter.config=/app/scouter.conf", "-Dobj_name=TEST-DOCKER-APP1", "-jar", "/app/spring-boot-2-hello-world-1.0.2-SNAPSHOT.jar"]
아래는 3가지 agent 설정 방식으로 등록한 타겟 서버이다. 도커 컨테이너의 애플리케이션의 경우 컨테이너 ID가 기본 명칭으로 등록되는 것으로 보인다.
Scouter-Paper
SCOUTER PAPER 프로젝트는 오픈 소스 APM인 SCOUTER WEB API를 활용하여, 성능 데이터를 웹을 통해 확인할 수 있도록 제공하는 대시보드 소프트웨어이다.
아래와 같이 클라이언트 프로그램(Dmg, Exe)도 지원하지만, 서버에서 WebUI를 동작시키기 위해 Scouter Paper를 사용해 보기로 했다.
00. 사전 준비
- scouter-server : 2.15.0
- scouter-paper : v.2.6.4
! 주의 : scouter-paper 웹 페이지에서 404 Not Found Error 발생 시,
Scouter Server와 Paper 간, 버전 차이로 인해 에러 발생(사용 라이브러리 충돌) -> 호환되는 버전 설치 필요!
독립형(Standalone) : scouter-server에 webapp에 임베디드로 설치할 수 있지만, 독립형을 추천
( 필자의 경우 scouter에서 2.20(latest) 버전으로 설치 시, scouter-paper가 동작하지 않아 2.15.0 버전까지 다운 그레이드함)
01. scouter-paper release 설치
# 릴리즈 설치
wget https://github.com/scouter-contrib/scouter-paper/releases/download/2.6.4/scouter-paper-v2.6.4.zip
# 압축 해제
unzip scouter-paper-v2.6.4.zip -d scouter-paper
scouter-paper/
├── asset-manifest.json
├── css
├── favicon.ico
├── help
├── index.html
├── js
├── manifest.json
├── service-worker.js
└── static
02. scouter-server 설정
- scouter.conf 수정
# scouter-all 폴더 구조 파악
root@tps-harbor:~/apm/scouter-all-2.15.0# tree -L 1
.
├── agent.batch
├── agent.host
├── agent.java
├── agent.java_6_7
├── nohup.out
├── server
└── webapp
## scouter.conf 파일 수정
vi server/conf/scouter.conf
net_http_server_enabled=true
net_http_api_enabled=true
net_http_port=6180
03. scouter-paper 파일 복사
- scouter-paper webapp파일 복사
# 기존 webapp/extweb 파일 확인
ls scouter-all-2.15.0/webapp/extweb/
index.html
# scouter-paper 파일 복사
cp -a scouter-paper/* scouter-all-2.15.0/webapp/extweb/
# 파일 확인
ls -l scouter-all-2.15.0/webapp/extweb
total 152
-rw-rw-r-- 1 root root 3749 May 17 2020 asset-manifest.json
drwxrwxr-x 2 root root 4096 May 17 2020 css
-rw-rw-r-- 1 root root 118026 May 17 2020 favicon.ico
drwxrwxr-x 4 root root 4096 May 17 2020 help
-rw-rw-r-- 1 root root 1572 May 17 2020 index.html
drwxrwxr-x 2 root root 4096 May 17 2020 js
-rw-rw-r-- 1 root root 317 May 17 2020 manifest.json
-rw-rw-r-- 1 root root 6644 May 17 2020 service-worker.js
drwxrwxr-x 5 root root 4096 May 17 2020 static
04. scouter server, webapp 재기동
# server 디렉토리 이동
cd scouter-all-2.15.0/server
# 서버 기동
./startup.sh
# webapp 디렉토리 이동
cd scouter-all-2.15.0/webapp
# webapp 기동
./startup.sh
05. 정상 동작 확인
실행 중인 포트 확인
netstat -nltp
Active Internet connections (only servers)
...
tcp6 0 0 :::6180 :::* LISTEN 2803382/java
tcp6 0 0 127.0.0.1:8005 :::* LISTEN 2842996/java
tcp6 0 0 :::8009 :::* LISTEN 2842996/java
tcp6 0 0 :::6188 :::* LISTEN 2803588/java
tcp6 0 0 :::8080 :::* LISTEN 2842996/java
tcp6 0 0 :::80 :::* LISTEN 2989360/docker-prox
tcp6 0 0 :::6100 :::* LISTEN 2803382/java
tcp6 0 0 :::22 :::* LISTEN 706/sshd: /usr/sbin
paper web api 확인
- curl localhost:6180/scouter/v1/info/server |jq.
Web UI 확인
WebUI 간단 사용방법
authentication 인증 비활성화 처리
: 로그인이 없어도 사용할 수 있도록 인증 비활성화 처리.
1. settings > edit > authentication > N/A 처리
2. settings > authentication > apply
Select Target Objects 설정
: 수집할 타깃 대상을 설정
1. 좌측 내비게이션 바 > Select Target Objects > 타깃 아이콘 클릭
2. 수집할 대상을 클릭하고 Apply 버튼 클릭
3. 타겟 대상 확인
Paper 설정
: 수집할 모니터링 대시보드의 가장 작은 단위를 Paper라고 칭하는 것 같음 = 그라파나 모니터
자유롭게 드래그 앤 드롭 방식으로 다양한 종류의 paper를 지원함
1. paper 추가 : scouter 내비게이션 바 > Paper Config > Add Paper
2. 메트릭 선택 : Drag metirc : 원하는 metric 선택 후 paper 화면으로 드래그 앤 드롭
수집 샘플 화면
1. Paper
2. XLog
3. Active Service
다음은 Jmeter를 사용해서 애플리케이션에 과부화를 유도하여 Web UI에서 메트릭 정보를 보여주는 화면이다.
'Infrastructure' 카테고리의 다른 글
Harbor Replications을 활용하여 이미지 레지스트리 간 미러링하기 (0) | 2024.01.06 |
---|