この記事ではオブザーバビリティプラットフォームのSaaSであるNew RelicにMicroProfile Telemetryでトレース情報を送信する方法について記載します。以前に投稿したOpen Libertyで動かしたアプリのトレース情報をMicroProfile Telemetryで収集・送信する記事の関連記事です。
前回は分散トレース基盤OSSのJaegerにトレース情報を送信しました。しかしSaaSをトレース情報の送信先として利用する場合はOpen Libertyのドキュメントにはやり方の解説がないため、この記事で試すことにします。
事前準備
New Relicのアカウント取得済みであることを前提とします。
2023年4月時点ではStandardプランの無料枠を活用します。
また、使用するアプリケーションは以前の記事を流用するため、変更点のみこの記事で記載するものとします。
本記事で使用するコンポーネント
本記事では以下のコンポーネント・バージョンで動作確認を行なっています。
各コンポーネントの別バージョンでは動作しない可能性がありますので、本番投入する際には事前に手元で動作確認することをお勧めします。
| コンポーネント名 | バージョン |
|---|---|
| JDK | OpenJDK 17.0.6 (IBM Semeru Runtime Open Edition) |
| Open Liberty | 23.0.0.3 |
$ java -version
openjdk version "17.0.6" 2023-01-17
IBM Semeru Runtime Open Edition 17.0.6.0 (build 17.0.6+10)
Eclipse OpenJ9 VM 17.0.6.0 (build openj9-0.36.0, JRE 17 Mac OS X aarch64-64-Bit 20230117_255 (JIT enabled, AOT enabled)
OpenJ9 - e68fb241f
OMR - f491bbf6f
JCL - 927b34f84c8 based on jdk-17.0.6+10)
New Relicのライセンスキーの発行
New Relicにトレース情報を送信するには、New Relicと接続するための認証情報が必要です。
事前に認証のためのライセンスキーを発行してメモしてください。
APIキーのページから Type = INGEST - LICENSE のキーを控えます。
MicroProfile Telemetryの設定
トレース情報を送信するアプリにNew Relicに関する設定値を登録します。
設定値は環境変数でも指定可能ですが、今回はMicroProfileを利用しているのでMicroProfile Configの設定ファイル microprofile-config.properties に指定します。
設定値はOpenTelmetryエンドポイントとライセンスキーの2つを指定します。Jaegerの場合と異なりライセンスキーの指定が必要なので、otel.exporter.otlp.headers に KEY=VALUE 形式でライセンスキーを指定します。
src/main/webapp/META-INF/microprofile-config.properties
otel.sdk.disabled=false
otel.traces.exporter=otlp
otel.exporter.otlp.endpoint=https://otlp.nr-data.net:4317
otel.exporter.otlp.headers=api-key={ライセンスキー}
otel.service.name={アプリ名}
稼働確認
設定値を登録したら2つのアプリケーションを起動します。次のMavenコマンドでアプリケーションをOpen Libertyの開発モードで起動します。「Liberty is running in dev mode.」とコンソールに表示されていれば起動OKです。
# フロントエンドUI
cd frontendUI
mvn clean liberty:run
# バックエンドサービス
cd backendServices
mvn clean liberty:run
ブラウザで http://localhost:9090/eventmanager.jsf を開いて適当に参照、作成、更新、削除と操作します。アプリの標準出力にエラーが出ていなければNew Relicにトレース情報が送信されているはずです。
New Relicの探索
New Relicの画面でトレース情報を参照してみます。
New Relicのトップ画面左メニューの「Traces」を開くと、トレース情報を送信したアプリ名が一覧に表示されています。
続いてトレース情報の詳細をTrace Groupsの任意のHTTPメソッドからドリルダウンして表示します。
とあるトレース情報を参照すると次の図の通りアプリ間通信のマップ、トレーススパン、スパンの詳細が表示されます。スパンの詳細を確認するとJaegerの場合と同等の属性値が参照できますね。
参考

