Pinpoint 설치하기

Denia·2024년 3월 3일
0

TroubleShooting

목록 보기
22/25
post-thumbnail

최근에 제가 올린 블로그 글을 보시면, 개인 프로젝트의 모니터링을 프로메테우스랑 그라파나로 진행하고 있다고 했었습니다.

서버의 전반적인 시스템 지표에 대해서는 프로메테우스랑 그라파나로 확인이 되지만, 조금 더 세부적인 성능 측정 (서버에 대한 request 중 어떤 request가 느린지, 어떤 부분에서 병목이 발생하는지 등등 ..)을 하기 위해서는 추가적으로 APM이 필요하다고 생각했습니다.

무료이면서, 소스코드를 수정하지 않고도 성능 측정이 가능한 Pinpoint를 설치하는 과정을 기록해보겠습니다.


설치

pinpoint2.5.3 버전을 사용할 예정이고, HBase1.2.7 버전을 사용할 예정입니다.

  • Application 서버에는 agent를 설치
  • Monitoring 서버에는 collector, web, Hbase를 설치

HBASE 설치하기

1. Hbase 다운로드 (1.2.7 버전)

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

2. Java 11 버전, 8버전 설치

# java 버전 확인
java -version
    
# java 11버전 설치
sudo dnf install -y jdk-11-headless.x86_64
    
# java 8버전 설치
sudo dnf install -y jdk-1.8-headless.x86_64
    
# (Optional) Java 버전이 잘못지정되어 있다면, 해당 명령어로 version을 수정합니다.
# 필요한 버전에 해당하는 번호를 입력하고 enter를 치시면 변경 완료
sudo alternatives --config java
    
# java 버전 확인
java -version

3. HBase 의 설정에서 JAVA_HOME 설정하기.

# HBase 설정 파일 열기
vi ${설치 경로}/hbase-1.2.7/conf/hbase-env.sh

# 아래 내용이 있는 곳을 찾아서 JAVA_HOME = 설정하기

# The java implementation to use.  Java 1.7+ required.
export JAVA_HOME=/usr/lib/jvm/jdk-1.8-oracle-x64/

# warining이 뜨지 않게, export 되어 있는 두 옵션을 주석처리

# Configure PermSize. Only needed in JDK7. You can safely remove it for JDK8+
#export HBASE_MASTER_OPTS="$HBASE_MASTER_OPTS -XX:PermSize=128m -XX:MaxPermSize=128m -XX:ReservedCodeCacheSize=256m"
#export HBASE_REGIONSERVER_OPTS="$HBASE_REGIONSERVER_OPTS -XX:PermSize=128m -XX:MaxPermSize=128m -XX:ReservedCodeCacheSize=256m"

4. hbase 시작

# 해당 명령어를 통해 hbase 시작하기
hbase-1.2.7/bin/start-hbase.sh

5. hbase-create.hbase를 다운받은 후, hbase를 통해 실행시켜주면 필요한 Hbase의 Table들을 만들 수 있다.


# hbase-create.hbase 다운받기 
wget https://raw.githubusercontent.com/pinpoint-apm/pinpoint/master/hbase/scripts/hbase-create.hbase

# hbase-1.2.7/bin 에 있는 hbase를 통해서 shell 실행시키기
# 예시) hbase-1.2.7/bin/hbase shell ~/hbase-create.hbase
hbase-1.2.7/bin/hbase shell ${hbase-create.hbase 다운 경로 지정}

6. 해당 Log가 뜨면서, 테이블이 정상적으로 만들어진 것을 확인이 가능하다.

0 row(s) in 2.8130 seconds

0 row(s) in 18.9210 seconds

0 row(s) in 8.7840 seconds

0 row(s) in 1.3800 seconds

0 row(s) in 1.3300 seconds

0 row(s) in 1.3660 seconds

0 row(s) in 2.3950 seconds

0 row(s) in 2.3150 seconds

0 row(s) in 2.3850 seconds

0 row(s) in 2.3970 seconds

0 row(s) in 29.5100 seconds

0 row(s) in 4.4170 seconds

0 row(s) in 2.4830 seconds

0 row(s) in 4.3950 seconds

0 row(s) in 2.4160 seconds

0 row(s) in 1.3800 seconds

TABLE
AgentEvent
AgentInfo
AgentLifeCycle
AgentStatV2
ApiMetaData
ApplicationIndex
ApplicationMapStatisticsCallee_Ver2
ApplicationMapStatisticsCaller_Ver2
ApplicationMapStatisticsSelf_Ver2
ApplicationStatAggre
ApplicationTraceIndex
HostApplicationMap_Ver2
SqlMetaData_Ver2
SqlUidMetaData
StringMetaData
TraceV2
16 row(s) in 0.1870 seconds

Collector / Web 설치하기

1. collectorweb 을 설치합니다.

# 전용 폴더 만들기
mkdir pinpoint
cd pinpoint

# collector
wget https://github.com/pinpoint-apm/pinpoint/releases/download/v2.5.3/pinpoint-collector-boot-2.5.3.jar
# web
wget https://github.com/pinpoint-apm/pinpoint/releases/download/v2.5.3/pinpoint-web-boot-2.5.3.jar

2. 실행 권한을 부여합니다.

# 실행권한 부여하기
chmod +x pinpoint-collector-boot-2.5.3.jar
chmod +x pinpoint-web-boot-2.5.3.jar

3. Collector와 Web을 실행시킵니다.

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

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

방화벽 혹은 보안그룹에서 8080포트가 열려있는지 확인해주세요.

※ agent에서 collector로 데이터를 보낼 때, 9991, 9992, 9993 포트를 사용하기 때문에 해당 포트도 제대로 열려있는지 확인해주세요.

Oracle Linux 같은 경우 보안 그룹을 열어도, 방화벽을 열지 않으면 접속이 되지 않습니다. 방화벽도 열어주세요.

  • 해당 서버의 IP 주소에 8080포트로 접속을 하시면 Pinpoint web을 확인할 수 있습니다.
  • http://${서버 ip}:8080


Agent 설치하기

1. 제 프로젝트가 AWS EC2에서 docker로 실행중이기 때문에 docker에 agent 폴더를 mount시켜서 실행시키겠습니다.

# agent 2.5.3 다운로드
wget https://github.com/pinpoint-apm/pinpoint/releases/download/v2.5.3/pinpoint-agent-2.5.3.tar.gz

# agent 압축풀기
tar -zxvf pinpoint-agent-2.5.3.tar.gz

2. Monitoring 서버랑 연결하기 위해서 agent 설정 파일을 수정하겠습니다.

# agent에서 release 프로필의 설정 파일 열기
vi pinpoint-agent-2.5.3/profiles/release/pinpoint.config

# collector.ip에 Monitoring 서버의 IP를 입력 후 저장

###########################################################
# gRPC Configuration                                      #
###########################################################
profiler.transport.grpc.collector.ip=${Monitoring 서버 IP}

# 소규모 프로젝트이므로, 모든 요청을 다 확인할 수 있도록 샘플링 Rate를 변경하겠습니다.

# if it's COUNTING(the default), then 1 out of n transactions will be sampled where n is the rate.
# eg. 1: 100%     20: 5%     50: 2%      100: 1%
profiler.sampling.counting.sampling-rate=1 

3. docker image를 만들 때, 해당 docker image를 실행하면 javaagentpinpoint를 추가해서 실행하도록 명령어를 수정

# 변경 전
FROM openjdk:17-jdk-alpine3.14
ARG JAR_FILE=my-garden-be/build/libs/*.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-jar", "-Dspring.profiles.active=prod", "/app.jar"]

# 변경 후 (pinpoint profile을 설정하지 않으면, default로 release 프로필로 실행됩니다.)
FROM openjdk:17-jdk-alpine3.14
ARG JAR_FILE=my-garden-be/build/libs/*.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java", \
 "-javaagent:/pinpoint-agent/pinpoint-bootstrap-2.5.3.jar", \
 "-Dpinpoint.agentId=aws-ec2-1", \
 "-Dpinpoint.applicationName=MyGarden", \
 "-Dspring.profiles.active=prod", \
 "-jar", "/app.jar"]

4. 도커 컨테이너를 실행할 때 pinpoint-agent-2.5.3를 컨테이너 내부의 /pinpoint-agent에 마운트를 시키도록 합니다.

docker run -d -v /home/ec2-user/pinpoint-agent-2.5.3:/pinpoint-agent -p 443:443 -p 80:80 --name my-garden-pinpoint ghcr.io/denia-park/my-garden/pinpoint:latest


Pinpoint를 잘 이용한다면 실제 요청들이 어디서 병목이 되는지 파악이 쉬울것 같습니다.

참고

profile
HW -> FW -> Web

0개의 댓글