블랑v 2024. 1. 17. 13:42

 

https://guide-fin.ncloud-docs.com/docs/pinpoint-pinpoint-1-2

 

Pinpoint 시작 가이드 - Pinpoint

 

guide-fin.ncloud-docs.com

 

 

Agent 설치

 

1. 설치와 tomcat 설정 변경 명령어

https://tiqndjd12.tistory.com/96

 

pinpoint-agent 설치

pinpoint-agent를 설치하면 tomcat과 pinpoint를 연계할 수 있습니다. pinpoint-agent를 설치하기 위해 /home 디렉토리 밑에 pinpoint-agent 디렉토리를 생성하고 pinpoint-agent를 다운받습니다. 다운이 제대로 되었는

tiqndjd12.tistory.com

 

2. 간단 구조(명령어) 설명

https://hays99.tistory.com/224

 

[Pinpoint] 핀포인트 v2.3.3 설치

# Pinpoint 다운로드 url https://github.com/pinpoint-apm/pinpoint/releases/tag/v2.3.3 # point server쪽 jdk 설치 $ sudo apt-get update $ sudo apt-get install openjdk-8-jdk $ java -version $ which java /usr/bin/java $ readlink -f /usr/bin/java /usr/lib

hays99.tistory.com

 

핀포인트 agent를 설치하고 이를 설정한다. config 폴더 안의 파일에서 collector ip를 설정해주자.

 

Agent -> Collector로 정보 전송 시 기본적으로 9991 ~ 9993 포트를 사용한다. 따라서 해당 포트가 열려 있어야 한다.

 

실행 명령어

java -javaagent:[Pinpoint Agent 경로]/pinpoint-bootstrap-[버전].jar -Dpinpoint.agentId=[에이전트 ID] -Dpinpoint.applicationName=[애플리케이션 이름] -jar [애플리케이션 JAR 파일]

java -javaagent:[Pinpoint Agent 경로]/pinpoint-bootstrap-[버전].jar -Dpinpoint.agentId=[에이전트 ID] -Dpinpoint.applicationName=[애플리케이션 이름] -jar [애플리케이션 JAR 파일]

 

config 설정을 진행하고, 메인 모듈의 catalina.sh 파일에서 설정값을 변경하였다(tomcat 내부)

 

# Pinpoint Agent .. 

JAVA_OPTS는 TOMCAT을 사용하는 모든 자바 프로세스에 영향을 끼치는 변수, 
CATALINA_OPTS는 JVM의 메모리 설정, 가비지 컬렉션 로깅 등 JVM 수준의 설정에 주로 사용한다.
따라서 해당 변수를 주로 사용할 것.

CATALINA_OPTS="$CATALINA_OPTS -javaagent:/path/to/pinpoint-bootstrap-<version>.jar"
CATALINA_OPTS="$CATALINA_OPTS -Dpinpoint.agentId=<AgentId>"
CATALINA_OPTS="$CATALINA_OPTS -Dpinpoint.applicationName=<ApplicationName>"
#변경 못했는데 여기 경로도 추가해야 함! 아래 오류 해결 부분 참조

# ... 기존 스크립트의 나머지 부분 ...

# ----- Execute The Requested Command -----------------------------------------


여기서 /path/to/pinpoint-bootstrap-<version>.jar는 Pinpoint Agent 파일의 실제 경로이며, 
<AgentId>와 <ApplicationName>은 각각 Pinpoint에서 사용할 에이전트 ID와 애플리케이션 이름
으로 대체해야 한다.

 

설치 관련 : catalina.sh보다 setenv.sh에 변경 파일을 저장할 것

setenv.sh는 Tomcat 구성의 일부로서, Tomcat 실행 시 환경 변수와 JVM 옵션을 설정하는 데 사용된다. 이 파일은 Tomcat의 주 실행 스크립트인 catalina.sh와 분리되어 있어, Tomcat 업그레이드 시 커스텀 설정을 유지하기 더 쉽게 한다.

따라서, Pinpoint 에이전트와 같은 JVM 옵션을 설정하는 경우, setenv.sh 파일에 다음과 같이 추가하는 것이 좋다.

 

이 과정에서 권한 문제가 있었다.

1. 특정 유저의 권한으로 실행해야 하니 해당 계정으로 sh 파일을 생성할 것.

2. sh 파일의 실행 권한을 부여할 것

관련 레퍼 : https://deeplify.dev/server/bash/create-execute-file-in-linux

3. pinpoint.jar을 실행할 권한이 있는지? (root 계정으로 이를 설치했다.)

 

에이전트 파일 권한 확인: 먼저, Pinpoint 에이전트 파일들이 abc 사용자에 의해 읽고 실행될 수 있는지 확인한다.

이는 ls -l /opt/pinpoint/pinpoint-agent-2.3.3/ 명령어를 통해 확인할 수 있다.

 

확인 결과, 권한이 없었다. 대부분의 파일과 디렉토리는 소유자(500 사용자)에게만 쓰기 권한이 있고, 그룹과 다른 사용자들은 읽기와 실행 권한만 가지고 있다.

 

1. 디렉토리 및 파일의 소유권 변경
sudo chown -R abc:abc /opt/pinpoint/pinpoint-agent-2.3.3/

2. 읽기 및 실행 권한 부여
sudo chmod -R u+rX /opt/pinpoint/pinpoint-agent-2.3.3/

 

 

Java Agent와 Pinpoint의 관계

Pinpoint의 Agent는 Java에서 제공하는 Java Agent API를 사용한다.

Java Agent는 JVM(Java Virtual Machine)에 동적으로 바이트코드를 조작하거나 모니터링 기능을 추가할 수 있는 메커니즘을 제공한다.

 

What are Java(JVM) Agent?
JVM Agent는 JVM에서 동작하는 Java 어플리케이션으로 JVM의 다양한 이벤트를 전달받거나 정보 질의, 바이트 코드 제어 등을 특정 API(Instrumentation API -java.lang.instrument-)를 통하여 수행할 수 있다.

보통 개발 도구 또는 모니터링 도구 개발에 응용된다.

바이트 코드 변조를 통한 개발의 편의성을 제공하는 AspectJ의 LTW(Load Time Weaver)나 Lombok과 같은 오픈소스가 대표적인 Java Agent의 활용 예이다.

Features
Agent는 지정된 JVM의 실행 가능한 최초 진입점인 ‘main’ 메서드를 가로채기 할 수 있다.
지정된 JVM에서 실행된다.
지정된 JVM의 동일한 System Class Loader 내에서 로드된다.
지정된 JVM의 Security Policy 및 Context의 영향을 받는다.
실행시간에 동적으로 bytecode를 조작할 수 있다.

Agent의 단일 진입점은 위와 같이 ‘premain’ 메서드를 구현하면 되며 바이트 코드를 포함한 추가적인 정보 수집 도구로 Instrumentation 인터페이스를 제공받을 수 있다.

 

 

 

에러 발생 : pinpoint web (명령어 문제)

SMS 모듈에 JVM agent를 설치하고 리부트 시 에러가 발생했다.

--> 이는 Hbase를 실행하지 않아서 발생한 문제.. 다시 리부트 할 것

 

Hbase Zookeeper 주소 에러가 발생하는 듯.

 

이를 위해서 Hbase 구동시 master log를 살펴보았음

 

Java.net.ConnectException 발생. 

 

=> 연결 거부 문제: java.net.ConnectException: Connection refused 오류는 HBase가 특정 서비스(여기서는 localhost의 35608 포트)에 연결을 시도했지만, 연결이 거부되었음.

해당 포트 역시 개방 조치
그냥 전체적으로 Web-boot가 hbase의 Zookeeper를 찾지 못함
'Unable to create ZooKeeper Connection' 에러 발생

 

https://blog.naver.com/hanajava/221999594041

 

[hana] pinpoint 2.0.2 설치 및 설정

참고 [hana] pinpoint 1.8.5 설치 및 설정http://naver.github.io/pinpoint/2.0.2/installation....

blog.naver.com

 

 

에러 해결

 

nohup java -jar -Dpinpoint.zookeeper.address=localhost 파일명 >/dev/null 2>&1 &

이 구문은 Java 시스템 프로퍼티 -Dpinpoint.zookeeper.address=localhost을 설정한다. 
이는 Pinpoint가 ZooKeeper 서버로 localhost를 사용하도록 지시한다.

이 설정을 하지 않아 계속 Connection ERR가 떴다.

 

파일을 실행할때 앞에 옵션을 빼먹지 말 것.

 

netstat -nltp 명령어로 확인해본 결과 8080에 성공적으로 온보딩된 것을 확인할 수 있다.

 

 

 

 

 

Pinpoint Agent 전송 이슈

 

catalina.log (톰캣 로그 중 일부)

tomcat에 코드를 넣어서 동작하였으나, 왜인지 자기 자신의 9991번 포트로 보내는 것을 확인하였다.

분명 config 파일을 수정했었는데.. 

 

에러 해결 : Config 경로 명시

sh 안에서 config 주소를 명시적으로 넣지 않아 이를 확인하지 않았다. 해당 경로 설정을 추가하였음.