콘텐츠로 이동

GraalVM 및 Spring Native 프로젝트를 통한 분산 추적


개요

GraalVM은 고성능, 클라우드 네이티브, 다중 언어를 지원하는 JDK 배포판으로, Java 및 기타 JVM 언어로 작성된 애플리케이션의 실행 속도를 높이면서 JavaScript, Python 및 기타 여러 주요 언어를 위한 런타임을 제공합니다.

image

GraalVM은 독특한 런타임 환경으로, 여러 가지 작동 모드를 제공합니다: JVM 런타임 모드, Native Image, Truffle 위의 Java(동일한 Java 애플리케이션을 어떤 모드에서든 실행 가능).

JVM 런타임 모드

HotSpot JVM에서 프로그램을 실행할 때, GraalVM은 기본적으로 GraalVM 컴파일러를 최상위 JIT 컴파일러로 사용합니다. 런타임에 애플리케이션은 JVM 위에서 정상적으로 로드되고 실행됩니다. JVM은 Java 또는 기타 JVM 네이티브 언어의 바이트코드를 컴파일러에 전달하고, 컴파일러는 이를 머신 코드로 컴파일하여 JVM에 반환합니다. Truffle 프레임워크 위에 작성된 지원 언어의 인터프리터 자체는 JVM에서 실행되는 Java 프로그램입니다.

Native Image

Native Image는 Java 코드를 독립적인 바이너리 실행 파일 또는 네이티브 공유 라이브러리로 컴파일하는 혁신적인 기술입니다. Native Image 빌드 중에 처리되는 Java 바이트코드에는 모든 애플리케이션 클래스, 종속성, 서드파티 종속 라이브러리 및 필요한 모든 JDK 클래스가 포함됩니다. 생성된 독립형 네이티브 실행 파일은 JVM이 필요 없는 각 개별 운영 체제 및 머신 아키텍처에 특화되어 있습니다.

Spring Native는 GraalVM Native Image 컴파일러를 사용하여 Spring 애플리케이션을 네이티브 실행 파일로 컴파일하는 것을 지원합니다. 이 문서에서는 JVM 런타임 모드를 사용하며, ddtrace를 통해 분산 추적을 Guance에 연결합니다.

설정 단계

Warning

이번 예시에서 사용된 버전 정보는 다음과 같습니다: DataKit 1.4.0, CentOS 7.9, 클라우드 서버 4코어 8GB, Git 1.8.3.1, Maven 3.8.5, OpenJDK 17.0.3, GraalVM CE 22.1.0

1 Git 배포

yum install -y git
git --version

image

2 GraalVM 배포

cd /usr/local/df-demo
wget https://github.com/graalvm/graalvm-ce-builds/releases/download/vm-22.1.0/graalvm-ce-java17-linux-amd64-22.1.0.tar.gz
tar -zxvf  graalvm-ce-java17-linux-amd64-22.1.0.tar.gz

/etc/profile을 편집하여 다음 내용을 추가합니다.

export JAVA_HOME=/usr/local/df-demo/graalvm-ce-java17-22.1.0
export CLASSPATH=$JAVA_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$PATH

native-image 설치 및 구성.

gu install native-image
yum install zlib-devel -y

3 Maven 배포

cd /usr/local/df-demo
wget https://mirrors.bfsu.edu.cn/apache/maven/maven-3/3.8.5/binaries/apache-maven-3.8.5-bin.tar.gz
tar -zxvf  apache-maven-3.8.5-bin.tar.gz

/etc/profile을 편집하여 다음 내용을 추가합니다.

 export MAVEN_HOME=/usr/local/df-demo/apache-maven-3.8.5
 export PATH=$PATH:$MAVEN_HOME/bin:$JAVA_HOME/bin   # 수정
source /etc/profile
cd /usr/local/df-demo/apache-maven-3.8.5/conf

settings.xml을 편집하여 다음 내용을 추가합니다.

   <mirrors>
       <mirror>
            <id>alimaven</id>
            <name>aliyun maven</name>
            <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
            <mirrorOf>central</mirrorOf>
        </mirror>
        <mirror>
            <id>alimaven</id>
            <mirrorOf>central</mirrorOf>
            <name>aliyun maven</name>
            <url>http://maven.aliyun.com/nexus/content/repositories/central/</url>
        </mirror>
    </mirrors>

4 Spring Boot 프로젝트 생성

spring.io에 접속하여 「Spring Native」와 「Spring Web」을 선택하고, Project는 「Maven Project」, Language는 「Java」를 선택하며, Project Name은 자유롭게 정의한 후 「GENERATE」를 클릭합니다.

image

예시 프로젝트 springboot-native-demo와 같이 Application 및 Controller를 추가합니다.

image

5 프로젝트 패키징

프로젝트를 클라우드 서비스의 /usr/local/df-demo 디렉터리에 업로드하고 패키징 명령을 실행합니다.

cd /usr/local/df-demo/springboot-native-demo
mvn -Pnative -DskipTests clean package

image

target 디렉터리를 확인하면 바이너리 파일 springboot-native-demospringboot-native-demo-1.0-SNAPSHOT-exec.jar 파일이 있습니다.

image

6 분산 추적 연결

6.1 DataKit 설치

Guance」에 로그인하여 「통합」 - 「DataKit」 - 「Linux」로 차례로 이동하고, 「복사 아이콘」을 클릭하여 설치 명령을 복사합니다.

image

Linux 서버에 로그인하여 복사한 명령을 실행합니다.

image

6.2 수집기 활성화

RUM을 활성화하려면 사용자가 DataKit의 9529 포트에 원격으로 접근할 수 있어야 합니다. 다음 파일을 편집합니다.

/usr/local/datakit/conf.d/datakit.conf

listen 값을 0.0.0.0:9529로 수정합니다.

image

ddtrace 수집기를 활성화합니다.

cd /usr/local/datakit/conf.d/ddtrace
cp ddtrace.conf.sample ddtrace.conf

image

6.3 DataKit 재시작

systemctl restart datakit

6.4 애플리케이션 시작

cd /usr/local/df-demo/springboot-native-demo/target
 java  -DspringAot=true -javaagent:/usr/local/datakit/data/dd-java-agent.jar  -Ddd.service.name=spring-native-demo    -Ddd.env=dev  -Ddd.agent.port=9529  -jar springboot-native-demo-1.0-SNAPSHOT-exec.jar

image

6.5 분산 추적 데이터 전송

애플리케이션의 인터페이스 curl localhost:8090/ping에 접근하여 분산 추적 데이터를 전송합니다.

image

Guance」 - 「APM」에 로그인하면 spring-native-demo 서비스를 확인할 수 있습니다.

image

「분산 추적」 인터페이스에서 분산 추적 상세 정보, 플레임 그래프 등을 확인할 수 있습니다.

image

image

문서 평가

이 페이지가 도움이 되었나요?