はじめに
Azure Container Instancesには「監視」という項目の下に「メトリック」という項目があります。ただ、ここに移動しても見れる情報は以下のスクリーンショットのようにごくわずかです。
そこで、Application InsightsのAgentを導入することで、さらに多くの情報を参照するようにしたいと思います。
実装
サポートされている言語としては、2022年1月9日時点でC#やJava、JavaScript、Node.js、Pythonが挙げられています。
そこで今回はSpring Bootで作った簡単なWebアプリにApplication Insightsを導入したいと思います。
全体的な流れは以下のドキュメントに記載があるので基本はそれに従います。
Java向けのApplication Insightsは以下のGitHubにて開発が進んでいます。
Releasesページに移動して、3.x系のjarファイル(執筆時点ではapplicationinsights-agent-3.2.4.jar
)をダウンロードしてsrc/main/jib/ai
ディレクトリに格納します。
その後、jibの設定を行います。jibのFAQにjavaagentの設定方法について記述があるので、それに従ってbuild.gradle
ファイルを編集します。
今回の例は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ごとに違うレコードとして送信されるようです。
Application InsightsのMetricsには各メトリックをグラフとして表示する機能があるのですが、customDimensionsを考慮しない感じなので、ちょっと使うには注意が必要な気がします。
なお、メトリック名前空間には色々な種類があるようです。
この違いがあまり分かっていないのですが、以下の記事が参考になりそうです。
取れるデータとしてはApplication Insights SDKのJava版のドキュメントにざっくりとした説明があります。
Actuatorのデータはnameのピリオドを_
に変更したものに対応しているようです。例えば、Actuatorでactuator/metrics/jvm.memory.used?tag=area:heap&tag=id:Survivor%20Space
で得られる値とcustomMetricsのテーブルにあるデータのうち、name欄がjvm_memory_used
でcustomDimensionsにSurvivorが含まれているものが一致していました。
いろいろとデータを深掘りしていきたいなと思いますが、今日はここまで。