GraalVM と Spring Native プロジェクトによるトレーシングの実現¶
概要¶
GraalVM は、高性能でクラウドネイティブかつマルチランゲージに対応した JDK ディストリビューションであり、Java およびその他の JVM 言語で記述されたアプリケーションの実行を高速化するとともに、JavaScript、Python、その他多くの一般的な言語向けのランタイムも提供します。
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 のデプロイ¶
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 のインストールと設定を行います。
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 # 変更
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」をクリックします。
サンプルプロジェクト springboot-native-demo のように、Application と Controller を追加します。
5 プロジェクトのパッケージ化¶
プロジェクトをクラウドサービスの /usr/local/df-demo ディレクトリにアップロードし、パッケージ化コマンドを実行します。
target ディレクトリを確認すると、バイナリファイル springboot-native-demo と springboot-native-demo-1.0-SNAPSHOT-exec.jar ファイルが存在します。
6 トレーシングの接続¶
6.1 DataKit のインストール¶
「Guance」にログインし、順に「Integration」-「DataKit」-「Linux」と進み、「コピーアイコン」をクリックしてインストールコマンドをコピーします。
Linux サーバーにログインし、コピーしたコマンドを実行します。
6.2 コレクターの有効化¶
RUM を有効にするには、ユーザーが DataKit の 9529 ポートにリモートアクセスできる必要があります。以下のファイルを編集します。
listen の値を 0.0.0.0:9529 に変更します。
ddtrace コレクターを有効にします。
6.3 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
6.5 トレースデータの報告¶
アプリケーションのインターフェース curl localhost:8090/ping にアクセスすると、トレースデータが報告されます。
「Guance」-「アプリケーションパフォーマンスモニタリング(APM)」にログインすると、spring-native-demo サービスが表示されます。
「トレース」画面では、トレースの詳細やフレームグラフなどを確認できます。














