チュートリアル: Azure App Service でカスタム コンテナーのサイドカー コンテナーを構成する
このチュートリアルでは、OpenTelemetry コレクターをサイドカー コンテナーとして Azure App Service の Linux カスタム コンテナー アプリに追加します。 独自のコードを使用する Linux アプリについては、「チュートリアル: Azure App Service で Linux アプリのサイドカー コンテナーを構成する」を参照してください。
Azure App Service では、サイドカー対応のカスタム コンテナー アプリごとに最大 9 つのサイドカー コンテナーを追加できます。 サイドカー コンテナーを使用すると、追加のサービスと機能をメイン アプリケーション コンテナーに緊密に結合することなく、コンテナー アプリケーションにデプロイできます。 たとえば、監視、ログ、構成、ネットワーク サービスをサイドカー コンテナーとして追加できます。 OpenTelemetry コレクターのサイドカーは、このような監視例の 1 つです。
App Service のサイド コンテナーの詳細については、次を参照してください。
Azure サブスクリプションをお持ちでない場合は、開始する前に Azure 無料アカウントを作成してください。
1.必要なリソースを設定する
最初に、チュートリアルで使用するリソースを作成します。 これらはこの特定のシナリオで使用され、一般的にサイドカー コンテナーには必要ありません。
Azure Cloud Shell で次のコマンドを実行します。
git clone https://github.com/Azure-Samples/app-service-sidecar-tutorial-prereqs cd app-service-sidecar-tutorial-prereqs azd env new my-sidecar-env azd provision
ダイアログが表示されたら、必要なサブスクリプションとリージョンを指定します。 次に例を示します。
- [サブスクリプション]: 自分のサブスクリプション。
- リージョン: "(ヨーロッパ) 西ヨーロッパ"。
デプロイが完了すると、次の出力が表示されます。
APPLICATIONINSIGHTS_CONNECTION_STRING = InstrumentationKey=...;IngestionEndpoint=...;LiveEndpoint=... Open resource group in the portal: https://portal.azure.com/#@/resource/subscriptions/.../resourceGroups/...
ブラウザー タブでリソース グループのリンクを開きます。この接続文字列は後で使用する必要があります。
Note
azd provision
は、付属のテンプレートを使用して、次の Azure リソースを作成します。- my-sidecar-env_group というリソース グループ。
- 2 つのイメージがデプロイされたコンテナー レジストリ。
- OpenTelemetry モジュールを含む Nginx イメージ。
- Azure Monitor にエクスポートするように構成された OpenTelemetry コレクター イメージ。
- ログ分析ワークスペース
- Application Insights コンポーネント
2.サイドカー対応アプリを作成する
リソース グループの管理ページで、[作成] を選択します。
Web アプリを検索し、[作成] で下矢印 選択し、[Web アプリ] を選択します。
[基本] パネルを次のように構成します。
- 名前: 一意の名前
- 公開: コンテナー
- オペレーティング システム: Linux
- リージョン:
azd provision
で選択したのと同じリージョン - Linux プラン: 新しい App Service プラン
[コンテナー] を選択します。 [コンテナー] パネルを次のように構成します。
- サイドカー サポート: 有効
- イメージ ソース: Azure Container Registry
- レジストリ:
azd provision
によって作成されたレジストリ - イメージ: nginx
- タグ: latest
- ポート: 80
Note
これらの設定は、サイドカー対応アプリでは異なる方法で構成されます。 詳細については、「サイドカー対応アプリでの相違点」を参照してください。
[Review + create](確認と作成) を選択し、次に [作成] を選択します。
デプロイが完了したら、[リソースに移動] を選択します。
新しいブラウザー タブで、
https://<app-name>.azurewebsites.net
に移動し、既定の Nginx ページを表示します。
3.サイドカー コンテナーを追加する
このセクションでは、サイドカー コンテナーをカスタム コンテナー アプリに追加します。
アプリの管理ページで、左側のメニューから [デプロイ センター] を選びます。
デプロイ センターに、アプリ内のすべてのコンテナーが表示されます。 現時点では、メイン コンテナーのみがあります。
[追加] を選択し、次のように新しいコンテナーを構成します。
- 名前: otel-collector
- イメージ ソース: Azure Container Registry
- レジストリ:
azd provision
によって作成されたレジストリ - イメージ: otel-collector
- タグ: latest
適用を選択します。
これで、デプロイ センターに 2 つのコンテナーが表示されます。 メイン コンテナーにはメインのマークが付けられ、サイドカー コンテナーにはサイドカーのマークが付けられます。 各アプリで使用できるメイン コンテナーは 1 つですが、複数のサイドカー コンテナーを持つことができます。
4.環境変数を構成する
サンプル シナリオでは、otel-collector サイドカーは OpenTelemetry データを Azure Monitor にエクスポートするように構成されていますが、環境変数として接続文字列が必要です (「otel-collector イメージ の OpenTelemetry 構成ファイル」参照)。
通常の App Service アプリと同じようにコンテナーの環境変数を構成するには、アプリ設定を構成します。 アプリ設定は、アプリ内のすべてのコンテナーからアクセスできます。
アプリの管理ページで、左側のメニューから [環境変数] を選択します。
[追加] を選択してアプリ設定を追加し、次のように構成します。
- 名前: APPLICATIONINSIGHTS_CONNECTION_STRING
- [値]:
azd provision
の出力内の接続文字列。 Cloud Shell セッションが失われた場合は、Application Insight リソースの [概要] ページの [接続文字列] で確認することもできます。
[適用]、[適用]、[確認] の順に選択します。
Note
特定のアプリ設定は、サイドカー対応アプリには適用されません。 詳細については、「サイドカー対応アプリでの相違点」を参照してください。
5.Application Insights での検証
otel-collector サイドカーにより、Application Insights にデータがエクスポートされているはずです。
https://<app-name>.azurewebsites.net
のブラウザー タブに戻り、ページを数回更新して、いくつかの Web 要求を生成します。リソース グループの概要ページに戻り、Application Insights リソースを選択します。 既定のグラフにいくつかのデータが表示されるはずです。
Note
この非常に一般的な監視シナリオでは、Application Insights は、Jaeger、Prometheus、Zipkin など、使用できる OpenTelemetry ターゲットの 1 つに過ぎません。
リソースをクリーンアップする
この環境が必要なくなったら、リソース グループ、App Service、およびすべての関連リソースを削除できます。 複製されたリポジトリで、Cloud Shell で次のコマンドを実行するだけです。
azd down
サイドカー コンテナーでは内部通信をどのように処理しますか?
サイドカー コンテナーではメイン コンテナーと同じネットワーク ホストが共有されるため、メイン コンテナー (および他のサイドカー コンテナー) は、localhost:<port>
を使用してサイドカー上の任意のポートに到達できます。 これは、Nginx コンテナーがサイドカーにデータを送信する方法です (「サンプル Nginx イメージ用の OpenTelemetry モジュール構成」を参照してください)。
[コンテナーの編集] ダイアログの [ポート] ボックスは、現在 App Service では使用されていません。 これは、サイドカーがリッスンしているポートを示すなど、サイドカー メタデータの一部として使用できます。
サイドカー対応アプリでの相違点
サイドカー対応アプリは、サイドカー対応ではないアプリとは異なる方法で構成します。 具体的には、アプリ設定を使用してメイン コンテナーとサイドカーを構成するのではなく、リソースのプロパティで直接構成します。 これらのアプリ設定は、サイドカー対応アプリには適用されません。
- レジストリ認証設定:
DOCKER_REGISTRY_SERVER_URL
、DOCKER_REGISTRY_SERVER_USERNAME
、およびDOCKER_REGISTRY_SERVER_PASSWORD
。 - コンテナー ポート:
WEBSITES_PORT