Azure Container Instances上で動くJavaアプリにApplication InsightsのAgentを入れる

はじめに

Azure Container Instancesには「監視」という項目の下に「メトリック」という項目があります。ただ、ここに移動しても見れる情報は以下のスクリーンショットのようにごくわずかです。

f:id:miyohide:20220109150458p:plain

そこで、Application InsightsのAgentを導入することで、さらに多くの情報を参照するようにしたいと思います。

実装

サポートされている言語としては、2022年1月9日時点でC#JavaJavaScript、Node.js、Pythonが挙げられています。

docs.microsoft.com

そこで今回はSpring Bootで作った簡単なWebアプリにApplication Insightsを導入したいと思います。

全体的な流れは以下のドキュメントに記載があるので基本はそれに従います。

docs.microsoft.com

Java向けのApplication Insightsは以下のGitHubにて開発が進んでいます。

github.com

Releasesページに移動して、3.x系のjarファイル(執筆時点ではapplicationinsights-agent-3.2.4.jar)をダウンロードしてsrc/main/jib/aiディレクトリに格納します。

その後、jibの設定を行います。jibのFAQにjavaagentの設定方法について記述があるので、それに従ってbuild.gradleファイルを編集します。

github.com

今回の例はsrc/main/jib/ai以下にjarファイルを格納したので、以下の記述をbuild.gradleに追加しました。

jib.container.jvmFlags = ['-javaagent:/ai/applicationinsights-agent-3.2.4.jar']

あとは、./gradlew jibDockerBuildでイメージを作成したらOKです。

Azure Container Instances上での設定

Application Insightsにデータを送るために、Azure Container Instancesを設定するとき、環境変数APPLICATIONINSIGHTS_CONNECTION_STRINGにApplication InsightsのConnection String(InstrumentationKeyから始まる文字列)を設定します。

設定は以上で終了です。設定が間違ってなければ、WebアプリにアクセスするとApplication Insightsにデータが溜まります。

Application Insightsを見てみる

Application InsightsのLogsページを見るとrequestsにはアクセスログ、tracesにはアプリケーションのログ、customMetricsにはSpring Actuatorから得られたデータが出力されていました。下のスクリーンショットは、customMetricsのデータを参照したものです。同じnameのものが複数ありますが、customDimensionsごとに違うレコードとして送信されるようです。

f:id:miyohide:20220109153348p:plain

Application InsightsのMetricsには各メトリックをグラフとして表示する機能があるのですが、customDimensionsを考慮しない感じなので、ちょっと使うには注意が必要な気がします。

f:id:miyohide:20220109154814p:plain

なお、メトリック名前空間には色々な種類があるようです。

f:id:miyohide:20220109154901p:plain

この違いがあまり分かっていないのですが、以下の記事が参考になりそうです。

docs.microsoft.com

取れるデータとしてはApplication Insights SDKJava版のドキュメントにざっくりとした説明があります。

docs.microsoft.com

Actuatorのデータはnameのピリオドを_に変更したものに対応しているようです。例えば、Actuatorでactuator/metrics/jvm.memory.used?tag=area:heap&tag=id:Survivor%20Spaceで得られる値とcustomMetricsのテーブルにあるデータのうち、name欄がjvm_memory_usedでcustomDimensionsにSurvivorが含まれているものが一致していました。

f:id:miyohide:20220109155429p:plain

いろいろとデータを深掘りしていきたいなと思いますが、今日はここまで。