반응형
핀포인트(Pinpoint)란?
Pinpoint는 애플리케이션 성능 모니터링(APM, Application Performance Monitoring)을 위한 오픈소스 도구입니다. 주로 분산 시스템에서 애플리케이션의 성능 문제를 추적하고 분석하는 데 사용됩니다. Pinpoint는 특히 요청 흐름(request tracing)을 시각화하고, 병목 지점을 식별하며, 실시간 모니터링을 제공하는 데 강점을 가지고 있습니다. 한국의 네이버(Naver)에서 개발했으며, 현재는 오픈소스 프로젝트로 GitHub에서 관리되고 있습니다.
핀포인트의 주요 기능
- 분산 추적(Distributed Tracing):
- 마이크로서비스 환경에서 하나의 요청이 여러 서비스를 거치는 경로를 추적합니다.
- 예: 사용자 요청 → 프론트엔드 → 백엔드 API → 데이터베이스 호출 과정을 시각화.
- 실시간 모니터링:
- 애플리케이션의 응답 시간, 처리량, 오류율 등을 실시간으로 확인.
- 성능 분석:
- 느린 요청이나 오류가 발생한 지점을 정확히 파악.
- 메서드 레벨까지 세부적으로 성능 데이터 제공.
- 시각화:
- 웹 기반 대시보드로 트랜잭션 흐름도, 서버 상태, 통계 등을 표시.
- 경량 에이전트:
- 애플리케이션에 추가되는 Pinpoint 에이전트가 성능에 미치는 영향을 최소화.
핀포인트의 구성 요소
- Pinpoint Agent:
- 모니터링 대상 애플리케이션(Java 기반)에 설치.
- 애플리케이션의 요청 데이터(호출 스택, 시간 등)와 같은 성능 관련 지표를 수집해 Collector로 전달.
- Pinpoint Collector:
- 에이전트로부터 수집된 데이터를 받아 HBase에 저장.
- ZooKeeper로 데이터 조정 및 클러스터 관리.
- Pinpoint Web:
- 저장된 데이터를 웹 UI로 시각화.
- 사용자 인터페이스를 통해 모니터링 및 분석 제공.
- HBase:
- Pinpoint의 백엔드 데이터베이스.
- 수집된 추적 데이터와 통계를 저장.
- ZooKeeper:
- Collector와 Web 간 데이터 동기화 및 클러스터 상태 관리.
사용 사례 및 장 단점
사용 사례
- 대규모 서비스: 네이버, 쿠팡 등 트래픽이 많은 환경에서 사용.
- 마이크로서비스: 서비스 간 호출 분석.
- 장애 분석: 느린 응답이나 오류 원인 파악.
장점
- 코드 수정 최소화: 에이전트를 붙이는 것만으로 모니터링 가능.
- 상세 추적: 메서드 단위까지 분석.
- 오픈소스: 무료로 사용 가능, 커뮤니티 지원.
단점
- 설정 복잡성: HBase, ZooKeeper 등 의존성 설치 필요.
- 리소스 사용: 대규모 데이터 처리 시 서버 부하 증가.
실습 방법
1) 저장소 및 Web 서버 설정
1. 자바 설치
apt update
apt install -y openjdk-8-jdk
2. HBase 다운로드 및 압축 해제
wget https://archive.apache.org/dist/hbase/1.2.7/hbase-1.2.7-bin.tar.gz
tar zxvf hbase-1.2.7-bin.tar.gz
3. HBase 환경 변수 수정
vi ./hbase-1.2.7/conf/hbase-env.sh
------------------------------------------------------
# 28번 라인 수정
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
# 44, 47, 48 라인 주석 처리
# export HBASE_OPTS="-XX:+UseConcMarkSweepGC"
# export HBASE_MASTER_OPTS="$HBASE_MASTER_OPTS -XX:Per mSize=128m -XX:MaxPermSize=128m -XX:ReservedCodeCacheS ize=256m"
# export HBASE_REGIONSERVER_OPTS="$HBASE_REGIONSERVER_ OPTS -XX:PermSize=128m -XX:MaxPermSize=128m -XX:Reserv edCodeCacheSize=256m"
4. HBase 실행
./hbase-1.2.7/bin/start-hbase.sh
- HBase 마스터와 리전 서버를 시작. 이 과정에서 ZooKeeper도 함께 시작됨(기본적으로 HBase 1.2.7은 번들 ZooKeeper 포함).
5. HBase 테이블 생성 스크립트 다운로드 및 테이블 생성
wget https://raw.githubusercontent.com/pinpoint-apm/pinpoint/master/hbase/scripts/hbase-create.hbase
./hbase-1.2.7/bin/hbase shell ./hbase-create.hbase
- Pinpoint에서 제공하는 HBase 테이블 생성 스크립트(hbase-create.hbase)를 다운로드
- 이 스크립트는 Pinpoint가 데이터를 저장할 HBase 테이블을 정의 및 생성 (예: ApplicationTraceIndex, AgentStat 등)
6. Pinpoint Collector 다운로드 및 실행
wget https://github.com/pinpoint-apm/pinpoint/releases/download/v2.3.3/pinpoint-collector-boot-2.3.3.jar
nohup java -jar -Dpinpoint.zookeeper.address=localhost pinpoint-collector-boot-2.3.3.jar > collector.log 2> collector-error.log &
- nohup: 프로세스가 터미널 종료 후에도 백그라운드에서 계속 실행되도록 함.
- java -jar: JAR 파일을 실행.
- -Dpinpoint.zookeeper.address=localhost: JVM 속성으로 ZooKeeper 주소를 localhost로 설정 (기본 포트 2181 가정).
- > collector.log: 표준 출력을 collector.log 파일로 리다이렉트.
- 2> collector-error.log: 표준 에러를 collector-error.log로 리다이렉트.
- &: 백그라운드에서 실행.
7. Pinpoint Web 다운로드 및 실행
wget https://github.com/pinpoint-apm/pinpoint/releases/download/v2.3.3/pinpoint-web-boot-2.3.3.jar
nohup java -jar -Dpinpoint.zookeeper.address=localhost pinpoint-web-boot-2.3.3.jar > web.log 2> web-error.log &
8. 8080 포트로 Pinpoint Web 접속
2) Agent 설정
1. 자바 설치
apt update
apt install -y openjdk-17-jdk
2. Pinpoint Agent다운로드 및 압축해제
wget https://repo1.maven.org/maven2/com/navercorp/pinpoint/pinpoint-agent/3.0.1/pinpoint-agent-3.0.1.tar.gz
tar zxvf pinpoint-agent-3.0.1.tar.gz
3. Pinpoint Agent 환경 설정에서 collector IP 주소 변경
vi ./pinpoint-agent-3.0.1/profiles/release/pinpoint.config
----------------------------------------------------
#23번 라인 수정
profiler.transport.grpc.collector.ip=[Pinpoint Collector IP Adress]
4. Pinpoint Agent와 함께 배포한 백엔드 서버(java) 실행
java -jar \
-javaagent:/root/pinpoint-agent-3.0.1/pinpoint-bootstrap-3.0.1.jar \
-Dpinpoint.agentId=my-project \
-Dpinpoint.applicationName=spring-server \
backend-ver-SNAPSHOT.jar
요약
Pinpoint는 분산 시스템의 성능을 모니터링하고 요청 흐름을 추적하는 도구로, HBase와 ZooKeeper를 활용해 데이터를 저장하고 시각화합니다. 애플리케이션 성능 문제를 쉽게 파악하고 싶을 때 유용하며, 특히 Java 기반 시스템에서 강력한 기능을 발휘합니다.
반응형
'개발 부트캠프 > 백엔드' 카테고리의 다른 글
[Trace] Jaeger (0) | 2025.02.21 |
---|---|
[Log] Log 중앙화 (0) | 2025.02.21 |
[Kafka] Kafka 실행 실습 (0) | 2025.02.17 |
[Spring] 환경 변수 설정 (0) | 2025.02.15 |
[Spring] @Component와 @Bean의 차이점 (0) | 2025.02.15 |