Diary/TIL

2024-04-06) Pinpoint 등록 시도

nsean 2024. 5. 15. 23:51

먼저 로컬에서 서비스, nGrinder, Pinpoint를 설치하려 했으나, 포트 번호가 겹치는 문제로 인해 편리성을 고려하여 서버를 분리하기로 결정했다. Docker를 사용하여 설치하기로 결정하고 EC2 인스턴스를 Medium 사이즈로 설정했으나, 서버가 다운되어 Large로 변경했다. 이후에도 서버가 다시 다운되어 결국 Xlarge로 설정했다. Kafka 등의 다양한 기능을 사용함으로써 상당한 자원을 소모하는 것 같았다.

 

pinpoint 설치 방법은 다음과 같았다.

 

1. EC2 인스턴스에 SSH로 접속한 후, Ubuntu에서 Docker를 설치한다.

sudo apt update
sudo apt install -y docker.io
sudo systemctl start docker
sudo systemctl enable docker
sudo usermod -aG docker $USER

2. Docker-compose 설치

sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

 

3. pinpoint docker image 가져오기

git clone https://github.com/pinpoint-apm/pinpoint-docker.git
cd pinpoint-docker
docker-compose pull && docker-compose up -d

4. pinpooint docker with sub 기능들 image 가져오기

git clone https://github.com/pinpoint-apm/pinpoint-docker.git
cd pinpoint-docker
docker-compose pull
docker-compose -f docker-compose.yml -f docker-compose-metric.yml up -d

 

docker에 설치되는 이미지 목록들을 보니(Kafka 등), 다양한 기능들을 사용하여 Xlarge 인스턴스를 사용해야 되는 것이 납득이 되었다. 이렇게 설치한 후, agent를 설치하는 과정에서 문제가 발생했다.

DevOps 역할을 맡은 분께서 Dockerfile로 서비스 jar를 이미지로 변환하여 Docker에 올리는 방식으로 진행하고 있었는데, 현재의 리서치와 러닝 커브 상태로는 Pinpoint를 함께 변환하는 방법을 찾을 수 없었다. 결국 Pinpoint 선택을 포기하고, 다음과 같이 Dockerfile 레퍼런스가 제공되는 ELK(Elastic APM)를 선택하게 되었다.

FROM openjdk:17
WORKDIR /app
ARG JAR_FILE=build/libs/*.jar
ARG APM_AGENT_FILE=elastic-apm-agent-1.49.0.jar
COPY ${JAR_FILE} app.jar
COPY ${APM_AGENT_FILE} elastic-apm-agent.jar
EXPOSE 8080
CMD ["java","-jar","app.jar"]
ENTRYPOINT ["java", "-javaagent:elastic-apm-agent.jar", "-Delastic.apm.service_name=application-server", "-Delastic.apm.server_urls=http://13.125.23.24:8200", "-Delastic.apm.application_packages=com.example.pigonair", "-Delastic.apm.metrics_interval=1s", "-Delastic.apm.central_config=false", "-jar", "app.jar"]

 

추후에 Pinpoint에 대해 공부하면서, 다음과 같은 코드를 통해 Pinpoint agent를 attach 할 수 있지 않을까? 하는 생각이 들었다.

Pinpoint-agent를 다운로드하고, pinpoint.config 파일을 다음과 같이 수정:

profiler.collector.ip= "ec2서버주소"
profiler.collector.tcp.port=9994
profiler.collector.stat.port=9995
profiler.collector.span.port=9996
profiler.sampling.rate=1

Dockerfile:

 

# 기본 이미지 설정
FROM openjdk:17-jdk

# Pinpoint Agent 파일 복사
COPY pinpoint-agent-2.5.4 /opt/pinpoint-agent-2.5.4

# 애플리케이션 JAR 파일 복사
COPY your-application.jar /usr/app/

# Pinpoint Agent와 함께 애플리케이션 실행
CMD ["java", "-javaagent:/opt/pinpoint-agent-2.5.4/pinpoint-bootstrap-2.5.4.jar", "-Dpinpoint.agentId=AgentId", "-Dpinpoint.applicationName=AppName", "-jar", "/usr/app/your-application.jar"]

 

프로젝트가 마무리되고 나서, 둘러보니 놓쳤던 것들이 보였다. 특히 초기 설정 과정에서 더 신경 썼어야 할 부분들이 아쉬웠다. 예를 들어, 서버 용량의 적절한 설정이나 초기 리서치 단계에서의 더 철저한 준비 등이 있었다. 이러한 부분들이 프로젝트 진행 중에 시간과 자원을 낭비한 것 같아 아쉬움이 남았다.