반응형

핀포인트(Pinpoint)란?

Pinpoint는 애플리케이션 성능 모니터링(APM, Application Performance Monitoring)을 위한 오픈소스 도구입니다. 주로 분산 시스템에서 애플리케이션의 성능 문제를 추적하고 분석하는 데 사용됩니다. Pinpoint는 특히 요청 흐름(request tracing)을 시각화하고, 병목 지점을 식별하며, 실시간 모니터링을 제공하는 데 강점을 가지고 있습니다. 한국의 네이버(Naver)에서 개발했으며, 현재는 오픈소스 프로젝트로 GitHub에서 관리되고 있습니다.
 

핀포인트의 주요 기능

  • 분산 추적(Distributed Tracing):
    • 마이크로서비스 환경에서 하나의 요청이 여러 서비스를 거치는 경로를 추적합니다.
    • 예: 사용자 요청 → 프론트엔드 → 백엔드 API → 데이터베이스 호출 과정을 시각화.

  • 실시간 모니터링:
    • 애플리케이션의 응답 시간, 처리량, 오류율 등을 실시간으로 확인.

  • 성능 분석:
    • 느린 요청이나 오류가 발생한 지점을 정확히 파악.
    • 메서드 레벨까지 세부적으로 성능 데이터 제공.

  • 시각화:
    • 웹 기반 대시보드로 트랜잭션 흐름도, 서버 상태, 통계 등을 표시.

  • 경량 에이전트:
    • 애플리케이션에 추가되는 Pinpoint 에이전트가 성능에 미치는 영향을 최소화.

 

핀포인트의 구성 요소

  1. Pinpoint Agent:
    • 모니터링 대상 애플리케이션(Java 기반)에 설치.
    • 애플리케이션의 요청 데이터(호출 스택, 시간 등)와 같은 성능 관련 지표를 수집해 Collector로 전달.
  2. Pinpoint Collector:
    • 에이전트로부터 수집된 데이터를 받아 HBase에 저장.
    • ZooKeeper로 데이터 조정 및 클러스터 관리.
  3. Pinpoint Web:
    • 저장된 데이터를 웹 UI로 시각화.
    • 사용자 인터페이스를 통해 모니터링 및 분석 제공.
  4. HBase:
    • Pinpoint의 백엔드 데이터베이스.
    • 수집된 추적 데이터와 통계를 저장.
  5. 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

+ Recent posts