728x90
기존에 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기가도 부족한 것 같다, 매우 불안정..)
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 다운..?
언제나 잘못된 설명이나 부족한 부분에 대한 피드백은 환영입니다🤍
728x90