0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Azure Monitor Application Insights を Container Apps コンテナ アプリに設定する

Last updated at Posted at 2023-03-17

Azure Monitor Application Insights を Container Apps コンテナ アプリに設定する

こんにちは、@studio_meowtoon です。今回は、WSL の Ubuntu から Azure Container Apps コンテナ アプリに、Azure Monitor Application Insights を設定する一例を紹介します。
spring-boot_on_azure-container-apps.png

目的

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

こちらの関連記事で手順がご確認いただけます。

リソースグループ

リソースグループを作成します。

Microsoft.Resources/resourceGroups
$ az group create \
    --name $resource_group_name \
    --location $location_name

Application Insights

Application Insights インスタンスを作成します。
※ 初回に拡張機能のインストールが必要となる旨のメッセージが表示されます。

microsoft.insights/components
$ az monitor app-insights component create \
    --resource-group $resource_group_name \
    --app $containerapp_name \
    --location $location_name

Azure Portal では以下のように表示されます。
image.png
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

ファイルの内容

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

ここまでで、UbuntuDocker 環境に 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 Hubapp-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!"}

Azure Portal には以下のように表示されます。
image.png

ここまでで Container Apps コンテナ アプリを Azure クラウドにデプロイすることができました。

Azure Portal を確認します。
image.png

こちらの表示はしばらく経った状況ですが、メトリックデータの収集が正常に動作していることが確認できました。

まとめ

検証環境の Azure で、Azure Monitor Application Insights を Container Apps コンテナ アプリに設定することができました。

Ubuntu を使ってこの記事の手順を追うことにより、Linux の知識も身につけることができます。最初は難しく感じるかもしれませんが、少しずつ進めていくことで自信を持って取り組むことができるようになります。

どうでしたか? WSL Ubuntu で、Azure クラウドアプリケーション開発環境を手軽に構築することができます。ぜひお試しください。今後も Azure の開発環境などを紹介していきますので、ぜひお楽しみにしてください。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?