# Pinpoint를 EKS에 적용하기
- 구성도는 아래와 같다.
- 위의 구성도를 간략하게 설명하자면 아래와 같다.
① pod가 생성될때 아래의 옵션값을 가지고 PinpointAgent를 실행한다.
- 사전작업 내역은 아래와 같다. 사전 작업은 EFS에 Pinpoint Agent가 설치 되어 있어야 한다.
- EFS에 Pinpoint를 설치하는 방법은 여러가지 방법이 있는데 내가 사용한 방법은 EFS만 마운트 시킨 pod를 우선 올린 후 pod 내부로 접근한다. pod 내부로 접근을 하면 공유된 폴더 경로에 접근을 할 수 있고, 공유된 폴더의 경로에 Pinpoint Agent 및 기타 실행 파일을 다운로드 받는다. 그리고 해당 경로를 아래의 env: 의 javaagent의 경로로 지정을 해주면 해당 pod가 실행될때 javaagent의 경로에 있는 jar 파일을 물고 올라가는 형태이다.
실행 옵션은 아래와 같다. 버전은 2.2.0버전을 사용 했지만 최신버전이 2.5.0 버전을 사용하는 방법은 동일하다.
- 아래의 env: 옵션을 pod를 실행하는 deployment.yaml 파일에 정의해 주면 된다.
env:
- name: JAVA_TOOL_OPTIONS
value: >-
-javaagent:/usr/share/pinpoint-server/pinpoint-agent-2.2.0/pinpoint-agent-2.2.0/pinpoint-bootstrap-2.2.0.jar
-Dpinpoint.config=/usr/share/pinpoint-server/pinpoint-agent-2.2.0/pinpoint-agent-2.2.0/pinpoint-root.config
-Dpinpoint.applicationName=test-api
-Dpinpoint.agentName=test-api
-Dpinpoint.container
② 실행된 pod는 PinpointAgent jar 파일을 함께 물고 올라가고, agent jar 파일을 실행 하면서 Pinpoint Server와 통신을 한다. 정상적으로 통신이 이루어지면 Pinpoint Server에 수집하는 정보를 보내게 된다.
- 아래는 Spring이 실행될때 Pinpoint도 함께 실행되는 로그를 확인한 결과이다.
- 옵션은 아래와 같다.
applicationName: Pinpoint에 연결된 많은 프로젝트들 중, 프로젝트를 구분짓기 위한 ID.
예를들어 스케일아웃하여 여러 EC2로 구성되어 있더라도 같은 프로젝트라면 이 값을 모두 같은 값으로 한다.
agentId: 같은 PINPOINT_APPLICATION_NAME 내에서 각 서버들을 구분하기 위한 ID.
config: 앞서 수정한 config를 명시해서 적용되도록 하는 값.
01-16 08:01:38.336 INFO PinpointStarter: pinpoint agent [com.navercorp.pinpoint.profiler.DefaultAgent] starting...
01-16 08:01:41.506 INFO PinpointStarter: pinpoint agent started normally.
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.4.5)
③ 실행된 pod는 Pinpoint Server에게 Agent로 부터 수집한 내용을 전송한다.
- 전송된 내용은 아래와 같다.
④ 유저는 웹으로 제공된 URL 주소로 접속하여 위와 같은 정보를 확인 할 수 있다.