2 minute read

현재 운영 중인 시스템에는 APM(Application Performance Management) 도구가 없다.
이로 인해 트래픽이 몰리는 시간대에 서버 지연 혹은 장애가 발생하면 이데 대한 상세한 원인 분석이 어려운 상황이었다.

위와 같은 문제를 개선하기 위한 여러 방안 중, 퍼포먼스 트래킹에 강점을 가진 Pinpoint를 도입하기로 결정하였다.

[01] 왜 Pinpoint APM을 선택했는가?

시스템에 적합한 APM 도구를 선택하기 위해 다음과 같은 기준을 설정하였다.

1. EndPoint를 쉽게 추적할 수 있고 이를 시각화할 수 있는가?
2. 서버의 트래픽, 응답시간, SQL 등 구체적인 추적이 가능한가?

이러한 요구사항을 만족하는 APM 중에서 Kibana와 Elasticsearch 조합을 고려하였으나,
상대적으로 적용이 복잡하여 손쉬운 적용을 위해 Pinpoint를 선택하였다.

[02] Pinpoint APM이란?

Pinpoint는 대규모 분산 시스템의 성능 문제를 해결하기 위해 개발된 APM 도구이다.
사용자의 요청을 추적하고, 그 결과를 시각화하여 애플리케이션의 병목을 파악하고 최적화하는데 유용하다.

[03] Pinpoint 구조

Pinpoint는 크게 세 가지 구성 요소로 이루어져 있다.

- Pinpoint Agent: 애플리케이션 서버에 설치되어, 실시간 트랜잭션 데이터를 수집
- Pinpoint Collector: Agent로부터 수집된 데이터를 처리하고 HBase 데이터베이스에 저장
- Pinpoint Web: Collector로부터 수집된 데이터를 사용자에게 시각적으로 제공

[04] 시스템 환경

현재 OpenJdk 11 버전을 사용하고 있지만 Hbase 1.0 버전 사용을 위하여 jdk 1.8.0 버전을 별도 설치하였다.

설치된 버전은 아래와 같다.
- hbase-1.4.9
- pinpoint-2.4.2
- jdk-1.8.0

시스템 구성은 아래와 같다.

구성

Pinpoint Collector와 Web은 Batch VM에 설치하였고, Agent는 이중화된 WAS에 설치하였다.

[05] 설치 시작

※ Pinpoint 공식 설치 가이드 문서
https://pinpoint-apm.gitbook.io/pinpoint/getting-started/installation.

Hbase 설치

Hbase는 Apache에서 제공하는 빅데이터 저장소로, Pinpoint에서 사용하는 데이터베이스이다.
아래 명령어를 사용해 Hbase를 다운로드한다.

wget https://archive.apache.org/dist/hbase/1.4.9/hbase-1.4.9-bin.tar.gz


다른 버전을 원하면 Hbase archive에 접속하여 원하는 버전을 다운로드 받는다.
https://archive.apache.org/dist/hbase/.

다운로드 받은 tar 파일을 해제

tar -xvf hbase-1.4.9-bin.tar.gz


해제한 디렉토리로 이동해 Hbase를 실행

cd /hbase-1.4.9/bin
./start-hbase.sh


Hbase shell을 실행

./hbase shell

Hbase 실행

Pinpoint에 필요한 테이블을 생성하기 위해 Pinpoint에서 제공하는 스크립트를 파일을 생성
https://github.com/pinpoint-apm/pinpoint/blob/master/hbase/scripts/hbase-create.hbase.

vi hbase-create.hbase


스크립트 생성

./hbase shell hbase-create.hbase

Pinpoint Collector 설치

Pinpoint 공식 Github에서 Collector의 jar 파일을 다운로드
https://github.com/pinpoint-apm/pinpoint/releases.

공식 Github

wget https://github.com/pinpoint-apm/pinpoint/releases/download/v2.4.2/pinpoint-collector-boot-2.4.2.jar


다운로드 받은 jar 파일을 이용해 Collector를 실행

java -jar -Dpinpoint.zookeeper.address=localhost pinpoint-collector-boot-2.4.2.jar


실행 성공! 프로세스 실행

Pinpoint WEB 설치

Collector랑 동일하게 공식 Github에서 Web의 jar 파일을 다운로드

wget https://github.com/pinpoint-apm/pinpoint/releases/download/v2.4.2/pinpoint-web-boot-2.4.2.jar


다운로드 받은 jar 파일을 이용해 Web을 실행한다.
기본 포트는 8080이지만, 포트 중복을 피하기 위해 8015포트로 변경하였다.

java -jar -Dpinpoint.zookeeper.address=localhost pinpoint-web-boot-2.4.2.jar --server.port=8015


Collector와 WEB이 정상적으로 실행되었다면 WEB Port로 접근하여 Pinpoint UI를 확인할 수 있다.

Pinpoint Aget 설치

Pinpoint의 공식 Github에서 Agent의 tar.gz 파일을 다운로드

wget https://github.com/pinpoint-apm/pinpoint/releases/download/v2.4.2/pinpoint-agent-2.4.2.tar.gz


다운로드 받은 tar 파일을 해제

tar -xvf pinpoint-agent-2.4.2.tar.gz


별도의 VM에 설치된 Collector / Web 과 Agent가 통신을 할 수 있도록 설정 파일을 변경해준다

vi pinpoint-agent-2.4.2/pinpoint-root.config 


설정 파일에서 profiler.transport.grpc.collector.ip 값을 배치 VM IP로 변경해준다.

profiler.transport.grpc.collector.ip = 배치 VM IP


설정이 완료되면 Agent를 실행

java -jar -javaagent:/service/apm/pinpoint-agent-2.4.2/pinpoint-bootstrap-2.4.2.jar -Dpinpoint.applicationName=dev -Dpinpoint.config=/service/apm/pinpoint-agent-2.4.2/pinpoint-root.config -Dspring.profiles.active=dev /service/app.jar


[06] 후기

아래와 같이 실시한으로 Agent가 수집한 데이터를 Web에서 확인할 수 있다. pinpoin 실행

Pinpoint APM의 도입 과정은 생각보다 간결하였다.
Pinpoint가 제공하는 문서와 자원들이 상당히 잘 정리되어 있어서, 실제로 필요한 설정 파일이나 스크립트들을 찾는데 큰 어려움이 없었으나, 설정 파일을 다루는 과정에서는 약간의 경험과 기술적 이해가 필요하였다. 특히, VM 간 통신을 설정하는 부분에서는 배치 VM의 IP를 올바르게 설정해야 했고, 이런 부분들은 Pinpoint를 처음 도입하는 사용자들에게는 약간의 진입 장벽이 될 수 있다고 생각한다.

결과적으로, Pinpoint는 트래픽 분석, 시스템 모니터링, 병목 현상 해결 등 다양한 분야에서 활용될 수 있으며, 이를 통해 시스템의 안정성과 효율성을 향상시킬 수 있을거라 생각한다. 아직 Pinpoint에 대한 전체적인 기능을 모르기 때문에 다음 게시물에서는 Pinpoint의 상세 기능에 대해 작성해보려고 한다.