세상에 나쁜 코드는 없다

[앱프로젝트:동아리방] 개발 노트 3. 서버 모니터링을 위한 Scouter 설치 및 연동 본문

웹개발/백엔드

[앱프로젝트:동아리방] 개발 노트 3. 서버 모니터링을 위한 Scouter 설치 및 연동

Beomseok Seo 2023. 1. 12. 15:23

Scouter

Scouter는 APM(Application Performance Management) 소프트웨어로 서버의 성능을 모니터링 하기위한 도구이다.

오픈소스여서 무료로 사용할 수 있다.

Concept

Scouter Server (Collector)

모니터링할 데이터를 수집하는 서버이며, 데이터는 자체 제작된 내부 DB에 저장된다.

Scouter Agent

Scouter Agent에는 Host Agent와 Java Agent가 있다.

Host Agent : CPU, MEMORY, DISK 의 데이터를 전달한다.

Java Agent : Heaps, TPS, Response time, Service Profile 등의 데이터를 전달한다.

Scouter Client

스카우터 서버에 접속하여 수집된 정보를 확인할 수 있는 소프트웨어이다.

설치 및 구동

설치

wget https://github.com/scouter-project/scouter/releases/download/v2.15.0/scouter-all-2.15.0.tar.gz
tar -xvzf scouter-all-2.15.0.tar.gz

설정 및 구동 - Scouter Server

/scouter$ ls
agent.batch  agent.host  agent.java  agent.java_6_7  server  webapp


#server 설정파일로 이동
cd server/conf

sudo vi scouter.conf

#다음 입력
db_dir=/u01/app/scouter/server/data/
log_dir=/u01/app/scouter/server/logs/
net_udp_listen_port={SCOUTER_SERVER_PORT}
net_tcp_listen_port={SCOUTER_SERVER_PORT}

#실행
./startup.sh

#정상 실행 확인
ps ax|grep scouter-server|grep -v grep

결과

설정 및 구동- agent host

cd .../scouter/agent.host/conf

sudo vi scouter.conf

##다음 입력
net_collector_ip=127.0.0.1         # Collector의 IP, 이 서버 내에서 Scouter server를 구동중이므로 localhost 값을 넣는다.
net_collector_udp_port={SCOUTER_SERVER_PORT}     # Collector의 서버 udp port
net_collector_tcp_port={SCOUTER_SERVER_PORT}      # Collector의 서버 tcp port

#CPU
cpu_warning_pct=80                # CPU 경고 임계치
cpu_fatal_pct=85                     # CPU 에러 임계치
cpu_check_period_ms=60000     # CPU 감시 주기 (ms)
cpu_fatal_history=3                  # CPU 알림 누적 카운트
cpu_alert_interval_ms=300000    # CPU 알림 주기 (ms)

#Memory
mem_alert_enabled=true
mem_warning_pct=90
mem_falat_pct=90

#Disk
disk_warning_pct=88                # CPU 경고 임계치 (%)
disk_fatal_pct=92                     # CPU 에러 임계치 (%)





## 구동
./host.sh

##정상 실행 확인
ps ax|grep scouter.host|grep -v grep

설정 및 구동 - agent.java

cd .../scouter/agent.java/conf
sudo vi scouter.conf

##다음 입력
## Agent Name
obj_name=dongaribang-dev
## Scouter APM Address
net_collector_ip=127.0.0.1
net_collector_udp_port={SCOUTER_SERVER_PORT} 
net_collector_tcp_port={SCOUTER_SERVER_PORT} 

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


## agent.java 구동의 경우 WAS 가 작동되면서 실행된다.

Tomcat 설정

SpringBoot 에서는 내장 Tomcat을 사용하기 때문에 별도의 파일이 없어서, 빌드시 embedded Tomcat에 scouter 와 연동될 수 있는 속성을 넣어줘야한다.

java -javaagent: {path}/scouter/agent.java/scouter.agent.jar \
-Dscouter.config={path}/scouter/agent.java/conf/scouter.conf \
-Dobj_name=dongaribang-dev \
-jar 실행파일.jar

그러나 java.netUnknownHostException:127.0.0.1 이 발생하여서 WAS 는 모니터링이 되지 않았다.

포트도 열려있는지 확인하고, localhost DNS 설정이 잘 되어있는지도 확인하고 했는데 3시간동안 디버깅한 결과는 java에서 설정파일을 읽을 때 ip 주소 옆에 있는 주석도 같이 읽어서 발생한 문제였다.. 주석을 제거해주니 Scouter Client 에서 OS 정보와 WAS 정보를 둘 다 확인할 수 있게 되었다.


Uploaded by N2T