Pinpoint 적용하기

회사에서 서비스에 적용할 APM 툴이 필요하여 여러 가지 방법을 찾아보던 중, 네이버에서 개발 중인 Pinpoint를 도입하기로 결정했다.


APM이란?

Application Performance Management
애플리케이션 성능 관리라는 뜻으로, 소프트웨어 애플리케이션의 성능과 가용성을 모니터링 및 관리하는 것을 일컫는다.


Pinpoint란?

대규모 애플리케이션의 성능 및 구조를 분석하고 문제를 진단 및 처리하는 분산 시스템 추적 플랫폼으로, 네이버에서 개발하고 있다.

Pinpoint의 장점

오픈 소스

Pinpoint는 오픈 소스로, 유료 APM 솔루션들과 달리 오픈 소스 라이센스 범위 내에서 자유롭게 사용할 수 있다. 또한 네이버에서 개발 중인 툴이기 때문에 한국어 문서도 찾아볼 수 있다.

간편한 설치

설치 및 적용이 간편하고, UI도 직관적이다.

Pinpoint의 구조

Pinpoint는 Hbase를 매트릭 저장소로 사용한다.

Agent가 Application의 데이터를 수집하여 Collector에 전송하면, Collector가 해당 데이터를 Hbase에 적재하고, Web UI에서 Hbase의 데이터를 읽어 화면에 출력하는 구조이다.

Agent(App) -> Collector -> Hbase -> Web의 방식인 것이다.

더 자세하게 알아보고 싶다면 네이버 개발 블로그에 잘 정리되어 있으니, 참고하면 되겠다.


Pinpoint 적용

설치 환경

CentOS 7.6
Open JDK 1.8
Hbase 2.2.7
Pinpoint 2.3.0


1. Hbase 설치

먼저 Pinpoint의 DB가 될 Hbase부터 설치해야 한다.

네이버에서 제공하는 Apache Mirror에서 다운로드하면 된다.

wget https://mirror.navercorp.com/apache/hbase/2.2.7/hbase-2.2.7-bin.tar.gz

Hbase는 Java 기반이기 때문에, JDK의 경로를 등록해줘야 한다.

vi /conf/hbase-env.sh

Java가 설치된 경로와 동일하게 설정하면 된다.

export JAVA_HOME=java-path

Hbase를 시작한 후, Pinpoint에 사용되는 테이블 생성 Hbase Script를 실행한다.

./bin/start-hbase.sh
./bin/hbase shell hbase-create.hbase


2. Pinpoint 설치

Pinpoint의 설치 방법에는 빌드 결과를 바로 다운로드하는 방법이 있고, 수동으로 직접 하나하나 세팅하는 방법이 있다.

본 포스팅에서는 빌드 결과를 바로 다운로드해 빠르게 적용한다.

우선 Github에서 Pinpoint의 최신 릴리즈를 다운로드 받는다. 본 포스팅에서는 Agent, Web, Collector만 사용한다.

이후, Collector, Web 애플리케이션을 실행시킨다.

nohup java -jar -Dpinpoint.zookeeper.address=localhost pinpoint-collector-boot-2.3.0.jar
nohup java -jar -Dpinpoint.zookeeper.address=localhost pinpoint-web-boot-2.3.0.jar

아래와 같이 localhost:8080에서 빈 Pinpoint 페이지가 나온다면 성공이다.


3. 실행

모니터링할 애플리케이션을 실행 시, -javaagent 파라미터에 Pinpoint를 지정하고 Pinpoint 전용 파라미터들을 추가한다.

agentId는 해당 애플리케이션에 붙을 Agent의 구분 ID, applicationName은 WebUI에 표시될 애플리케이션의 이름, config는 Pinpoint 설정 파일의 위치이다.

java -jar -javaagent:(PINPOINT Root)/pinpoint-bootstrap-2.3.0.jar -Dpinpoint.agentId=(Agent Id) -Dpinpoint.applicationName=(Application Name) -Dpinpoint.config=(pinpoint-root.config Root) (JAR NAME).jar

아래와 같이 웹페이지에서 추가된 애플리케이션을 확인할 수 있다면 성공이다.


4. 외부 서버 연결

Pinpoint 서버와 Agent 서버(즉, 모니터링 대상 애플리케이션)가 다를 때는, pinpoint-root.config에서 Pinpoint 서버의 IP를 지정해 주어야 한다.

localhost를 원하는 IP로 변경해주면 된다. 방화벽이 있을 경우, 9991~9993번 포트를 열어줘야 한다.

# gRPC Configuration
profiler.transport.grpc.collector.ip=localhost


Reference

Pinpoint GitHub
Pinpoint 빠른 시작 가이드