Search
Duplicate

Intellij 로 Pinpoint 를 실행해보자 Feat.삽질기

글감
BE
Docker
Pinpoint
작성자
작성 일자
2023/09/01 16:58
상태
완료
공개여부
공개
Date
생성자
작업자

Pinpoint란?

네이버에서 만든 오픈소스 APM 툴이다.
요청이 있을때, 유저→서버→DB 까지의 흐름을 볼 수 있다.
콜스택부터, 어떤함수에서 어느정도 시간이 걸렸는지 확인이 가능하다.
자세한내용은 We’ll be Right back

Pinpoint 전체적인 구조

일단 Pinpoint 크게보면 2가지로 나뉜다
pinpoint 관련 정보를 받고, 보여주는 서버이자 에이전트
pinpoint 에이전트가 달려서 내 서버의 정보를 전송해주는 서버

Pinpoint Agent

ApplicationServer(Spring): 우리가 만든서버 CABI APP이다.
pinpoint-agent : 우리가 만든 Spring 서버에서, 필요한 내용들을 수집하여 pinpoint colellector 로 보냄

Pinpoint APM Server

pinpoint-collector: pinpoint-agent 에서 보낸 내용들을 수집하여 hbase에 저장.
pinpoint-hbase: pinpoint collector 에서 받은 내용들을 실시간으로 받고 처리해서, pinpoint web 에 보냄.
zookeeper(zoo 1,2,3)
pinpoint-web: 핀포인트 GUI 앱입니다. 기본적으로 8080포트를 사용하며, spring 으로 만든 앱인듯
pinpoint-mysql: web에서 사용되는 플러그인 기능 및 여러가지 부가기능들에 사용됨
pinpoint- 기타 플러그인들, flicker …. : 얘네는 저도 아직 잘 모름. 나중에 정리해보겠습니다.상세한 내용은 나중에 또 작성토록 하겠습니다. -2023.09.02

Pinpoint APM Server 설치

git clone https://github.com/pinpoint-apm/pinpoint-docker.git cd pinpoint-docker
Java
복사
처음 깔면 위와 같은 구조이다

docker-compose.yml

여기서 제알 바깥 디텍토리의 docker-compose.yml 을 수정해야한다
위에서 설명한 구조 외에는 다 필요없는 부분이다.
docker-compose.yml에서 주석처리해야할 부분들이다.
pinpoint-quickstart : 예시 Application 서버로, 우리는 까비를 쓸거니까 버려도된다.
pinpoint-agent, pinpoint-attach-example : 얘네는 서버에 없어도된다.
귀찮은사람들을 위한 주석처리된 코드
주석처리한 후 컴포즈 실행하면 사실 설정은 끝난다.
sanan : docker-compose시에 failed to solve: process "/bin/sh -c apt-get update ...어쩌구저쩌구... curl -SL ${INSTALL_URL} -o /build/pinpoint-flink-job.jar" did not complete successfully: exit code: 100가 발생하는 경우

.env

후..니들은 이런거 하지마라..
Pinpoint APM 에서 필요로하는 중요한 기능들에 대한 config 모두가 여기에 다 있다.
쓸때없이 딴데서 뭐 고치려고 하지말자 ⇒ 컨픽건들면서 구조를 알게된 부분도 많지만, 시간을 많이낭비했다.
ENV 설명

Pinpoint-Agent 설치

1. 핀포인트 agent 설치

릴리즈된 agent 파일을 받는다
여기서 각각 받아서 엑조디아 조립하면 다 로컬에서 돌릴 수 있다.

2. Agent 압축해제 및 디렉토리 정하기

필자는 그냥 ~에 압축 풀었다

3. Agent pinpoint-root.config 파일 설정

profiler.transport.grpc.collector.ip=
이 부분을 바꿔줘야 한다
위에서 docker로 설치한 pinpoint-collector 가 위치한 곳의 ip 를 입력하면된다
pinpoint-collector 서버가 물리적으로 다른 서버에 있다면, 포트포워딩을 열어놓아야한다.
하지만 우린 intellij-pinpoint 로컬실행환경을 염두해두니, localhost 혹은 127.0.0.1 로 쓰도록 하자
profiler.collector.ip=
아래에 하나 더 있다. 여기도 바꿔주자
얘는 솔직히 뭔지 잘 모르겠음 → 아시는분 첨언 부탁드립니다.
일단 제대로 안되어있어도 동작은됨
기존은 gRPC Configuration 이었고, 이 부분은 Thrift Configurataion이길래 찾아보니까 Apache에서 제공하는 Thrift라는 데이터 송수신 프로토콜이 별도로 있는 것 같네요..! gRPC는 저번에 말한 proto를 사용하는.. 더 보기

Intellij 설정

위에 실행환경 설정하는 창 클릭
구성 편집
SpringBoot 를 실행하는 환경설정 템플릿을 만드는 메뉴이다.
+ 버튼 클릭
Spring Boot 클릭
처음엔 아무것도 지정이 안되어있을텐데, 일단 오른쪽 위 옵션수정을 눌러서 JVM 옵션을 줘야한다.
위 창이 만들어졌을것이다
JVM 옵션 넣어주는 것도 Application 클래스 코드에 직접 입력이 가능했던 것 같습니다..! System.setProperty("com.amazonaws.sdk.disableEc2Metadata", "true"); 이런 식으로요!
위 사진과 같이 설정해주면 된다.
가운데 VM 설정부분이 JVM java 실행시 넣을 옵션들이 들어가야한다
초록 부분들은 수정해서 써야할 부분이다
-javaagent:{핀포인트 에이전트 디렉토리}/pinpoint-agent-2.5.2/pinpoint-bootstrap-2.5.2.jar -Dpinpoint.config={핀포인트 에이전트 디렉토리}/pinpoint-agent-2.5.2/pinpoint-root.config -Dpinpoint.agentId=CABI -Dpinpoint.applicationName=CABI_BACKEND -Dspring.profiles.active=local
Plain Text
복사
옵션설명
-javaagent:{핀포인트 에이전트 디렉토리}/pinpoint-agent-2.5.2/pinpoint-bootstrap-2.5.2.jar
에이전트 디렉토리에서 자바 바이트코드를 분석할 에이전트를 연결해주는 옵션
-Dpinpoint.config={핀포인트 에이전트 디렉토리}/pinpoint-agent-2.5.2/pinpoint-root.config
위에서 변경한 핀포인트 config 적용옵션
-Dpinpoint.agentId=CABI
pinpoint-web에 표시할 agentId
-Dpinpoint.applicationName=CABI_BACKEND
pinpoint-web에 표시할 이름
-Dspring.profiles.active=local
spring 실행할 profile 인듯
필자의 디렉토리가 설정된 예시
sanan: Error opening zip file or JAR manifest missing : ~/JAVA/pinpoint-agent-2.5.2/pinpoint-bootstrap-2.5.2.jar

설정완료

핀포인트 뭐시기가 뜬 다음에 스프링이 잘 뜨면 성공

예상 질의 응답

Q. Pinpoint 를 설치했는데 mariadb가 안보여요

⇒ A. maria client 버전 다운그레이드 하세요 2.7.9 이하로 다운그레이드 하시오
MariaDB를 사용한다면, 클라이언트 버전을 확인해봐라
공홈에서는 1.1~3.1 까지 지원한다고 써있다.
Spring boot 에서 관리해주는 latest 사용한다면 3.1 혹은 그 이상일 것이다.

우리가 한 삽질 & 해결기

git 명세에는 분명 1.1~3.1 까지 지원한다고 써있다.

삽질

아니 우리 버전 2.7.10 인데요?

왜 안돼?

정답은 이미 closed 된 이슈에 있었다.
ㅋㅋ
다른 어떤 지나가던 이용객분께서, 2.7.9 까지 지원되는걸 확인해줬다.
3.1 까지라매..(이걸로 일주일 “왜 안될까” 하면서 개고생함)
아니 closed 할꺼면 명세 바꿔줘야하는거아니냐…?

결론

2.7.9 로 다운그레이드 하면 잘나온다.
우리가 이걸보고 고쳤다 하는 commit 과 버전확인을 하나 더 달아뒀다..