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 서버가 물리적으로 다른 서버에 있다면, 포트포워딩을 열어놓아야한다.
◦
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 과 버전확인을 하나 더 달아뒀다..