DevJong12

[OrientalUnity][Spring] 컨테이너로 빌드되는 어플리케이션에 PinPoint의 Agent적용기 본문

프로젝트/OrientalUnity

[OrientalUnity][Spring] 컨테이너로 빌드되는 어플리케이션에 PinPoint의 Agent적용기

Jong12 2023. 11. 7. 13:05
728x90

목차

     

    1️⃣ 글을 시작하기에 앞서...

    해당 글은 바로 적용할 수 없고 선수 과정으로 [OrientalUnity] PinPoint의 설치 과정이 이뤄져야 한다.

     

    그 이유는 해당 작업은 Agent를 설정하는 것으로, PinPoint의 경우에는 Agent → Collector로 정보를 전달을 해주기 때문에 Agent의 정보를 수집해야 하는 Collector가 존재해야 하기 떄문이다.

     

    위의 링크는 이러한 Collector, 그리고 가시적으로 확인이 가능한 Web어플리케이션을 실행하는 과정이니 먼저 확인하기 바란다.

     

    또한 해당 글은 컨테이너 이미지로 빌드하고, 실행하는 Spring Boot ApplicationPinPoint를 적용하는 과정이며 실제 클라우드환경이기 때문에, 유사한 환경에서만 참고하기를 바란다.

     

    Localhost를 위한 설정이 아니라는 점 참고하기 바란다.


    2️⃣ Agent 다운로드

    1. PinPoint Mange페이지 접속

    아래의 이미지 처럼 PinPoint의 DashBoard에 우선적으로 접속을 해야 한다. 

     

    2. PinPoint Agent의  설치페이지 접근 및 다운로드

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

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

     

    3. Agent 압축 해제 

    링크를 다운로드 받으면 생기는 ZIP파일을 압축해제를 한다.


    3️⃣ SpringBoot Project에 추가 및 설정

    1. Spring Boot Project 파일 추가

    위에서 압축해제한 Agent파일들을 다음과 같이 프로젝트 내부에 디렉토리를 생성하고 파일을 이동시킨다.

     

    2. PinPoint Agent 설정 변경

    하기 2개의 설정에서 profiler.transport.grpc.collector.ip라는 설정을 Collector가 설치된 NCP의 서버에 Private IP를 지정해줬다.

     

    만약 local에서만 작업을 진행할 경우에는 pinpoint.profiler.profiles.active를 local로 변경하기 바란다.

    local인 경우에는 default셋팅이 127.0.0.1이기 때문이니 참고하기 바란다.


    4️⃣ Dockerfile Option 추가하기

    1.PinPoint의 파일 복사

    Project에 추가한 PinPoint의 파일Docker 컨테이너 내부에 파일구조 그대로 생성을 해야한다.

    해당 과정은 이러한 작업을 진행하는 커맨드이다.

     

    RUN mkdir /pinpoint
    
    COPY ${JAR_FILE} /
    COPY pinpoint/ /pinpoint/

     

    2.PinPoint VMOptions 커맨드 추가

    필자의 경우에는 2.5.2버전의 PinPoint를 활용중이며, 실제 폴더구조를 복사할 경우 /pinpoint/pinpoint-bootstrap-2.5.2.jar파일이 경로로 들어가게 된다. 이 파일을 agent로 같이 실행하게 하였다.

     

    applicationName의 경우에는 PinPoint의 DashBoard에 출력을 하고자 하는 App으로 기록을 하면 되며, agentId의 경우에는 HOST_NAME을 컨테이너 명 또는 서버의 HostName으로 받고자 하여 설정하였다.

     

    둘다 임의로 변경을 해도 상관은 없으나, agentId는 분산처리를 하는 경우 각각 다른 agentId를 가져갈 수 있게 하는걸 권장한다.

    -javaagent:/pinpoint/pinpoint-bootstrap-2.5.2.jar \
    -Dpinpoint.applicationName=be-app \
    -Dpinpoint.agentId=$HOST_NAME \

     


    5️⃣ DockerFile 전문

    필자가 적용했던 Dockerfile의 전문이다.

    실제 옵션을 너무 많이 부여해야 했었어서, 조금 어지럽지만 위의 내용이 모두 포함되어 있는 것을 볼 수 있다.


    6️⃣ 글을 마치며..

    해당 작업을 하면서 사실 모든걸 처음해봤는데 이론, 즉 가정을 세워가면서 작업을 했었다.

     

    과정에서 메모리가 부족해서 Scale Up을 문제라든가, 통신이 안되는 문제라든가 여러가지가 존재했지만 내가 세웠던 이론이 틀리지는 않다보니 작업은 빠르게 했었다.

     

    세운 가정이 다음과 같다.

    • PinPoint Agent를 같이 물고 들어가야 하니까 파일을 전체복사해 가야겠지?
    • Agent도 자기네 파일구조로 실행을 하니까 구조그대로 보존을 해서 복사해야겠지?
    • Collector서버로 정보를 전달해야 하니 네트워크를 알아야 하고 ACG포트가 뚫려있어야 하며, Collectort서버를 기록해 줘야겠지?
    • HostName이 한개로만 보인다면 보기 불편하거나 이슈사항이 있을 수 있겠지? 어떻게 유기적으로 하지?

    이런 가정이 전부 맞아 떨어 지다보니 작업자체가 되다 보니 빠르게, 그리고 작업이 진행된다는게 재밌게 했었고 그러면서도 APM툴에 대해서 조금 더 깊이 이해할 수 있었던 과정같다.

    728x90
    Comments