DevJong12

[OrientalUnity]PinPoint의 설치과정 본문

프로젝트/OrientalUnity

[OrientalUnity]PinPoint의 설치과정

Jong12 2023. 11. 6. 17:12
728x90

목차

     

    과거에 사용이력이 있어서 PinPoint를 적은줄 알았는데.. 적은 적도 없었을 줄은 몰랐다..

    1️⃣ PinPoint란?

    PinPoint는 어플리케이션 성능 관리(APM) 도구 중 하나로, 분산 시스템 환경에서 애플리케이션의 성능을 모니터링하고 분석하는 데 사용된다.

    특히 대규모의 분산 어플리케이션 및 MSA에서 성능의 문제를 식별하고 해결하는데 도움을 주는 도구이다.

     

    이건 그냥 GPT한테서 받은 대답으로, PinPoint는 어플리케이션에 대한 성능관리로 하기 4가지의 기능을 제공한다.

    1. 모니터링: Pinpoint는 애플리케이션의 성능 데이터를 실시간으로 수집하고 모니터링합니다. 이는 서버, 데이터베이스, 네트워크, HTTP 요청 및 기타 리소스와 관련된 성능 지표를 추적하는 데 도움이 됩니다.
    2. 추적 및 분석: Pinpoint는 애플리케이션 트랜잭션을 추적하고 이를 분석하여 어플리케이션 내에서 어떤 부분에서 성능 문제가 발생하는지 식별합니다. 이는 병목 현상, 에러, 지연 및 다른 성능 이슈를 신속하게 해결하는 데 도움이 됩니다.
    3. 대시보드와 경고: Pinpoint는 사용자에게 실시간 대시보드를 제공하여 애플리케이션의 현재 상태와 성능 지표를 시각적으로 확인할 수 있도록 합니다. 또한 사용자가 지정한 임계값을 초과하는 경우 경고를 생성하고 조치를 취할 수 있도록 지원합니다.
    4. 분산 추적: Pinpoint는 애플리케이션 내에서 요청의 전체 수명주기를 추적하므로 분산 시스템에서 발생하는 복잡한 문제를 해결하는 데 도움이 됩니다.

     

    실제로 맞다보니 수정은 하지 않았다. 그리고 PinPoint를 직접 설치할 경우에는 서버비를 제외하고는 무료로 사용할 수 있는 OpenSource이지만,  Naver Cloud Platform 에서도 PinPoint에 대해서 유료로 Service를 하고 있는 사항이다.

    NCP의 PinPoint의 정의 역시 GPT의 대답과 거의 동일한 사항이고, 그럴 수 밖에 없다고는 생각한다 ㅎㅎ...

     

    아래는 Naver Clout Platform에서 가이드하는 PinPoint에 대한 설명이다.

     

     

    마지막으로 PinPoint의 Architecture는 아래의 이미지와 같다.

    Host는 Agent를 실행시키며, Agent에서는 Collector의 주소로 발송을 한다. 

    이후 사용자는 Web을 통해서 PinPoint에 수집된 정보를 확인이 가능하게 된다.

     

    이미지는 PinPoint 공식 문서에서 첨부하였다.


    2️⃣ 설치하는 이유? 아티클을 작성하는 이유?

    사실 토이프로젝트기때문에, 일정이 3주라는 짧은 시간이기 때문에 굳이 설치할 필요는 없었다.

    하지만 해보고 싶었던 부분이 빠르게 MVP를 개발하고 코드리팩토링하면서 성능증가하는 부분까지 해보고 싶었다..(비록 물건너갔지만)

     

    또한 기록을 하게 된 이유는 NCP의 PinPoint를 사용하려 하면서 발생한 부분들과 같이 기록을 하기 위함이다.


    3️⃣ NaverCloud Pinpoint 생성 및 사용방법

    1. PinPoint Repository 생성

    NCP의 PinPoint Cloud 들어가서 아래의 이미지처럼 생성 모달창을 띄우고, Repository짓고 관리자 계정을 설정하면 생성이 된다.

    2. PinPoint DashBoard 접속

    생성을 할 경우 아래의 창모양의 사이트를 이동할 수 있는 바로가기 버튼이 Repositor에 생성된다.

    3. PinPoint Agent의 다운

    좌측 하단Configuration → Installation 을 클릭하게 될 경우 확인이 가능한 페이지이다.

    여기에서 Download Link를 클릭하게 될 경우 PinPoint의 Agent를 Install이 가능하다.

     

    추가로 2.5.2는 실제 내가 Docker로 Install한 버전이기 때문에 버전의 차이는 존재한다.


    4️⃣ NCP PinPoint의 문제점

    실제 Naver의 PinPoint Repository를 생성한뒤 agent를 다운로드 받은 이후 Spring Boot Application과 같이 실행을 했었다.

    이후 Spring Boot Application가 PinPoint Agent와 충돌이 지속적으로 발생하면서 실행이 되지 않는 Issue가 발생하였다...

     

     

    PinPoint의 Agent 버전을 확인해보게 되었고.. 아래의 이미지처럼 2.2.3을... 다운로드 받고 있었다...

     

     

    이후 PinPoint의 Repository를 통해 요구되는 JDK의 버전을 확인해보게 되었으며, 2.2.x버전은 JDK7 ~ 14를 Required를 하고 있었다.


    5️⃣ Issue그리고 해결방법

    필자의 프로젝트의 경우 Spring Boot 3를 적용한 상태이다.

    이 자체가 문제인데, Spring Boot 3로 버전이 올라가면서 최소 JDK 사용버전은 17이상을 활용해야 한다.

     

    하지만 NCP의 PinPoint는 2.2.3으로 JDK7 ~ 14까지만 지원이 되고 있다. 즉 NCP에서 제공하는 PinPoint 서비스를 사용할 수 있는 방법이 없다.

     

    해결 방법은 JDK17을 지원하는 2.3.x 이상의 버전으로 설치를 진행하는 것이며, Collector서버부터 PinPoint Web, Hbase 등 부수적인 어플리케이션도 모두 직접 설치를 진행해야 하며 필자의 경우에는 2.5.2버전을 채택하였다. 

    걱정은 하지말자, 이를 Docker Compose로 PinPoint에서 모두 준비를 해놓았으니, 우리는 커맨드만 입력하면 된다..!

     

    설치의 경우에는 PinPoint Docker Repository를 참고하면 된다.

     

    ※ 설치는 Docker를 쓰는걸 추천한다.. 직접 모든걸 설치하려고 할 경우에 너무 많은걸 직접 설치해야 하는데 머리가 지끈지끈거릴 정도로 불편하다. 반면에 Docker Compose를 사용할 경우 관계된 모든 어플리케이션이 모두 동시에 설치가 되기 떄문에 설치에 부담이 줄어들게 된다.


    6️⃣ Docker Compose를 활용한 PinPoint 설치방법

    README에 존재하는 Command이다. 실제 이게 전부이며, {tag}의 경우에는 Repository에 존재하는 Version의 Tag명을 기입하면 된다.
    git clone https://github.com/pinpoint-apm/pinpoint-docker.git
    cd pinpoint-docker
    git checkout {tag}
    docker-compose -f docker-compose.yml -f docker-compose-metric.yml build

     

    ※ 필자의 경우에는 Clone을 진행한 이후 docker-compose.yml에서 pinpoint-quickstart, pinpoint-agent를 주석처리를 하였다.

    이유는 agent자체를 사용해야 할 서버는 다른 서버이기 떄문에, PinPoint를 설치해야 하는 서버에서는 불필요한 Agent이기 떄문이다.


    7️⃣ 결과물

    음..잘뜬다..실제 Agent를 설치받아 Application과 함께 실행을 시키고 테스트를 해본 결과 성공적으로 수집이 진행된다. 

     

    ※ 참고로 docker-compose.yml에서 QuickStart, Agent외에 따로 수정한 부분이 없는 경우 8080포트로 접속이 가능하며,

    http를 활용해 접속이 가능하며, http://{IP주소}:8080 으로 접속을 하면 된다


    8️⃣ Docker를 통한 PinPoint설치 이후의 Issue사항

    PinPoint를 설치한 서버의 경우 실제로 Jenkins를 실행하면서도 내부 Private서버로 접속이 가능한 유일한 Proxy Server 였다..

     

    초기 Proxy Server의 경우에는 2 Core CPU, 4GB RAM의 서버였고, PinPoint를 설치한 이후 서버가 메모리 문제로 살아있지만 죽어 버렸다..(진짜로 살아있는데 죽어있는 거였다.. Private Server작업중이었는데 SSH가 끊기고...)

     

    해당 문제는 사실 자원이 부족한 문제라 바로 UpScale을 진행하였으며,  4 Core CPU, 8GB RAM의 서버로 증량하였다.

     

    이후 모니터링을 해본 결과 8GB에서도 PinPoint + Jenkins를 사용할 때 메모리의 사용이 80%에서 머물러 있는 것을 보았고, 분산환경의 요청을 모두 받게 되면 더 올라갈 수 있다 판단하여 최종적으로 4 Core CPU, 16GB RAM의 서버로 최종 증량 후 안정화가 되는 것까지 확인하였다.


    9️⃣ 글을 마치며

    2.2.3은 정말 당황스러웠다... 버전문제가 이거 한개만이 아니라 모든 부분에서 서비스를 이용하려 하면 버전문제가 있었다..

     

    또한 직접 설치한 서버의 자원문제도 존재하게 되었는데 설치를 하면서 PinPoint가 많은 자원을 차지했던 부분이나, Scale Up이후 정상적으로 작동이 되는게 재밌게 해볼수 있던 요소 같다.

     

    또.. 클라우드 바우처로 돈이 많다보니 정말 마음편하게 인프라를 막 갖춰보는게 정말 재밌는 요소라고 생각한다 ㅋㅋ;;

     

    PinPoint와 관련해서는 Spring Boot Application에서 Docker에 PinPoint Agent를 넣고 실행하는 방법을 기록할 예정이다.


    🔟 Reference

    - https://pinpoint-apm.gitbook.io/pinpoint/documents/system_metric

    - Chat GPT

    - https://www.ncloud.com/

    - https://github.com/pinpoint-apm/pinpoint

    - https://github.com/pinpoint-apm/pinpoint-docker/tree/master

    728x90
    Comments