Azure Monitor Application Insights を Container Apps コンテナ アプリに設定する
こんにちは、@studio_meowtoon です。今回は、WSL の Ubuntu から Azure Container Apps コンテナ アプリに、Azure Monitor Application Insights を設定する一例を紹介します。
目的
Windows 11 の Linux でクラウド開発します。
こちらから記事の一覧がご覧いただけます。
実現すること
Azure Container Apps コンテナ アプリに、Azure CLI コマンドで Azure Monitor Application Insights を設定します。
Microsoft Azure は、Web ブラウザから簡単に Container Apps コンテナ アプリ の メトリック を閲覧できる機能があります。これにより、Application Insights を導入するメリットは多くはありません。この記事では学習のため、Ubuntu で操作する CLI から直接 Container Apps コンテナ アプリを設定する方法を試みています。ご注意ください。
技術トピック
Azure Monitor Application Insights とは?
こちらを展開してご覧いただけます。
Application Insights
Azure Monitor Application Insights は、Microsoft Azure 上で稼働するアプリケーションの監視・トラブルシューティング・パフォーマンス解析を行うためのクラウドベースのアプリケーションパフォーマンス管理サービスです。
このサービスを使用することで、アプリケーションの稼働状況やエラー発生率、パフォーマンスの低下要因、ユーザーの利用状況などをリアルタイムで可視化し、問題を特定して解決することができます。
開発環境
- Windows 11 Home 22H2 を使用しています。
WSL の Ubuntu を操作していきますので macOS の方も参考にして頂けます。
WSL (Microsoft Store アプリ版) ※ こちらの関連記事からインストール方法をご確認いただけます
> wsl --version
WSL バージョン: 1.0.3.0
カーネル バージョン: 5.15.79.1
WSLg バージョン: 1.0.47
Ubuntu ※ こちらの関連記事からインストール方法をご確認いただけます
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 22.04.1 LTS
Release: 22.04
Java JDK ※ こちらの関連記事からインストール方法をご確認いただけます
$ java -version
openjdk version "11.0.18" 2023-01-17
OpenJDK Runtime Environment (build 11.0.18+10-post-Ubuntu-0ubuntu122.04)
OpenJDK 64-Bit Server VM (build 11.0.18+10-post-Ubuntu-0ubuntu122.04, mixed mode, sharing)
Maven ※ こちらの関連記事からインストール方法をご確認いただけます
$ mvn -version
Apache Maven 3.6.3
Maven home: /usr/share/maven
Java version: 11.0.18, vendor: Ubuntu, runtime: /usr/lib/jvm/java-11-openjdk-amd64
Docker ※ こちらの関連記事からインストール方法をご確認いただけます
$ docker --version
Docker version 23.0.1, build a5ee5b1
Azure CLI ※ こちらの関連記事からインストール方法をご確認いただけます
$ az --version
azure-cli 2.45.0
core 2.45.0
telemetry 1.0.8
この記事では基本的に Ubuntu のターミナルで操作を行います。Vim を使用してコピペする方法を初めて学ぶ人のために、以下の記事で手順を紹介しています。ぜひ挑戦してみてください。
Application Insights を設定する手順
シェル変数の作成
シェル変数として以下の値を作成します。状況により、コンテナ アプリの名前を変える必要があります。
$ location_name=japaneast
$ resource_group_name=rg-hello
$ containerapp_env_name=cae-hello
$ containerapp_name=ca-hello-spring-boot
$ container_image_name=app-hello-spring-boot-agent:latest
この記事では、Azure のリソース設定において特に使用頻度が高いリージョンとリソースグループ、アプリの名前などについては、シェル変数という機能を使って設定する方法を紹介しています。
ログイン
Azure CLI で Azure にログインします。
$ az login
こちらの関連記事で手順がご確認いただけます。
リソースグループ
リソースグループを作成します。
$ az group create \
--name $resource_group_name \
--location $location_name
Application Insights
Application Insights インスタンスを作成します。
※ 初回に拡張機能のインストールが必要となる旨のメッセージが表示されます。
$ az monitor app-insights component create \
--resource-group $resource_group_name \
--app $containerapp_name \
--location $location_name
Azure Portal では以下のように表示されます。
Application Insights インスタンスの接続文字列をシェル変数 connection_string に取得します。
$ connection_string=$(az monitor app-insights component show \
--resource-group $resource_group_name \
--app $containerapp_name \
--query connectionString \
--output tsv)
シェル変数の値を確認します。
$ set | grep connection_string
connection_string='InstrumentationKey=dfxxxx22-4cc9-4xx0-a279-39xxxxxxxff0;IngestionEndpoint=https://japaneast-0.in.applicationinsights.azure.com/;LiveEndpoint=https://japaneast.livediagnostics.monitor.azure.com/'
Azure のリソース設定では、他のリソースのキーや接続文字列が必要になることがあります。Azure CLI を使用して設定を進める場合、シェル変数を使う方法があります。シェル変数に馴染みがない人もいるかもしれませんが、手順に従って進めることができます。
ここまでの手順で Application Insights インスタンスを作成して、その接続文字列を取得することができました。
Spring Boot アプリを作成
こちらの関連記事で手順がご確認いただけます。
プロジェクトフォルダに移動
プロジェクトフォルダに移動します。
※ ~/tmp/hello-spring-boot をプロジェクトフォルダとします。
$ cd ~/tmp/hello-spring-boot
Application Insights Agent for Java のダウンロード
JAR ファイル形式のライブラリを Ubuntuにダウンロードします。
agent ディレクトリを作成して移動します。
$ mkdir -p agent
$ cd agent
Application Insights Agent の最新バージョンの情報をシェル変数 agent_version に取得します。
$ agent_version=$(curl -s \
https://api.github.com/repos/microsoft/ApplicationInsights-Java/releases/latest \
| grep tag_name \
| cut -d '"' -f 4)
シェル変数を確認します。
$ set | grep agent_version
agent_version=3.4.10
Application Insights Agent の最新バージョンをダウンロードします。
$ wget https://github.com/microsoft/ApplicationInsights-Java/releases/download/$agent_version/applicationinsights-agent-$agent_version.jar
JAR ライブラリを確認します。
$ ls -la | grep *applicationinsights-agent*
-rw-r--r-- 1 $USER $USER 37580237 2月 23 14:36 applicationinsights-agent-3.4.10.jar
ここまでで、GitHub から Application Insights Java ライブラリを Ubuntuに取得することができました。
Application Insights の設定ファイル作成
上の手順で取得した connection_string が必要です。
applicationinsights.json を作成します。
$ cat << EOF > applicationinsights.json
{
"connectionString": "$connection_string"
}
EOF
connection_string が設定されているか確認します。
$ cat applicationinsights.json
ディレクトリ内のファイルの内容を確認します。
$ pwd
/home/$USER/tmp/hello-spring-boot/agent
$ ls -lah
合計 36M
drwxr-xr-x 2 $USER $USER 4.0K 3月 17 14:55 .
drwxr-xr-x 6 $USER $USER 4.0K 3月 17 13:09 ..
-rw-r--r-- 1 $USER $USER 36M 2月 23 14:36 applicationinsights-agent-3.4.10.jar
-rw-r--r-- 1 $USER $USER 223 3月 17 14:55 applicationinsights.json
ここまでで、applicationinsights.json 設定ファイルを Ubuntu に作成することができました。
Docker ファイルの編集
プロジェクトフォルダに戻ります。
$ cd ..
Dockerfile を編集します。
$ vim Dockerfile
ファイルの内容
# from the base image of a jdk 11 container on Ubuntu 20.04.
FROM adoptopenjdk/openjdk11:x86_64-ubuntu-jdk-11.0.18_10-slim
# version for an application insights agent.
ARG agent_version=$agent_version
# create a work dir.
WORKDIR /app
# copy a jvm app.
COPY target/*.jar app.jar
# copy an application insights agent.
COPY agent/applicationinsights-agent-${agent_version}.jar applicationinsights-agent.jar
# copy an application insights config file.
COPY agent/applicationinsights.json applicationinsights.json
# open port 8080 for a jvm app.
EXPOSE 8080
# startup a jvm app with an agent.
ENTRYPOINT ["java","-javaagent:applicationinsights-agent.jar","-jar","app.jar"]
Docker デーモンを起動します。
$ sudo service docker start
* Starting Docker: docker [ OK ]
Docker 環境をお持ちでない場合は、以下の関連記事から Docker Engine のインストール手順をご確認いただけます。
コンテナイメージをビルドします。
$ docker build \
--no-cache \
--build-arg agent_version=$agent_version \
-t app-hello-spring-boot-agent .
コンテナイメージを確認します。
$ docker images | grep app-hello-spring-boot-agent
app-hello-spring-boot-agent latest 039fc6b22535 42 seconds ago 427MB
ここまでで、Ubuntu の Docker 環境に app-hello-spring-boot-agent:latest カスタムコンテナイメージを作成することができました。
Docker Hub にコンテナイメージを登録
Docker Hub にログインします。
$ docker login
Login Succeeded
コンテナイメージにタグを付けます。
$USER の部分はご自身のコンテナリポジトリに読み替えて下さい。
$ docker tag app-hello-spring-boot-agent:latest $USER/app-hello-spring-boot-agent:latest
Docker Hub にコンテナイメージをプュシュします。
$ docker push $USER/app-hello-spring-boot-agent:latest
ここまでで、Docker Hub に app-hello-spring-boot-agent:latest カスタムコンテナイメージをプュシュすることができました。
Container Apps コンテナ アプリの作成
コンテナ アプリ環境を作成します。
$ az containerapp env create \
--resource-group $resource_group_name \
--name $containerapp_env_name \
--location $location_name
コンテナ アプリを作成します。
$ az containerapp create \
--resource-group $resource_group_name \
--environment $containerapp_env_name \
--name $containerapp_name \
--image $USER/$container_image_name \
--target-port 8080 \
--ingress 'external' \
--min-replicas 1
コンテナ アプリの FQDN をシェル変数 fqdn に取得します。
fqdn=$(az containerapp show \
--resource-group $resource_group_name \
--name $containerapp_name \
--query 'properties.configuration.ingress.fqdn' \
--output tsv)
コンテナ アプリの URL をリクエストします。
$ curl https://$fqdn/api/data -w `\n`
以下のように "Hello World!" の表示を得ることができました。
{"message":"Hello World!"}
ここまでで Container Apps コンテナ アプリを Azure クラウドにデプロイすることができました。
こちらの表示はしばらく経った状況ですが、メトリックデータの収集が正常に動作していることが確認できました。
まとめ
検証環境の Azure で、Azure Monitor Application Insights を Container Apps コンテナ アプリに設定することができました。
Ubuntu を使ってこの記事の手順を追うことにより、Linux の知識も身につけることができます。最初は難しく感じるかもしれませんが、少しずつ進めていくことで自信を持って取り組むことができるようになります。
どうでしたか? WSL Ubuntu で、Azure クラウドアプリケーション開発環境を手軽に構築することができます。ぜひお試しください。今後も Azure の開発環境などを紹介していきますので、ぜひお楽しみにしてください。