PINPOINT (APM) 2.5.3 버전 설치 및 테스트.

2024. 3. 28. 18:05개발

반응형

2024.03.25 - [개발] - 제이미터(JMeter)로 테스트 환경 구성 및 테스트하기_2

 

제이미터(JMeter)로 테스트 환경 구성 및 테스트하기_2

2024.03.22 - [개발] - 제이미터(JMeter)로 테스트 환경 구성 및 테스트하기_1 제이미터(JMeter)로 테스트 환경 구성 및 테스트하기_1 JMeter 세팅과 관련해서는 해당글을 참고하면 됩니다. 2024.03.22 - [개발]

lollaziest.tistory.com

2024.03.22 - [개발] - 제이미터(JMeter)로 테스트 환경 구성 및 테스트하기_1

 

제이미터(JMeter)로 테스트 환경 구성 및 테스트하기_1

JMeter 세팅과 관련해서는 해당글을 참고하면 됩니다. 2024.03.22 - [개발] - 제이미터(JMeter)로 테스트 세팅 및 사용법 정리. 제이미터(JMeter)로 테스트 세팅 및 사용법 정리. 테스트를 해본다면? JMeter로

lollaziest.tistory.com

이전에 부하테스트 및 관련해서 테스트를 하는것도 중요하지만 그런 지표를 볼 만한 시스템이 현재 회사에 없는게 문제라고 생각이 들었다. 그에따라 각 서비스들을 모니터링 할 수 있는 환경을 구성 및 테스트를 하고싶었다.

일단 개발서버에 먼저 세팅 후 관련해서 보고 후 의견을 듣고 진행하려고 한다.

기본적으로 모니터링의 고려대상이 된 것은 2가지였다.

1번 프로메테우스 + 그라파나.
2번 네이버의 Pinpoint였다.

그중 2번을 선택한 이유는 부하테스트 및 기타 서비스에 대해서 API요청이나 db에 대한 접근 및 SQL문을 확인하고 상세정보를 보는데 조금 더 Pinpoint가 매력이 있다고 생각했다.
(실제로는 2개 모두 구성해두고 필요에 따라 원하는방식으로 보는게 좋다고들 한다)

초기에는 2.2.2 버전을 기준으로 설치하여 테스트했었으나 2.5.3을 기준으로 최종 결정을 하였다.
(Pinpoint Web의 UI가 바뀐것도 있지만 여러가지 사항이 추가 고려되었다.)

 

기본적인 아키텍쳐 모습

다른 블로그에 있는 이미지를 발췌하였다. 여러가지 사이트를 들어가서...정확하게 어딘지는 까먹었다(죄송합니다)

간단하게 정리하면 세팅을 하게되면..!
Agent라는게 각 톰캣이든 스프링부트 서비스든 올라갈때 같이 실행되게 된다.
Collector가 해당 정보를 받아 Hbase에 저장한다.
Web이 해당 정보를 보기좋게 GUI로 보여준다.

 

본격적인 설치 수행.

2.2.2의 경우 jdk8로도 가능하지만 2.5.3의 경우 jdk 11이상만 가능하다.

Agent 설치(JDK 8도 지원한다.)

# 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

Jdk 설치

wget <https://download.java.net/java/GA/jdk11/9/GPL/openjdk-11.0.2_linux-x64_bin.tar.gz>
tar -xzf openjdk-11.0.2_linux-x64_bin.tar.gz

ln -s jdk-11.0.2 /usr/local/java

javac -version

web과 collector 설치

# 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>

chmod +x pinpoint-collector-boot-2.5.3.jar
chmod +x pinpoint-web-boot-2.5.3.jar

## JDK11로 잡아둔걸로 jar 실행.
nohup /usr/local/java/bin/java -jar -Dpinpoint.zookeeper.address=localhost /usr/local/pinpoint-collector-boot-2.5.3.jar >/dev/null 2>&1 &
nohup /usr/local/java/bin/java -jar -Dpinpoint.zookeeper.address=localhost /usr/local/pinpoint-web-boot-2.5.3.jar >/dev/null 2>&1 &

버전별 JDK 지원 관련 참고이미지

 

Hbase 설치(DB)

자바경로를 잡아줘야한다.(JDK)

vi /usr/local/hbase/conf/hbase-env.sh

##이거추가
export JAVA_HOME=/usr/local/java

hbase가 설치된 곳의 bin폴더로 실행

## 시작
/usr/local/hbase/bin/start-hbase.sh
## 종료하고싶다면
/usr/local/hbase/bin/stop-hbase.sh

다운로드 및 설치
(아래 주석처리를 해 주는 이유는 JDK8 에서는 해당 Perm영역이 없어지고 다른 방식으로 쓰기 때문이다.)

wget <https://archive.apache.org/dist/hbase/1.2.7/hbase-1.2.7-bin.tar.gz> --no-check-certificate

tar xzvf hbase-1.2.7-bin.tar.gz

vi /usr/local/hbase-1.2.7/conf/hbase-env.sh

# 이 옵션을 주석처리 하지 않으면 hbase 실행시 warning 이 뜹니다.
# export HBASE_MASTER_OPTS="$HBASE_MASTER_OPTS -XX:PermSize=128m -XX:MaxPermSize=128m"
# export HBASE_REGIONSERVER_OPTS="$HBASE_REGIONSERVER_OPTS -XX:PermSize=128m -XX:MaxPermSize=128m"

# 심볼릭 링크 생성
ln -s hbase-1.2.7 hbase

# hbase 시작
/usr/local/hbase/bin/start-hbase.sh

### 기본테이블 다운로드
wget https://raw.githubusercontent.com/pinpoint-apm/pinpoint/master/hbase/scripts/hbase-create.hbase

### TTL 설정 변경
sed 's/31536000/172800/' hbase-create.hbase > hbase-create-my.hbase
sed -i 's/5184000/172800/' hbase-create-my.hbase

### 수정한걸로 테이블 생성.
/usr/local/hbase/bin/hbase shell hbase-create-my.hbase

만약 hbase 데이터 보존기간을 줄이고싶다면?

기본 time to live 값을 조절해주면 될듯 하다.

hbase-create.hbase 엔 TTL 값이 31536000 초(365일), 5184000 초(60일) 로 데이터를 유지하도록 되어있어 172800 초(2일) 로 변경.

 

최초 설치 후 부하테스트 해 볼 때의 모습

 

 

기타 주의사항

Agent의경우 기본포트를 9991 ~ 9993을 사용한다고함.

(그룹 인바운드에는 9991 ~ 9993까지는 필수로 포함되어야 합니다.)

  • 9991 ~ 9996 Port: Collector에서 사용하는 포트이며 Agent로 부터 메트릭을 받아오기위해 열어두어야 한다.
  • 9000 Port: Pinpoint web을 위해 필요하다.

(이유는 Agent가 Collector로 로그 전송을 할때 사용하는 tcp 포트가 9991 ~ 9993까지가 기본값으로 되어있기 때문입니다.)

HBase버전을 1.2.7로 잡는이유
(최신 이미지는 아니지만 2버전대의 경우 추가적인 모듈 설치 및 기타 작업이 필요하다고 해서 일단 초기버전으로 테스트를 해보았다.)

세팅시 다음과 같은 포트를 중심으로 고려해야한다고 한다.(공식사이트에서 발췌.)

구분  IP 대역 Port  Description
TCP (필요 IP 대역) 22 Pinpoint Server SSH
TCP (필요 IP 대역) 10090 Pinpoint Web Port
TCP (필요 IP 대역) 8090 Pinpoint Collector Web Port
TCP (필요 IP 대역) 9994 Pinpoint Collector TCP
TCP (필요 IP 대역) 9995 Pinpoint Collector Status TCP
TCP (필요 IP 대역) 9996 Pinpoint Collector Span TCP
UDP (필요 IP 대역) 9994 Pinpoint Collector UDP
UDP (필요 IP 대역) 9995 Pinpoint Collector Status UDP
UDP (필요 IP 대역) 9996 Pinpoint Collector Span UDP

 

로그 관련 설정 조정

개발서버에 용량이 넉넉한 편이 아니라서 기본적인 용량 조절을 하였다.

로그 용량제한 및 보관기간을 더 낮췄다.

local기준이므로 설치경로의 local의 log4j2.xml 파일의 backupsize 및 lastmodified, default-rollover-strategy-max의 값을 조절했다.

param  default  변경값
backupsize 100M 10M
default-rollover-strategy-max 5 2
lastmodified 7d 1d
  <Property name="backupsize">10m</Property>
  <Property name="default-rollover-strategy-max">2</Property>
  <Property name="lastmodified">1d</Property>

 

Mariadb SQL문의 상세내용이 안보이던 이슈 발생

ServerMap을 지원해주는 부분에서 mariadb로 연결되는 부분이 안보이고 sql 쿼리문이 안보이는 상황이 발생했다.
이 경우 pinpoint에서 지원하는 mariadb 드라이버 버전이 있었다.
3.0.8 → 2.7.9 로 다운그레이드 후 배포하는 경우 SQL문까지 제대로 보인다.

		<dependency>
			<groupId>org.mariadb.jdbc</groupId>
			<artifactId>mariadb-java-client</artifactId>
			<version>2.7.9</version>
		</dependency>

해당 이슈 관련 git주소

https://github.com/pinpoint-apm/pinpoint/issues/10191

 

Unable to View Queries in Call Tree for a Spring Boot Application · Issue #10191 · pinpoint-apm/pinpoint

Summary 핀포인트 웹에서 개별 요청을 선택 후 Call Tree를 보면 쿼리가 조회되지 않습니다. Call Tree에서 쿼리까지 확인하려면 어떻게 해야하나요? JPA 사용과 관련 있는 것 같은데 어떻게 해결해야 할

github.com

SQL상세까지 나오는것을 지원하는 드라이버 버전 이미지

 

프로젝트 내부에서 WebClient나 Resttemplate을 사용하여 다른 서버와 통신하는 경우 상세 내용이 trace가 안되고 있었다.

Agent에 있는 플러그인 설정을 켜줘야만 정상적으로 다른서비스들이 trace된다.

RestTemplate

###########################################################
# RestTemplate
###########################################################
profiler.resttemplate=true

WebClient

###########################################################
# Spring WebFlux
###########################################################
profiler.spring.webflux.enable=true

# Client
# If you are not using Reactor-Netty, set it to true.
profiler.spring.webflux.client.enable=true
# Record Parameter.
profiler.spring.webflux.client.param=true
# Record cookies.
profiler.spring.webflux.client.cookie=true
# When cookies should be dumped. It could be ALWAYS or EXCEPTION.
profiler.spring.webflux.client.cookie.dumptype=ALWAYS
# 1 out of n cookies will be sampled where n is the rate. (1: 100%)
profiler.spring.webflux.client.cookie.sampling.rate=1
# Cookie dump size.
profiler.spring.webflux.client.cookie.dumpsize=1024

여러가지 서비스가 모두 trace되는 모습

 

간단소감

어떻게보면 정말 큰 이슈 없이 설치 및 기본적인 설정만 어느정도 잡아줘도 이렇게 볼 수 있다는게 놀라웠다.
클라우드 서비스에서 상용으로 제공하기도 하지만 그냥 각 서버에 무료로 적용해서 사용 할 수 있다는 점도 좋았다.
여러가지 서비스와 통신하고 그 모습을 UI상으로 보여주는 Server Map이 가장 큰 강점이 아닌가 싶기도 하다.
(물론 장점만 있는건 아니다. 그러나 아무것도 없을 때 도입을 고려하기에는 설치 및 운용에 매우 강점이 있어보였다.)

아직 위 모니터링도 도입을 할지 어떻게 될지는 모른다. 최대한 준비를 해서 도입에 힘을 써 봐야겠다.

 

참고주소

Pinpoint 적용하기 – devle.log

 

Pinpoint 적용하기 – devle.log

Naver Pinpoint 도입기

developerlee79.github.io

Pinpoint 시작 가이드

 

Pinpoint 시작 가이드

 

guide.ncloud-docs.com

Pinpoint 서버 생성 가이드

 

Pinpoint 서버 생성 가이드

 

guide-gov.ncloud-docs.com

Pinpoint 설치하기

 

Pinpoint 설치하기

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

velog.io

핀포인트 사용시 주의사항!! (feat 로그 파일 사이즈) | Incheol's TECH BLOG

 

핀포인트 사용시 주의사항!! (feat 로그 파일 사이즈)

Last updated 8 months ago

incheol-jung.gitbook.io

 

반응형