New Relic APMをアプリケーションに導入することで、システム障害やユーザー体験の劣化につながるアプリケーションのパフォーマンスやエラーの原因特定と解決、改善に繋げることができます。今回はJavaアプリへの導入方法を紹介します!
APMの概要について理解されたい方は以下の記事をご確認ください。
早速導入してみよう!
今回はPetClinicというJavaで作られているWebアプリケーションにNew Relic APMのJava エージェントを導入します。
事前準備と起動確認
本記事ではJavaの実行環Amazon Linux 2023とDockerへの導入方法を紹介します。
Amazon linux 2023 の場合
Amazon linux 2023にインストールする場合の手順を紹介します。まずは、Javaとgitをインストールします。
sudo yum install java git
続いて、PetClinicをCloneします。
git clone https://github.com/spring-projects/spring-petclinic.git
PetClinicの起動確認を行います。
cd spring-petclinic
./mvnw package
java -jar target/*.jar
ブラウザでアクセスできることを確認します。
※PetClinicはデフォルト設定ではTCP:8080でListenします。
起動確認できたらCtrl + Cで停止します。
Docker の場合
Docker用のPetClinicのリポジトリを実行環境にCloneします。
git clone https://github.com/dockersamples/spring-petclinic-docker.git
Docker ComposeでPetClinicを起動します。
cd spring-petclinic
docker compose up -d
Dockerの場合もデフォルトはTCP:8080でListenするので、http://localhost:8080/
でブラウザでアクセスできることを確認します。
APM エージェントを導入
それではAPM エージェントを導入しましょう。
New Relicの管理画面にログインし、「+ Integrations & Agens」を選択->「java」で検索かけて、表示されたアイコンをクリックします。
Amazon Linux 2023にインストール
APMエージェントのインストール方法を選択します。
MavenやGradleなどのビルドツールを使ったインストール、AWS Lambdaへのインストールもサポートしています。今回はホスト上にエージェントをDLしてインストールする方式である、「On a host」を選択して、次に進みます。
インストールで使用するlicense keyとuse keyを作成します。作成したキーはコピーして控えておきましょう。
インストール先のOSのタイプはAmazon linux 2023なので、今回はLinuxを選択します。
APMエージェントがサポートしているjavaのバージョンかコマンドで確認します。
$ java --version | head -n 1
openjdk 23.0.1 2024-10-15
インストール要件の詳細は以下公式ドキュメントをご確認ください。
使用しているフレームワークを選択します。APMエージェントはサポートしているフレームワークを使用している場合、アプリケーションのパフォーマンスのデータを取得するコードが自動計装されます。今回はSpring Bootを選択します。サポートしているフレームワークを使っていない場合は、カスタム計装することで、データを取得することもできます。
APMエージェントが内包されているZipファイルをcurlコマンドでAmazon linux 2023上にDLし、/opt/newrelic
のディレクトリを作成し、DLしたZipファイルを作成したディレクトリ内にunizpで解凍します。
curl -O https://download.newrelic.com/newrelic/java-agent/newrelic-agent/current/newrelic-java.zip
sudo mkdir /opt/newrelic
sudo unzip -j newrelic-java.zip -d /opt/newrelic/
# ec2-userでpetclinicを起動させるため、ec2-userでディレクトリ以下のファイルの読み込みができるように設定
sudo chown -R ec2-user:ec2-user /opt/newrelic/
New Relic 上でのアプリケーションの表示名を入力し、APMエージェントの設定ファイル(newrelic.yml)をコピーして、zip内に含まれているサンプルの設定ファイル/opt/newrelic/newrelic.yml
の中身を書き換えて、次に進みます。
javaエージェントの起動方法のコマンド例が提示されます。javaのAPMエージェントはjarファイルで提供されており、起動オプションに-javaagent
の引数を追加して、APMエージェントを読み込ませます。
今回は以下コマンドで起動させて、次に進みます。
java -javaagent:/opt/newrelic/newrelic.jar -jar target/*.jar
Infrastructure エージェントを導入することによるログ転送のオプションのセットアップが表示されますが、今回はスキップして次に進みます。
Visual Studio CodeなどIDEとAPMの計測データを連携できるCodeStreamという機能の連携を求められますが、今回はスキップして次に進みます。CodeStreamについて知りたい方はこちらをご確認ください。
起動したPetClinicにブラウザでアクセスして、トランザクションを発生させたあとに「Test connection」をクリックして、計測したデータが取得できていることを確認します。
Dockerにインストール
インストール方法の箇所でDockerを選択します。
license key を作成し、コピーして控えておきます。
Dockerの実行環境のOSを選択します。今回はLinuxを選択します。
APMエージェントをDocker実行環境にDL、unizipで解凍してリポジトリのルートディレクトリに配置します。
cd spring-petclinic-docker
curl -O https://download.newrelic.com/newrelic/java-agent/newrelic-agent/current/newrelic-java.zip
unzip newrelic-java.zip
rm newrelic-java.zip
New Relic 上でのアプリケーションの表示名を入力し、APMエージェントの設定ファイル(newrelic.yml)をコピーして、zip内に含まれているサンプルの設定ファイルspring-petclinic-docker/newrelic/newrelic.yml
の中身を書き換えて、次に進みます
PetClinicのアプリを起動するときにAPMエージェントを読み込むようにDockerfileを更新するための手順が表示されますので、Dockerfileを更新します。
Dockerイメージをビルドする際にnohttp-checkstyleの規約チェックでエラーが起きるため、今回はモジュールの読み込みをコメントアウトで無効化しておきます。
<?xml version="1.0"?>
<!DOCTYPE module PUBLIC
"-//Puppy Crawl//DTD Check Configuration 1.2//EN"
"https://checkstyle.org/dtds/configuration_1_2.dtd">
<module name="com.puppycrawl.tools.checkstyle.Checker">
<!-- <module name="io.spring.nohttp.checkstyle.check.NoHttpCheck"/> -->
</module>
今回は以下の内容でDockerfileを更新します。
FROM eclipse-temurin:21-jdk-jammy as base
WORKDIR /app
COPY .mvn/ .mvn
COPY mvnw pom.xml ./
RUN ./mvnw dependency:resolve
COPY src ./src
#FROM base as development
#CMD ["./mvnw", "spring-boot:run", "-Dspring-boot.run.profiles=mysql", "-Dspring-boot.run.jvmArguments='-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:8000'"]
FROM base as build
RUN ./mvnw package
FROM eclipse-temurin:21-jre-jammy as development
EXPOSE 8080
COPY --from=build /app/target/spring-petclinic-*.jar /spring-petclinic.jar
RUN mkdir -p /usr/local/newrelic
ADD ./newrelic/newrelic.jar /usr/local/newrelic/newrelic.jar
ADD ./newrelic/newrelic.yml /usr/local/newrelic/newrelic.yml
#CMD ["java", "-Djava.security.egd=file:/dev/./urandom", "-jar", "/spring-petclinic.jar"]
ENTRYPOINT ["java","-javaagent:/usr/local/newrelic/newrelic.jar","-jar","/spring-petclinic.jar"]
PetClinicのコンテナを再ビルドして、ブラウザでアクセスできることを確認できたら、New Relicの画面に戻ります。
docker compose stop petclinic
docker compose rm petclinic
docker compose build --no-cache petclinic
docker compose up -d petclinic
オプションでガイドされるInfrastructure エージェントのセットアップは今回はスキップして次に進みます。
データが届いていることを確認します。
Java エージェントの導入とデータ確認までを紹介させていただきました。
アプリケーションの品質を維持するために重要な指標となるパフォーマンスやエラーなどのデータを簡単なセットアップで計装できるようになりますよ。ぜひ、お試しください!!
その他
New Relicでは、新しい機能やその活用方法について、QiitaやXで発信しています!
無料でアカウント作成も可能なのでぜひお試しください!
New Relic株式会社のX(旧Twitter) や Qiita OrganizationOrganizationでは、
新機能を含む活用方法を公開していますので、ぜひフォローをお願いします。
無料のアカウントで試してみよう!
New Relic フリープランで始めるオブザーバビリティ!