今回もApplication Insights やっていきましょう!(YouTube風)
前回までは必要なライブラリを取り込む形のSDK方式でしたが、今回はエージェント方式を試してみます。度々言及していますが、2.6.x系にもエージェントはありますが、3.0 preview を使います。
準備
執筆時点では、3.0 preview-5が最新です。
Releases · microsoft/ApplicationInsights-Java
はじめに applicationinsights-agent-3.0.0-PREVIEW.5.jar
をダウンロードしてプロジェクトのルートフォルダにでも放り込んでおきましょう。
次に、ApplicationInsights.jon
を用意します。jarと同じ場に展開します。注意点としては、
- インストルメンテーションキーは、接続文字列として設定します。環境変数とかに設定する方法もあります(WebAppsにデプロイした時など用)
- オプションは今のところ、
preview
キーの階層に定義します。 GAしたときに設定がそのまま利用されないようなポカ除けでしょうか。
のような点があります。
{ "instrumentationSettings": { "connectionString": "InstrumentationKey=<<your-instrumentation-key>>", "preview": { "roleName": "MyWebApplicaiton with Java Agent 3-preview", "instrumentation": { "logging": { "threshold": "INFO" } } } } }
プロジェクト
前回のSpring Boot Webプロジェクトでも流用してください。そして実行時オプションに以下を追加します。pom.xmの一部です。maven plugin の配下にconfiguration
以下を追加します。
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <jvmArguments> -javaagent:C:\ws\blog\appInsight\web.sample.agent3\applicationinsights-agent-3.0.0-PREVIEW.5.jar </jvmArguments> </configuration> </plugin> </plugins> </build>
java agent とは?ってところは、 古い記事ですが 独自のプロファイリング・ツールを構築する が参考になると思います(安定のdevelopers works)
適当にmvnから実行すればOkでしょう。
mvn clean package spring-boot:run
何が記録されるのか
Docsを参照するとわかるのですが、まるっと引用します。SDKを取り込まなくてもエージェントを指定するだけで以下の情報がApplication Insightsで収集できます。
- Requests
- JMS コンシューマー
- Kafka コンシューマー
- Netty/WebFlux
- Servlets
- Spring スケジュール
- 分散トレース伝達での依存関係
- Apache HttpClient と HttpAsyncClient
- gRPC
- java.net.HttpURLConnection
- JMS
- Kafka
- Netty クライアント
- OkHttp
- その他の依存関係
- Cassandra
- JDBC
- MongoDB (非同期および同期)
- Redis (Lettuce および Jedis)
- ログ
- java.util.logging
- Log4j
- SLF4J/Logback
- メトリック
- マイクロメーター (Spring Boot アクチュエータ メトリックを含む)
- JMX メトリック
まあ、いままでやってきたSDKなどの設定はなんだったのか?という話になってくるわけなんですが。
ポータルでの確認
Web + JDBCでSql Databaseにアクセスしてみた例です。リクエストにSQLDBへの依存メトリクスが関連付いて記録されていることが分ると思います。
DBへどんなクエリを発行しているのかも分ります。
まとめと雑感
自動的に収集してくれるのですが、きちんと設定しないと余分な情報まで収集されてしまうかなと思います。またSDK方式でやったようなリクエストテレメトリにカスタムプロパティを追加するような方法が分ません。このあたりは以下のように言及されているのですが、
3.0 以降での目標は、標準 API を使用してカスタム テレメトリを送信できるようにすることです。 Micrometer、OpenTelemetry API、および一般的なログ記録フレームワークがサポートされています。 Application Insights Java 3.0 では、テレメトリが自動的にキャプチャされ、自動収集されたすべてのテレメトリと連動して、関連付けが行われます。 このため、現時点では、Application Insights 3.0 を使用した SDK をリリースする予定はありません。 Application Insights Java 3.0 では、Application Insights Java SDK 2.x に送信されるテレメトリを既にリッスンしています。 この機能は、既存の 2.x ユーザーのアップグレード ストーリーの重要な部分であり、OpenTelemetry API が GA になるまでの、カスタム テレメトリ サポートの重要なギャップを埋めるものです。
3.0ではSDKをリリースする予定がなく、今のところ 2.x系のSDKを使ってカスタムすれば勝手にマージしてくれるようにも見えるのですが。Open Telemetry API ってよく分ってないのですが、GA後にまた試してみたいと思います。
ここらの話かな。 OpenTelemetry
参考
Java アプリケーションを任意の環境で監視する - Azure Monitor Application Insights - Azure Monitor | Microsoft Docs
任意の場所の Java アプリケーションを監視する - Azure Monitor Application Insights - Azure Monitor | Microsoft Docs