はじめに
昨日は @wc-fujikawa さんの「 基本情報技術者試験を勉強して学んだこと 」でした。私もいつか受験してみようと思いました。
今回は、「 New Relic APM さわってみた 」ことについて共有させていただきます。
New Relicとは
New Relicとは、オブザーバビリティプラットフォームを提供する米国企業です。そして、提供するサービスを指します。
New Relic(ニューレリック)という名前は、創業者Lew Cirne(ルー・サーニー)の文字を入れ替えて作られています。こういうのをアナグラムというらしいです。知りませんでした。
あと、ポイントとなる情報は以下。
-
オブザーバビリティ市場において高いシェアを誇る
New Relic、国内オブザーバビリティ市場で7年連続売上シェアNo.1を獲得
2年連続で2位のベンダーに2倍以上の差を付けて市場の拡大をけん引Gartner Magic Quadrant 2024。12年連続で「リーダー」に選出。オブザーバビリティプラットフォーム部門。New Relic is named a Leader in the 2024 Gartner® Magic Quadrant™ for Observability Platforms for the 12th Consecutive Time
-
APM (Application Performance Monitoring) の先駆者的なところがある
New RelicはRailsアプリケーションの先進的なアプリケーションパフォーマンス監視(APM)の業界分野で初めてSaaSとして公開しました。これが2009年のことです。 New Relicの歴史
New Relicは、10年以上前にアプリケーションモニタリングの先駆者となり、お客様のニーズに応えるために革新し続けてきました。New Relic 最高製品責任者 Manav Khuranaコメント
-
色んな機能をオールインワンで提供している
- New Relic APM
- New Relic BROWSER
- New Relic INFRASTRACTURE
- New Relic MOBILE
- New Relic NPM
- New Relic SYNTHETICS
- その他諸々
用語メモ:オブザーバビリティとは
オブザーバビリティ(Observability)は、オブザーブ(Observe):「観測する」と、アビリティ(Ability):「能力」を組み合わせた複合語で、日本語では「可観測性」あるいは「観測する能力」などと訳されます。システム上で何らかの異常が起こった際に、それを通知するだけでなく、どこで何が起こったのか、なぜ起こったのかを把握する能力を表す指標、あるいは仕組みを指します。 オブザーバビリティとは?監視との違い、必要性について解説
用語メモ:APMとは
APM(Application Performance Monitoring/アプリケーションパフォーマンス監視/アプリケーション性能監視)は、アプリケーションが想定通りのパフォーマンスを発揮しているかどうかを監視し、その改善に向けた原因の特定・改修の迅速化を実現するプロセス、あるいはそのためのツールを指します。APMとは?アプリケーション性能監視の重要性やツール解説
New Relic APM とは
New Relic APMは、アプリケーションが稼働するサーバに 言語別の APM エージェントをインストールすることでアプリのパフォーマンスデータを収集します。対応言語は以下。
APM エージェントは、アプリケーションプロセス内で稼働し、トランザクション(一連の処理)をトレース(追跡)します。
例えば、「サイトの、あるボタンをクリックして、画面が表示される」というトランザクションをトレースすることで、トランザクション内の、「外部APIの呼び出しが成功したかや、データベースへのクエリにどのくらいの時間がかかったか」というような情報を知ることが可能です。これにより、アプリケーションパフォーマンスの改善を行うことが出来ます。
また、APMエージェントは「動いているプログラムに自動で測定器を取り付ける(計装: Instrumentation)」というような技術を使うため、基本的に、アプリケーションのソースコードに手を入れることなくパフォーマンスデータを収集することが出来ます。
New Relic APM さわってみる
対象アプリ
今回は以下の天気アプリを対象とします。Gemini作。
- Get Weather: 都市名を入力すると、現在の天気情報を表示
- Show DB History: 過去の検索結果を表示
構成
- Webサーバ:
- Apache Httpd がリクエストを受け、Apache Tomcat に中継
- Appサーバ:
- Apache Tomcat 上の Java Servlet (WeatherServlet) が 外部APIであるOpenWeatherMap APIを呼び出し、天気情報を取得
- データベース:
- MySQL を使用して、天気情報の検索履歴を保存
ローカルで、コンテナで動かします。
New Relic APM 導入してみる
今回は、AppサーバであるTomcatコンテナにNew RelicのJavaエージェントを導入します。Javaエージェントは、アプリケーションのパフォーマンスデータを収集し、New Relicプラットフォームに送信する役割を担います。
1. Javaエージェントのインストール
TomcatのDockerfileにおいて、Javaエージェントを /usr/local/以下にダウンロードして解凍します。
# New Relic Javaエージェントのバージョンを指定
ENV VERSION=8.24.0
# エージェントをダウンロードして解凍
RUN curl -O https://download.newrelic.com/newrelic/java-agent/newrelic-agent/${VERSION}/newrelic-java-${VERSION}.zip && \
unzip newrelic-java-${VERSION}.zip -d /usr/local/
2. Javaエージェントの設定
Javaエージェントの設定は/usr/local/newrelic/newrelic.ymlファイルで可能です。ただ、今回はcompose.ymlで環境変数として指定します。
compose.yml内のTomcatサービスのenvironmentに、ライセンスキー、アプリケーション名、そしてエージェントを有効にするための起動オプションを追加します。Tomcatの起動オプションであるCATALINA_OPTSに、-javaagentフラグでnewrelic.jarのパスを指定します。
environment:
NEW_RELIC_LICENSE_KEY: ${NEW_RELIC_LICENSE_KEY}
NEW_RELIC_APP_NAME: "APP_TOMCAT"
CATALINA_OPTS: -javaagent:/usr/local/newrelic/newrelic.jar
以上の設定で、Tomcatコンテナを起動するとJavaエージェントが有効になり、アプリケーションのパフォーマンスデータがNew Relicに送信され始めます。
補足メモ:Javaエージェント導入について
インストールドキュメント を参考に設定できます。また、Integration & Agents > Java からも、エージェント導入の手順がわかります。

今回は、これらを参考に設定した感じです。
New Relic UIでみてみる
見てみましょう!
トランザクションのトレース
天気アプリにおいて、「都市名を入力して、現在の天気情報を表示するトランザクション」のトレース結果が見れます。
外部APIのapi.openweathermap.orgへのリクエストや、MySQLへのクエリのトレースが出来ていることがわかります。どのようなクエリかも該当処理部分をクリックするとわかるようです。
最も処理時間が長い「Uninstrumented time(計測されていない時間)」は何なんでしょう。結局、最も時間のかかる処理が何かわかりませんでした笑。
また、Entity mapにおいて、アプリケーション:APP_TOMCAT、データベース:MySQL、外部API:api.openweathermap.org という関係するEntityが可視化されています。こういうのいいですね。
セッションリプレイ
セッションリプレイとは、ユーザーがUI上でどのような行動を取ったのか記録できる機能です。ブラウザモニタリングの機能です。以下に示すようにユーザの動きが記録されています。すごいです。
ブラウザモニタリングは、計測対象のページにタグを埋め込む方法と、APMエージェントにより有効化できる場合があるみたいです。
SLI/SLO
APMのSLI/SLOを設定できます。
特定のトランザクションをキートランザクションとして登録できて、そのキートランザクションに対してもSLI/SLOを設定可能です。今回の「都市名を入力して、現在の天気情報を表示するトランザクション」を対象に、SLI/SLOを設定できます。
特定の処理に関して、成功率やレイテンシをSLIとしてモニタリングできます。すごいです。
まだまだ色々あるみたいですが、そろそろ終わりましょう。
おわりに
APMは自分には難しくてよくわかりませんでした。でも、なんかすごいことはわかりました。読んでいただいた方、ありがとうございました。よいお年を!
明日は、@wc_nakaniwa さんの記事です。よろしくお願いします!
おまけ
New Relic について学べるコンテンツを New Relic University として無償で公開されているようです。New Relic を学ぶ
参考
- APMによるアプリのパフォーマンス改善
- 【New Relic】アプリ初心者でも大丈夫!インフラエンジニアがはじめるAPM/Browser超入門 〜1時間で始める可視化への第一歩〜
- APMを導入してアプリケーションの品質を改善しよう!(概要編)
- ファーストステップガイド APM 導入
- New Relic APMをマスターするためのTips10選
- NewRelic APM(Java)導入前に設定で知っておきたい事
- New Relic Browserをインストールする2つの方法 - APM AgentとCopy/Paste - の違い
- New Relicユーザーと語るオブザーバビリティの実践
- NewRelicのセッションリプレイ機能を使ってみた
- 僕のSLOとNew Relic by NRUG Vol.13





