コンテンツにスキップ

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 コードをスタンドアロンのバイナリ実行可能ファイルまたはネイティブ共有ライブラリにコンパイルする革新的な技術です。ネイティブイメージのビルド中に処理される Java バイトコードには、すべてのアプリケーションクラス、依存関係、サードパーティの依存ライブラリ、および必要な JDK クラスが含まれます。生成されるスタンドアロンのネイティブ実行可能ファイルは、JVM を必要としない個々のオペレーティングシステムおよびマシンアーキテクチャに固有のものです。

Spring Native は、GraalVM ネイティブイメージコンパイラを使用して Spring アプリケーションをネイティブ実行可能ファイルにコンパイルするためのサポートを提供します。このドキュメントでは、JVM 実行モードを使用し、ddtrace を使用してトレーシングを Guance に接続します。

操作手順

Warning

今回のサンプルで使用するバージョン情報は以下の通りです:DataKit 1.4.0、CentOS 7.9、クラウドサーバー 4コア 8G、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」にログインし、順に「Integration」-「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

フィードバック

このページは役に立ちましたか?