pinpoint는 네이버에서 만든 대규모 분산 시스템의 성능을 분석하고 문제를 진단, 처리하는 플랫폼 즉, APM(Application Performance Monitoring) 도구 입니다. 내부적으로 서버맵, 실시간 활성 스레드 차트, 요청/응답 차트, API 호출 상세 기록, 서버의 상태를 실시간으로 시각화하여 볼 수 있는 기능을 제공합니다.
Pinpoint는 코드 수준의 정보를 추적합니다. 그러다 보니 트래픽이 많아질 경우 데이터의 양이 폭발적으로 증가한다는 단점이 있습니다.
이를 해결하기 위해 해당 정보들을 HBase에 담아 활용합니다.
HBase
HDFS(Hadoop Distributed File System, 하둡 분산 파일 시스템으로 하둡의 저장소를 담당)으로 구현한 컬럼 기반 분산 NoSQL 데이터 저장소
현재 저희 프로젝트는 두 개의 EC2 환경으로 구성되어 있으며 각각 PloNit
서비스 Plogging
서비스로 나뉘어 운영되고 있습니다. 원래대로라면 각 모듈을 별도의 서버에 구축해야하지만 간단하게 적용하기 위해 PloNit EC2
서버에 Collector와 HBase, Web을 운영하는 형식으로 했습니다. 따라서, 아래와 같이 구성되어 있습니다.
ec2는 Amazon Linux로 진행했습니다.
이전에 Java를 설치하지 않았다면 설치하고 진행해야합니다. 설치를 했더라도 JAVA_HOME
설정을 하지 않았다면 아래에서 HBase 설치할 때 위와 관련된 화면이 뜨게됩니다. 아래와 같이 설정하겠습니다.
$ which java #자바 설치 경로 확인
/usr/bin/java
$ readlink -f /usr/bin/java
/usr/lib/jvm/java-11-openjdk-amd64/bin/java
JAVA_HOME
설정
sudo vi /etc/profile
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=$JAVA_HOME/jre/lib:$JAVA_HOME/lib/tools.jar
source /etc/profile
처음에 HBase를 서버에 있는 Java 11 버전으로 설정했더니 나중에 테이블이 만들어지지 않아서 원인을 찾아봤더니 HBase는 Java 8 버전으로 해야 됩니다. 그래서 저는 서버는 Java 11로 HBase는 Java8로 설정해주었습니다.
wget https://archive.apache.org/dist/hbase/1.2.7/hbase-1.2.7-bin.tar.gz
tar xzvf hbase-1.2.7-bin.tar.gz
vi /home/ubuntu/hbase-1.2.7/conf/hbase-env.sh
# HBase에만 Java 8 버전 적용
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-amd64
# 이 옵션을 주석처리 하지 않으면 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"
# 매번 hbase-1.2.7 를 입력하기 번거로우니 해당 디렉토리에 link를 걸어서 hbase로 사용하겠습니다.
ln -s hbase-1.2.7 hbase
# hbase 시작
hbase/bin/start-hbase.sh
Pinpoint Agent로부터 받은 추적 데이터들을 담을 테이블을 생성해야하는데 이는 스크립트를 다운받아서 적용하면 됩니다.
# 스크립트 다운
wget https://raw.githubusercontent.com/pinpoint-apm/pinpoint/master/hbase/scripts/hbase-create.hbase
# 스크립트 실행
hbase/bin/hbase shell ../hbase-create.hbase
같은 Monitoring 인스턴스에 Pinpoint Collector도 설치해줍니다.
# jar 파일 다운로드
wget https://github.com/pinpoint-apm/pinpoint/releases/download/v2.2.2/pinpoint-collector-boot-2.2.2.jar
# 실행권한 부여하기
chmod +x pinpoint-collector-boot-2.2.2.jar
# 실행
nohup java -jar -Dpinpoint.zookeeper.address=localhost pinpoint-collector-boot-2.2.2.jar >/dev/null 2>&1 &
# jar 파일 다운
wget https://github.com/pinpoint-apm/pinpoint/releases/download/v2.2.2/pinpoint-web-boot-2.2.2.jar
# 실행 권한 부여
chmod +x pinpoint-web-boot-2.2.2.jar
# 실행
nohup java -jar -Dpinpoint.zookeeper.address=localhost pinpoint-web-boot-2.2.2.jar >/dev/null 2>&1 &
여기까지 성공적으로 따라왔다면 아래와 같은 화면이 나오게 됩니다.
# agent 설치
wget https://github.com/pinpoint-apm/pinpoint/releases/download/v2.2.2/pinpoint-agent-2.2.2.tar.gz
# 압축 해제
tar xvzf pinpoint-agent-2.2.2.tar.gz
# 이동
cd pinpoint-agent-2.2.2
# config 파일 수정
sudo vi pinpoint-root.config
# 앞에서 구성한 monitoring EC2의 ip로 수정해줍니다.
profiler.transport.grpc.collector.ip=pinpoint ip로 변경
https://guide.ncloud-docs.com/docs/pinpoint-pinpoint-1-2
https://roopredev.tistory.com/9