6
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

APMを導入してアプリケーションの品質を改善しよう!(導入編 - Java)

Last updated at Posted at 2024-11-29

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します。
image.png
起動確認できたら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の規約チェックでエラーが起きるため、今回はモジュールの読み込みをコメントアウトで無効化しておきます。

src/checkstyle/nohttp-checkstyle.xml
<?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を更新します。

spring-petclinic-docker/Dockerfile.multi
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 エージェントのセットアップは今回はスキップして次に進みます。

データが届いていることを確認します。

APMの画面でもデータが取得できていることを確認します。

Java エージェントの導入とデータ確認までを紹介させていただきました。
アプリケーションの品質を維持するために重要な指標となるパフォーマンスやエラーなどのデータを簡単なセットアップで計装できるようになりますよ。ぜひ、お試しください!!

その他

New Relicでは、新しい機能やその活用方法について、QiitaやXで発信しています!
無料でアカウント作成も可能なのでぜひお試しください!

New Relic株式会社のX(旧Twitter)Qiita OrganizationOrganizationでは、
新機能を含む活用方法を公開していますので、ぜひフォローをお願いします。

無料のアカウントで試してみよう!
New Relic フリープランで始めるオブザーバビリティ!

6
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?