DevOps

1. 서비스에 APM을 적용해보자 - APM선택과 설치

dev.yong 2021. 1. 3. 13:56

오픈소스 APM중 하나인 Scouter

서비스를 운영함에 있어 APM의 활용은 많은 이점을 줌으로 선택이 아닌 필수다.

문제가 발생했을 때 빠르게 찾을 수 있고 어플리케이션 성능을 모니터링 하면서 추후 문제가 될 부분에 대해 튜닝을 하며 서비스를 안정적으로 운영할 수 있게 도와준다.

도입이유

  • 서비스에 문제가 발생하거나 비효율적으로 서비스가 운영되고 있을 때 서버로그를 뒤적거리면서 문제점을 찾기에는 너무나 많은 시간이 소요되고 찾기도 힘들다.
  • APM을 사용하면 문제점을 빠르게 탐지할 수 있다.

APM에 대해 간단하게 개념정리를 하자면

APM (Application Performance Management)

  • 말 그대로 어플리케이션의 성능 관리 서비스이다.
  • 미들웨어(톰캣, 제이보스 등)에서 일어나는 트랜잭션을 분석하여 성능에 영향을 미치는 부분을 탐지한다.
  • 서비스에 문제가 발생하거나 비효율적으로 서비스가 운영되고 있을 때 서버로그를 뒤적거리면서 문제점을 찾기에는 너무나 많은 시간이 소요되고 찾기도 힘들다.
  • APM을 사용하면 문제점을 빠르게 탐지할 수 있다.

의사결정

APM의 종류는 너무나 다양하다. 사용자의 요구사항과 서비스에 맞는 적절한 APM을 선택하여 적용해야한다.

요구사항

  • 비용 이슈가 없어야한다.(무료)
  • 구글에 관련 가이드나 문서가 많으면 좋겠다.
  • 문제발생 시 알림 메세지 설정할 수 있는 플러그인이 다양해야한다.

선택지

의사결정

핀포인트는 웹UI를 제공하기에 클라이언트를 설치하지 않고 모바일 기기에서도 사용할 수 있는 장점이 있어 고민을 많이 했지만 스카우터를 선택했다.(스카우터도 웹UI플러그인을 제공하지만 설치형만큼 기능제공을 해주지는 않는다.) 이유는,

  • 사용경험이 있다.
  • 핀포인트에 비해 더 많은 가이드문서가 있다.
  • 슬랙으로 알림을 보낼 수 있고 가이드도 많다. (핀포인트도 가능한것으로 보이지만 문서를 찾지 못했다.)
  • 핀포인트에 비해 필터기능이 다양하다. (아이피, 서비스 등 필터링을 할 수 있다.)

준비

스카우터의 아키텍쳐는 다음과 같다.

모듈 설명
Server(Collector) 에이전트가 전송한 데이터를 처리/수집한다.
Host Agent OS의 CPU, Memory, Disk 등의 정보를 전송한다.
Java Agent 실시간 서비스 성능 정보와 Heap Memory, Thread 등의 Java 성능정보를 전송한다.
Client(Viewer) 수집된 정보를 확인할 수 있는 클라이언트 프로그램이다.

 

작업

네트워크 설정

스카우터는 기본으로 6100포트를 사용한다. 외부 또는 서버간 6100포트에 접근할 수 있도록 네트워크 정책을 설정해줬다.

네이버 클라우드 플랫폼 서버를 사용하고 있기 때문에 아래 이미지와 같이 포트를 오픈해주었다.

네이버 클라우드 플랫폼 ACG설정 화면 캡쳐

서버에 스카우터 설치 및 설정

1. 스카우터 Github에서 다운로드 경로를 얻어 최신 파일을 설치했다.

$ wget https://github.com/scouter-project/scouter/releases/download/v2.10.2/scouter-all-2.10.2.tar.gz

2. 압축해제

$ tar -zxvf scouter-all-2.10.2.tar.gz

압축 해제한 폴더를 확인하면 다음과 같은 구성을 확인할 수 있다.

  • batch : 독립실행용
  • host : OS 데이터 수집
  • java : WAS데이터 수집
  • server : 스카우터 실행

3. 환경설정

설정은 스카우터 설정, 톰캣 설정 두 가지이며 스카우터 설정은 생략해도 문제없다.

 

스카우터 설정 - host, java

host, java의 설정은 아무것도 하지 않으면 기본설정으로 세팅된다.

# host 설정
$ cd /스카우터설치경로/agent.host/conf
$ vi scouter.conf
# java설정
$ cd /스카우터설치경로/agent.java/conf
$ vi scouter.conf

  • net_collector_ip : 수집 서버의 ip. collector
  • net_collector_udp_port : collector의 udp통신 포트(기본포트 : 6100)
  • net_collector_tcp_port : collector의 tcp통신 포트(기본포트 : 6100

Tomcat 설정

서비스가 구동되고 있는 Tomcat서버에 설정을 해준다.

setenv.sh파일이 있을 경우에는 setenv.sh파일에 설정을 해도 되고 setenv.sh파일을 설정하지 않았다면, catalina.sh파일에 설정값을 넣어준다.

# setenv.sh 설정
$ cd /tomcat서비스경로/bin
$ vi setenv.sh

export SCOUTER_DIR=/스카우터 설치경로/scouter
JAVA_OPTS="${JAVA_OPTS} -javaagent:${SCOUTER_DIR}/agent.java/scouter.agent.jar"
JAVA_OPTS="${JAVA_OPTS} -Dscouter.config=${SCOUTER_DIIR}/agent.host/conf/scouter.conf"

 

스카우터 서버 실행

모든 설정을 마친 후 스카우터를 실행한다.

# 스카우터 서버 실행
$ sh /스카우터설치경로/scouter/server/startup.sh

 

서비스중인 톰캣 재시작

서비스의 데이터를 수집하기 위해 톰캣을 재시작한다.

# tomcat 재시작
$ sh /tomcat설치경로/bin/shutdown.sh
$ sh /tomcat설치경로/bin/startup.sh

스카우터 클라이언트

설치

수집된 정보를 화면으로 확인하기 위해서는 스카우터 클라이언트 프로그램을 설치해야한다.

스카우터 깃헙에 접속하여 사용자의 OS에 맞는 파일을 다운로드 받아 설치한다.

클라이언트 실행 및 기본설정

설치를 완료했다면 압축을 해제하고 실행하게 되면 아래와 같은 창이 나온다.

  • server Address : 스카우터를 설치한 서버 아이피와 포트(127.0.0.1:6100)
  • ID : 초기에는 admin으로 설정되어있다.
  • Password : 패스워드 또한 아이디와 동일하게 기본값으로 admin으로 설정되어있다.

 

로그인을 하면 다음과 같은 분석화면이 실행되고 서버목록, OS상태, 서버의 트랜잭션을 수집한 정보등을 볼 수 있다.

이렇게 스카우터의 가장 기본적인 세팅을 했다. 하지만 저 클라이언트 화면을 수시로 보고있을 수는 없음으로 다음과 같은 추가작업을 할 예정이며 작업이 완료되면 다음 포스팅 때 아래 내용을 다뤄보고자 한다.

 

  • 서버 오류 문제 발생 시 슬랙메세지 전송 처리
  • 서버의 CPU및 메모리 상태를 체크하여 문제수위에 도달하면 슬랙 메세지 전송 처리
  • 로그 보유 일자 설정하기

 

# 스카우터 슬랙 플러그인 적용하기