경험/기술

[APM] 모니터링 도구 Pinpoint 도입

호야_ 2024. 1. 17. 15:46
728x90

APM

기존에 CI/CD를 구성하며 올려줬던 WAS에 분산 환경 APM 도구이며 네이버에서 만든 pinpoint를 도입하며 겪었던 경험을 공유하고자 한다.

  • Spring Boot: 3.0.11
  • java: 17
  • WAS EC2: t4g.small (vCPU: 2, RAM: 2) (AMI: Amazon Linux 2 AMI (HVM))
  • APM EC2: t4g.small (vCPU:2, RAM: 2) (AMI: Amazon Linux 2 AMI (HVM))
더보기

처음에는 APM EC2는 t2.micro로 구성했는데 RAM 1기가 이상을 사용해서 바로 터져버려서 t4g.small로 업그레이드.. 😅 (2기가도 부족한 것 같다, 매우 불안정..)

아무 요청도 없고 실행만 시켜둔 상태
테스트로 health-check만 4-5번 정도 보냈을 때..

 

APM EC2 구성

  • AMI: Amazon Linux 2 AMI (HVM)를 선택
  • t4g.small을 사용하기 위해서 아키텍처는 64비트(Arm) 선택
  • 키 페어는 새 키 페어를 생성하거나 기존에 있는 것을 사용 (생성하는 것을 추천)
  • SSH 접속은 보안을 위해 내 IP로 설정
  • 스토리지는 프리티어가 30GB까지 지원하기 때문에 최대로 설정
  • 나머지는 전부 기본값으로 설정

EC2의 보안 > 인바운드 규칙에서 9991 ~ 9993까지는 필수로 포함!

Agent가 Collector로 로그 전송을 할 때 사용하는 tcp 포트가 9991 ~ 9993까지가 기본값으로 되어있다.

 

Java 8 설치

sudo yum install java-1.8.0-openjdk -y
sudo yum install java-1.8.0-openjdk-devel -y

환경변수 설정
readlink -f /usr/bin/java

sudo vi /etc/profile

# 맨 아래에 추가
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.392.b08-2.amzn2.0.1.aarch64 # 이 부분이 다를 수도 있음
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=$JAVA_HOME/jre/lib:$JAVA_HOME/lib/tools.jar

적용
source /etc/profile

확인
echo $JAVA_HOME

 

Hbase 설치

wget https://archive.apache.org/dist/hbase/1.2.7/hbase-1.2.7-bin.tar.gz

tar xzvf hbase-1.2.7-bin.tar.gz

vi /home/ec2-user/hbase-1.2.7/conf/hbase-env.sh

# 이 옵션을 주석처리 하지 않으면 hbase 실행시 warning 이 뜸
# 사진과 같이 JAVA_HOME 설정 후 전부 다 주석처리
# export HBASE_MASTER_OPTS="$HBASE_MASTER_OPTS -XX:PermSize=128m -XX:MaxPermSize=128m ..."
# export HBASE_REGIONSERVER_OPTS="$HBASE_REGIONSERVER_OPTS -XX:PermSize=128m -XX:MaxPermSize=128m ..."

# 매번 hbase-1.2.7 를 입력하기 번거로우니 해당 디렉토리에 link를 걸어서 hbase로 사용
ln -s hbase-1.2.7 hbase

# hbase 시작
hbase/bin/start-hbase.sh

 

Pinpoint Agent에서 받은 데이터들을 담을 테이블 생성

# 스크립트 다운
wget https://raw.githubusercontent.com/pinpoint-apm/pinpoint/master/hbase/scripts/hbase-create.hbase

# 스크립트 실행
hbase/bin/hbase shell ../hbase-create.hbase

 

Java 11 설치

WAS에서 자바 17을 사용하고 있어서 Agent는 2.5.1을 사용할 것이고, 2.5.X부터는 자바 11을 최소 요구사항으로 가지고 있어서 자바 11도 설치를 해야 한다.

# 둘 중 하나 사용
sudo yum install java-11-amazon-corretto
sudo yum install java-11-amazon-corretto-headless # headless 버전으로 설치하면 GUI 연관 런타임 종속성을 생략하기 때문에 좀 더 가벼운 듯 하다.

# 설치 확인
java -version

# 자바 8을 먼저 설치해서 java 1.8이라고 나올 것이다. 그래서 대표 버전을 변경해준다.
# 참고: Hbase에는 절대 경로로 설정했기 때문에 상관없음
sudo alternatives --config java

 

Collector 설치

# 설치
wget https://github.com/pinpoint-apm/pinpoint/releases/download/v2.5.1/pinpoint-collector-boot-2.5.1.jar

# 실행권한 부여
chmod +x pinpoint-collector-boot-2.5.1.jar

# 실행
nohup java -jar -Dpinpoint.zookeeper.address=localhost pinpoint-collector-boot-2.5.1.jar >/dev/null 2>&1 &

 

Web 설치

# 설치
wget https://github.com/pinpoint-apm/pinpoint/releases/download/v2.5.1/pinpoint-web-boot-2.5.1.jar

# 실행권한 부여
chmod +x pinpoint-web-boot-2.5.1.jar

# 실행
nohup java -jar -Dpinpoint.zookeeper.address=localhost pinpoint-web-boot-2.5.1.jar >/dev/null 2>&1 &

 

WAS EC2 구성

기존에 WAS 서버가 있다고 가정하고 구성해보려고 한다. 기존에 운영 중인 서버가 없는데 모니터링부터 구성한다면 굳이? 우선 애플리케이션부터 개발하고 모니터링을 구성하는 것을 추천한다!

 

Agent 설치

# agent 설치
wget https://github.com/pinpoint-apm/pinpoint/releases/download/v2.5.1/pinpoint-agent-2.5.1.tar.gz

# 압축 해제
tar xvzf pinpoint-agent-2.5.1.tar.gz

# 이동
cd pinpoint-agent-2.5.1

# config 파일 수정
sudo vi pinpoint-root.config

# 127.0.0.1 로 되어있을 텐데, 앞서 구성한 APM EC2의 ip로 수정해줍니다.
# 같은 vpc로 구성했을 것이기 때문에 프라이빗 IP 주소로 해야한다.
profiler.transport.grpc.collector.ip=xxx.xx.x.xxx

 

기존 JAR 실행시키는 부분 수정

echo "> $JAR_NAME 실행"
nohup java -jar -Dserver.port=${TARGET_PORT} -Dspring.profiles.active=prod $JAR_NAME > $LOG_FILE 2>&1 &

# 수정 후
echo "> $JAR_NAME 실행"
nohup java -javaagent:$PINPOINT/pinpoint-agent-2.5.1/pinpoint-bootstrap-2.5.1.jar \
-Dpinpoint.agentId=luckkids01 \	# 수정 가능
-Dpinpoint.applicationName=luckkidsServerApp \	# 수정 가능
-Dpinpoint.config=$PINPOINT/pinpoint-agent-2.5.1/pinpoint-root.config \
-Dserver.port=${TARGET_PORT} \
-Dspring.profiles.active=prod \
-jar $JAR_NAME > $LOG_FILE 2>&1 &

 

Pinpoint Web 확인

APM EC2에서 보안 > 인바운드 설정에서 8080 포트를 열어준 뒤 `퍼블릭 IP:8080`로 들어가게 되면 

이렇게 요청이 잘 온 것을 확인할 수 있다.

 

핀포인트 구성 중 이슈 정리

  • 핀포인트가 안 들어가지거나 연결이 안 됨
  • `REAL TIME > Active Request` ERROR로 뜸
  • 메모리 부족
  • HBASE 다운..?
 

[APM] Pinpoint 구성 중 이슈 정리

핀포인트 웹에 안 들어가지거나 연결이 안 됨 ps -ef | grep java# 시스템에서 실행 중인 모든 프로세스 중에서 "java"라는 문자열을 포함하는 프로세스들의 정보를 보여주는 데 사용 나의 이슈는 hbase

mingeonho1.tistory.com

 

 

 

언제나 잘못된 설명이나 부족한 부분에 대한 피드백은 환영입니다🤍

728x90