New Relic ブラウザモニタリングをSpring Boot + Thymeleafに導入
ご挨拶
Qiitaや教材制作/書籍のお手伝いなどの外部発信の経験はありますが、初めてZennで記事を投稿します。よろしくお願いします🙇
概要
担当中のWebアプリケーションは監視ツールにNew Relicを利用しています。バックエンド(サーバーサイド)のモニタリングではAPM/Log Managementを利用していますが、フロントエンドのモニタリングを導入していません。導入を提案/促進するために下調べした内容と、サンプルコードを含むデモ環境を作成したので記事にします。当然ながら担当中の技術スタックに近づけた環境となります。今をときめく「サーバーレスでNext.js/Go言語で」みたいな環境ではありません🙏
- Amazon Linux 2
- Java 11
- Spring Boot 2.7
- 非SPA Thymeleaf利用
- jQuery
日頃はWebアプリの開発者として従事しておりインフラには業務で触れていません。また、New Relic社が提唱するオブザーバビリティ
の領域に至る運用/活用はできていないと自認しています。
前提/動作環境
New Relicの無料アカウントが作成されているものとします。また、GitHubに公開しているデモ環境は以下の環境で動作確認しています。
- Windows 10 Pro 22H2
- x64
- Docker Desktop 4.15.0 (93002)
- macOS Ventura
- Apple Silicon
- Docker Desktop 4.15.0 (93002)
ブラウザモニタリングとは
バックエンドの監視や性能計測には過剰なアクセス
、CPU/メモリなどのリソース使用量
、特定の状況下でのHTTPステータスコード:500エラー
といった監視やアプリケーションロジックの実行時間
、RDBの問い合わせや外部API連携の実行時間を含むAPIの応答速度
などがあるはずです。
ブラウザのモニタリングは名前のとおりフロントエンド側のモニタリングとなり、Webページの描画時間やJavaScriptの実行時間、Webサイトがどのように使われているかを可視化します。また、JavaScriptのエラーを監視します。
ブラウザモニタリングエージェントのインストール方法
インストールに関する詳細はこちらに記載されています。要約すると大きく3つインストール方法があり、いずれにしてもWebページにJavaScriptを挿入します。
-
APM監視済みアプリで自動挿入
条件が揃えば1番簡単な方法です。残念ながらThymeleafを使用していると条件に該当しないので採択不可となります。ドキュメントによるとJSPなら自動計測できるようです。 -
APM監視済みアプリで手動挿入
今回本命で採用する方法です。前述のとおりバックエンドではAPMを閲覧可能であり、デプロイ先にAPMエージェント(Java)がインストールされています。New Relic APIライブラリを入手してThymeleafに所定の記述を行います。詳細は後述します。 -
コピー/ペースト
上記リンクのドキュメント(動画)にあるようにNew Relic OneのWebコンソール(Browser)から所定のJavaScriptを取得して貼り付ける方法です。本来はシンプルなホスティングなど静的なHTMLのみで構成されているページで利用しますが、デモ環境では試しに導入しました。
APM監視済みアプリで手動挿入でインストール
以降はGitHubに公開しているデモ環境を見ながら進めていきます。
まずはブラウザモニタリングのエージェントをインストールする前にAPMエージェント(Java)をインストールします。ドキュメントを参考に進めます。
- APMエージェントを取得して展開します。
- JavaコマンドでSpring BootのJarファイルを実行するときのパラメータを環境変数に設定します。実行時に指定できれば良いので環境変数に設定することは必須ではありません。
- 設定ファイルを作成します。
-
こちらで
Docker
/Spring Boot
を選択します。
- ライセンスキーを控えます。
赤枠をクリックしてAPIキーの一覧ページへ遷移します。
INGEST - LICENSE
のライセンスキーを控えます。行右の...
からCopy key
をクリックします。INGEST - BROWSER
ではありません。 - 3.1のページに戻り
Name your app
とEnter your license key
を入力して、Download
ボタンを押します。newrelic.yml
が得られます。
- 前述の
APM監視済みアプリで自動挿入
は採択できないのでauto_instrumentは無効にします。 - newrelic.ymlを上書きします。
-
こちらで
- コンテナを起動します。Spring Bootが起動します。予めNew Relic APIの導入とブラウザエージェントをインストールしています。(head/body)
$ pwd /Users/xxx/Desktop/new-relic-spring-boot $ cd docker $ docker-compose build --no-cache $ docker-compose up
- hostsにサンプルドメインを設定します。
127.0.0.1 devnokiyo.example.com
-
https://devnokiyo.example.com/ にアクセスします。
証明書の問題で保護されていない通信
になっていますが説明に影響しません。
ソースコードを見るとブラウザエージェントのJSが含まれていることが分かります。 - New RelicのBrowserに
Demo
が現れます。
コピー/ペーストでインストール
今回は既に存在するBrowserからJSを取得します。
- Application Settingsの記載されているJSをコピーします。
- 設置します。(head)
-
https://devnokiyo.example.com/form にアクセスします。
ソースコードを見るとブラウザエージェントのJSが含まれていることが分かります。APM監視済みアプリで手動挿入
と比較するためにコピー/ペースト方式でインストールしています。
事例
New Relic社の事例紹介を頼りに少し覗かせて頂きました。推測が含まれます。
Discussion