2024. 3. 28. 18:05ㆍ개발
2024.03.25 - [개발] - 제이미터(JMeter)로 테스트 환경 구성 및 테스트하기_2
2024.03.22 - [개발] - 제이미터(JMeter)로 테스트 환경 구성 및 테스트하기_1
이전에 부하테스트 및 관련해서 테스트를 하는것도 중요하지만 그런 지표를 볼 만한 시스템이 현재 회사에 없는게 문제라고 생각이 들었다. 그에따라 각 서비스들을 모니터링 할 수 있는 환경을 구성 및 테스트를 하고싶었다.
일단 개발서버에 먼저 세팅 후 관련해서 보고 후 의견을 듣고 진행하려고 한다.
기본적으로 모니터링의 고려대상이 된 것은 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
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이 가장 큰 강점이 아닌가 싶기도 하다.
(물론 장점만 있는건 아니다. 그러나 아무것도 없을 때 도입을 고려하기에는 설치 및 운용에 매우 강점이 있어보였다.)
아직 위 모니터링도 도입을 할지 어떻게 될지는 모른다. 최대한 준비를 해서 도입에 힘을 써 봐야겠다.
참고주소
핀포인트 사용시 주의사항!! (feat 로그 파일 사이즈) | Incheol's TECH BLOG
'개발' 카테고리의 다른 글
Connection reset by peer 에러 발생 및 관련 처리_2 (Retries exhausted: 5/5 에러, Connection prematurely closed BEFORE response 에러) (0) | 2024.06.18 |
---|---|
Connection reset by peer 에러 발생 및 관련 처리_1 (1) | 2024.06.18 |
제이미터(JMeter)로 테스트 환경 구성 및 테스트하기_2 (0) | 2024.03.25 |
제이미터(JMeter)로 테스트 환경 구성 및 테스트하기_1 (0) | 2024.03.22 |
제이미터(JMeter)로 테스트 세팅 및 사용법 정리. (1) | 2024.03.22 |