チュートリアル: Azure App Service で Linux アプリのサイドカー コンテナーを構成する
このチュートリアルでは、OpenTelemetry コレクターをサイドカー コンテナーとして Azure App Service の Linux (bring-your-own-code) アプリに追加します。 カスタム コンテナーについては、「チュートリアル: Azure App Service でカスタム コンテナーのサイドカー コンテナーを構成する」を参照してください。
Azure App Service では、Linux アプリごとに最大 9 つのサイドカー コンテナーを追加できます。 サイドカー コンテナーを使用すると、追加のサービスと機能をメイン (組み込み) コンテナーに緊密に結合することなく、Linux アプリにデプロイできます。 たとえば、監視、ログ、構成、ネットワーク サービスをサイドカー コンテナーとして追加できます。 OpenTelemetry コレクターのサイドカーは、このような監視例の 1 つです。
App Service のサイド コンテナーの詳細については、次を参照してください。
Azure サブスクリプションをお持ちでない場合は、開始する前に Azure 無料アカウントを作成してください。
1.必要なリソースを設定する
最初に、チュートリアルで使用するリソースを作成します。 これらはこの特定のシナリオで使用され、一般的にサイドカー コンテナーには必要ありません。
Azure Cloud Shell で次のコマンドを実行します。 必ず
<environment-name>
を指定してください。git clone https://github.com/Azure-Samples/app-service-sidecar-tutorial-prereqs cd app-service-sidecar-tutorial-prereqs azd env new <environment-name> azd provision
ダイアログが表示されたら、任意のサブスクリプションとリージョンを指定します。 次に例を示します。
- [サブスクリプション]: 自分のサブスクリプション。
- リージョン: (ヨーロッパ) 西ヨーロッパ。
デプロイが完了すると、次の出力が表示されます。
APPLICATIONINSIGHTS_CONNECTION_STRING = InstrumentationKey=...;IngestionEndpoint=...;LiveEndpoint=... Azure container registry name = <registry-name> Managed identity resource ID = <managed-identity-resource-id> Managed identity client ID = <managed-identity-client-id> Open resource group in the portal: https://portal.azure.com/#@/resource/subscriptions/<subscription-id>/resourceGroups/<group-name>
ブラウザー タブでリソース グループのリンクを開きます。これらの出力値は後で必要になります。
Note
azd provision
は、付属のテンプレートを使用して、次の Azure リソースを作成します。- 環境名に基づくリソース グループ。
- 2 つのイメージがデプロイされたコンテナー レジストリ。
- OpenTelemetry モジュールを含む Nginx イメージ。
- Azure Monitor にエクスポートするように構成された OpenTelemetry コレクター イメージ。
- リソース グループに対する
AcrPull
アクセス許可を持つユーザー割り当てマネージド ID (レジストリからイメージをプルするため)。 - Log Analytics ワークスペース。
- Application Insights コンポーネント。
2. Web アプリを作成する
この手順では、テンプレート ASP.NET Core アプリケーションをデプロイします。 Azure Cloud Shell に戻り、次のコマンドを実行します。 <app-name>
を一意のアプリ名に置き換えます。
cd ~
dotnet new webapp -n MyFirstAzureWebApp --framework net8.0
cd MyFirstAzureWebApp
az webapp up --name <app-name> --os-type linux
数分後、この .NET Web アプリケーションは MyFirstAzureWebApp.dll として新しい App Service アプリにデプロイされます。
3.サイドカー コンテナーを追加する
このセクションでは、サイドカー コンテナーをr Linux アプリに追加します。 ポータル エクスペリエンスはまだロールアウト中です。まだ使用できない場合は、下の [ARM テンプレートを使用する] タブを使用して続行してください。
Azure portal で、アプリの管理ページに移動します。
アプリの管理ページで、左側のメニューから [デプロイ センター] を選びます。
[アプリと共に実行するコンテナーを追加しますか?クリックして試してください] というバナーを選択します。
バナーが表示されない場合、ポータル UI はまだお使いのサブスクリプション用にロールアウトされていません。 代わりに [ARM テンプレートを使用する] タブを選択して続行します。
ページが再読み込みされたら、[コンテナー (新規)] タブを選択します。
[追加] を選択し、次のように新しいコンテナーを構成します。
- 名前: otel-collector
- イメージ ソース: Azure Container Registry
- [認証]: [管理者資格情報]
- レジストリ:
azd provision
によって作成されたレジストリ - イメージ: otel-collector
- タグ: latest
適用を選択します。
4.環境変数を構成する
サンプル シナリオでは、otel-collector サイドカーは OpenTelemetry データを Azure Monitor にエクスポートするように構成されていますが、環境変数として接続文字列が必要です (「otel-collector イメージ の OpenTelemetry 構成ファイル」参照)。
通常の App Service アプリと同じようにコンテナーの環境変数を構成するには、アプリ設定を構成します。 アプリ設定は、アプリ内のすべてのコンテナーからアクセスできます。
App Service アプリの管理ページに移動します。
左側のメニューから [環境変数] を選択します。
[追加] を選択してアプリ設定を追加し、次のように構成します。
- 名前: APPLICATIONINSIGHTS_CONNECTION_STRING
- [値]:
azd provision
の出力内の接続文字列。 Cloud Shell セッションがなくなっている場合は、Application Insight リソースの [概要] ページの [接続文字列 で確認することもできます。
[適用] を選択し、続いて[適用]、[確認] を選択します。
5.起動時にインストルメンテーションを構成する
この手順では、「OpenTelemetry .NET ゼロコード インストルメンテーション」で説明されている手順に従って、アプリのインストルメンテーションを作成します。
Cloud Shell に戻り、startup.sh を、次の行のようにして作成します。
cat > startup.sh << 'EOF' #!/bin/bash # Download the bash script curl -sSfL https://github.com/open-telemetry/opentelemetry-dotnet-instrumentation/releases/latest/download/otel-dotnet-auto-install.sh -O # Install core files sh ./otel-dotnet-auto-install.sh # Enable execution for the instrumentation script chmod +x $HOME/.otel-dotnet-auto/instrument.sh # Setup the instrumentation for the current shell session . $HOME/.otel-dotnet-auto/instrument.sh export OTEL_SERVICE_NAME="MyFirstAzureWebApp-Azure" export OTEL_EXPORTER_OTLP_ENDPOINT="http://localhost:4318" export OTEL_TRACES_EXPORTER="otlp" export OTEL_METRICS_EXPORTER="otlp" export OTEL_LOGS_EXPORTER="otlp" # Run your application with instrumentation OTEL_SERVICE_NAME=myapp OTEL_RESOURCE_ATTRIBUTES=deployment.environment=staging,service.version=1.0.0 dotnet /home/site/wwwroot/MyFirstAzureWebApp.dll EOF
次の Azure CLI コマンドを使用して、このファイルをアプリにデプロイします。 まだ ~/MyFirstAzureWebApp ディレクトリにいる場合は、リソース グループとアプリ名の既定値は
az webapp up
によって既に設定されているため、他のパラメーターは必要ありません。az webapp deploy --src-path startup.sh --target-path /home/site/startup.sh --type static
ヒント
この方法では、アプリケーションとは別に startup.sh ファイルがデプロイされます。 このようにすることで、インストルメンテーション構成がアプリケーション コードと分離されます。 ただし、他のデプロイ方法を使用して、アプリケーションと共にスクリプトをデプロイすることもできます。
アプリの管理ページに戻り、左側のメニューから [構成] を選択します。
[スタートアップ コマンド] を [/home/site/startup.sh] に設定します。これは、前の手順でデプロイしたものと同じパスです。
[保存]、[続行] の順に選択します。
5.Application Insights での検証
otel-collector サイドカーにより、Application Insights にデータがエクスポートされているはずです。
https://<app-name>.azurewebsites.net
のブラウザー タブに戻り、ページを数回更新して、いくつかの Web 要求を生成します。リソース グループの概要ページに戻り、Application Insights リソースを選択します。 既定のグラフにいくつかのデータが表示されるはずです。
Note
この非常に一般的な監視シナリオでは、Application Insights は、Jaeger、Prometheus、Zipkin など、使用できる OpenTelemetry ターゲットの 1 つに過ぎません。
6.リソースをクリーンアップする
この環境が不要になった場合には、リソース グループとすべての関連リソースを削除できます。 これには、Cloud Shell で次のコマンドを実行するだけです。
cd ~/MyFirstAzureWebApp
az group delete --yes
cd ~/app-service-sidecar-tutorial-prereqs
azd down
よく寄せられる質問
サイドカー コンテナーでは内部通信をどのように処理しますか?
サイドカー コンテナーではメイン コンテナーと同じネットワーク ホストが共有されるため、メイン コンテナー (および他のサイドカー コンテナー) は、localhost:<port>
を使用してサイドカー上の任意のポートに到達できます。 例の startup.sh では、localhost:4318
を使用して otel-collector サイドカーのポート 4318 にアクセスします。
[コンテナーの編集] ダイアログで、[ポート] ボックスは現在 App Service では使用されていません。 サイドカーがリッスンしているポートを示すなど、サイドカーメタデータの一部としてこれを使用できます。
他の言語スタックをインストルメント化するにはどうすればよいですか?
同様の方法を使用して、他の言語スタックでアプリをインストルメント化できます。 詳細については、OpenTelemetry のドキュメントを参照してください。