Azure Container Appsでの一般的なデプロイ エラーのトラブルシューティング

この記事は、Azure Container Appsでサポートエスカレーションが最も頻繁に必要な展開エラーシナリオを特定して解決するのに役立ちます。 各シナリオには、症状、ポータルと CLI の診断手順、および解決策が含まれます。

クイック リファレンス テーブルで症状を見つけ、一致するシナリオへのリンクに従います。

症状のクイック リファレンス

症状: Scenario
プロビジョニング エラーでデプロイが失敗し、リビジョンは作成されません イメージプルエラー
リビジョンが作成されましたが、状態が Failed または Degraded コンテナーのクラッシュと起動エラー
シークレットまたは環境変数が空であるか、実行時に見つからない シークレット アクセスの問題
デプロイ中または実行時にKey Vault参照が失敗する Key Vault参照エラー
マネージド ID 呼び出しは 401 または 403 を返します マネージド ID の構成ミス
Init コンテナーがハングまたは失敗する、アプリが起動しない 初期化のタイミングに関する問題
リビジョンはプロビジョニング済みですが、Degraded とマークされています 正常性確認プローブの失敗
アプリは正常ですが、要求はエラーを返すか、応答を返しません イングレスとトラフィック のルーティングに関する問題
レジストリ認証が失敗する (401 または UNAUTHORIZED) コンテナー レジストリ認証

確認箇所: 診断画面

次の診断画面を使用して、デプロイの失敗を調査します。

Surface 表示される内容 アクセス方法
問題の診断と解決 一般的な問題、トラブルシューティングカテゴリ、ガイド付き分析のための自動化された検出器。 Azure ポータルで、コンテナー アプリに移動し、[問題の診断と解決] を選択します。
システム ログ プラットフォーム レベルのイベント: イメージ プルの状態、プローブの結果、ID エラー、シークレット同期の結果。 az containerapp logs show -g <RESOURCE_GROUP_NAME> -n <CONTAINER_APP_NAME> --type system --tail 50 または Log Analytics テーブルContainerAppSystemLogs_CL
コンソール ログ アプリケーション stdout/stderr: スタック トレース、スタートアップ メッセージ、ランタイム エラー。 az containerapp logs show -g <RESOURCE_GROUP_NAME> -n <CONTAINER_APP_NAME> --tail 100 またはポータルの [ログ ストリーム] ブレード。
HTTP ログ イングレス層要求ログ: 状態コード、待機時間、パス、再試行、応答の詳細。 環境の診断設定Azure Monitor使用してオプトインします。 Log Analytics ContainerAppHTTPLogs テーブル。
リビジョンの詳細プロパティ provisioningStateprovisioningErrorhealthStaterunningStaterunningStateDetails az containerapp revision show -g <RESOURCE_GROUP_NAME> -n <CONTAINER_APP_NAME> --revision <REV> -o json またはポータルの [変更履歴] ブレード。
デプロイ時のエラー リビジョンが作成されない場合のアプリレベルのprovisioningStateprovisioningError az containerapp show -g <RESOURCE_GROUP_NAME> -n <CONTAINER_APP_NAME> -o json

イメージ プル エラー

イメージ プルエラーは、デプロイ エラーの最も一般的な原因の 1 つです。 これらは通常、Azure Container Appsが使用可能なリビジョンを作成する前に発生します。

Symptoms

  • リビジョンは作成されませんでした。
  • provisioningStateFailedです。
  • エラー メッセージには、 ImagePullBackOffUNAUTHORIZED、または manifest unknownが記載されています。

検索する場所: イメージ プル診断

Azure ポータルで、Container App>Revisions (リストが空であるか、失敗したエントリが表示されます) >Diagnose に移動して問題を解決し、"image" を検索します。

# Check app-level provisioning state and error
az containerapp show -g <RESOURCE_GROUP_NAME> -n <CONTAINER_APP_NAME> \
  --query "{provisioning:properties.provisioningState, error:properties.provisioningError, latestRevision:properties.latestRevisionName}" -o json

# List revisions (expect empty or failed)
az containerapp revision list -g <RESOURCE_GROUP_NAME> -n <CONTAINER_APP_NAME> \
  --query "[].{name:name, health:properties.healthState, provisioning:properties.provisioningState}" -o table

一般的な原因と解決策

原因 エラー信号 Resolution
イメージ タグが存在しない manifest unknowntag not found レジストリに正確なタグが存在するかどうかを確認します。 az acr repository show-tags --name <AZURE_CONTAINER_REGISTRY_NAME> --repository <REPOSITORY_NAME>
レジストリには認証が必要です UNAUTHORIZED: authentication required コンテナー アプリでレジストリ資格情報を構成します。 ACR プルには、管理者資格情報またはマネージド ID を使用します。 コンテナー レジストリ認証を参照してください。
レジストリのホスト名が正しくありません name unknown、DNS 解決エラー --image値で正しい<REGISTRY>.azurecr.ioホスト名が使用されていることを確認します。
ファイアウォールまたは NSG によってレジストリがブロックされる 接続タイムアウト カスタム VNet を使用している場合は、レジストリへの送信アクセスを確認します。 AzureContainerRegistry サービス タグまたは FQDN 規則を追加します。

コンテナーのクラッシュと起動エラー

このセクションは、リビジョンが作成されていても、ワークロードの開始または実行の維持に失敗する場合に使用します。

Symptoms

  • リビジョンは作成されますが、 healthStateUnhealthy となります。
  • runningStateFailedです。
  • コンソール ログが空の場合があります (出力を書き込む前にコンテナーが終了します)。

検索する場所: クラッシュ診断とスタートアップ診断

Azure ポータルで、Container App>Revisions に移動し、失敗したリビジョンを選択し、[イベント] タブを開きます。イベントのBackOffまたはCrashLoopBackOffを確認します。

# Inspect revision detail
az containerapp revision show -g <RESOURCE_GROUP_NAME> -n <CONTAINER_APP_NAME> --revision <REV> \
  --query "{health:properties.healthState, running:properties.runningState, details:properties.runningStateDetails, error:properties.provisioningError}" -o json

# Pull console logs (if any output was written)
az containerapp logs show -g <RESOURCE_GROUP_NAME> -n <CONTAINER_APP_NAME> --tail 100

# Pull system logs for platform-level events
az containerapp logs show -g <RESOURCE_GROUP_NAME> -n <CONTAINER_APP_NAME> --type system --tail 50

一般的な原因と解決策

原因 エラー信号 Resolution
起動時にアプリケーションがクラッシュする コンソールログ内のスタックトレース アプリケーション エラーを修正します。 ログが空の場合、stdout がフラッシュされる前にクラッシュが発生します。 早期ログ記録を追加するか、出力バッファリングを無効にするようにランタイムを設定します (たとえば、 PYTHONUNBUFFERED=1)。
コマンドまたはエントリポイントが無効です exec format errorexecutable file not found コンテナーの commandargs が、イメージが想定するものと一致していることを確認してください。 properties.template.containers[].commandについてはaz containerapp revision showを確認してください。
環境変数がありません KeyErrorundefined、null 参照 必要なすべての env var が設定されていることを確認します。 シークレット アクセスの問題を参照してください。
リソースが不足しています OOMKilled コンテナーのメモリと CPU の制限を増やす: az containerapp update -g <RESOURCE_GROUP_NAME> -n <CONTAINER_APP_NAME> --cpu 1.0 --memory 2.0Gi

シークレット アクセスの問題

このセクションでは、実行時にアプリケーションの構成を中断するシークレット値が見つからないか空の場合のトラブルシューティングを行います。

Symptoms

  • コンテナーが起動しますが、予期される構成値が空か不足しているため、アプリケーションは失敗します。
  • シークレットを参照する環境変数には値がありません。

検索する場所: シークレット参照診断

Azure ポータルで、Container App>Settings>Secrets に移動してシークレットが存在することを確認します。 次に、 Container App>Revisions に移動し、リビジョンを選択し、 コンテナーの詳細>Environment 変数 を確認して、参照が正しいことを確認します。

# List secrets defined on the app
az containerapp secret list -g <RESOURCE_GROUP_NAME> -n <CONTAINER_APP_NAME> -o table

# Show the revision template to verify env var references
az containerapp revision show -g <RESOURCE_GROUP_NAME> -n <CONTAINER_APP_NAME> --revision <REV> \
  --query "properties.template.containers[].env" -o json

一般的な原因と解決策

原因 エラー信号 Resolution
シークレット名の不一致 Env var 値が空です 環境変数の secretRef は、シークレット名と完全に一致している必要があります (大文字と小文字が区別されます)。
シークレットが定義されていません 不明なシークレットを参照するデプロイ エラー デプロイする前にシークレットを定義します: az containerapp secret set -g <RESOURCE_GROUP_NAME> -n <CONTAINER_APP_NAME> --secrets mysecret=myvalue
シークレットは更新されましたが、リビジョンは再起動されません 古い値が保持される 新しいリビジョンをデプロイするか、既存のリビジョン ( az containerapp revision restart -g <RESOURCE_GROUP_NAME> -n <CONTAINER_APP_NAME> --revision <REV>) を再起動します。 シークレットのみを更新しても、新しいリビジョンはトリガーされません。
リビジョンで参照されている間に、シークレットが削除されました コンテナーの起動に失敗する 削除されたシークレットへの参照を削除する新しいリビジョンをデプロイし、古いリビジョンを非アクティブ化します。

Important

Container Apps では、シークレットのスコープはアプリケーションに設定されますが、環境変数の参照のスコープはリビジョンに設定されます。 シークレット値を変更しても、実行中のリビジョンには自動的に反映されません。 更新された値を有効にするには、新しいリビジョンを作成するか、既存のリビジョンを再起動する必要があります。

Key Vault参照エラー

このセクションは、Key Vaultに基づくシークレットがデプロイ中またはアプリの実行中に解決できない場合に使用します。

Symptoms

  • デプロイが失敗するか、シークレット値が使用できません。
  • システム ログには、Key Vault へのアクセス エラーが記録されています。
  • provisioningErrorでは、Key Vaultに対する認証または承認の失敗について説明します。

確認場所: Key Vault のアクセス診断

Azure ポータルで、Container App>Settings>Secrets に移動します (Key Vault リファレンスの警告アイコンを探します)。 次に、Container App>Diagnose に移動して問題を解決し、"Key Vault" を検索します。

# List secrets and check for Key Vault reference status
az containerapp secret list -g <RESOURCE_GROUP_NAME> -n <CONTAINER_APP_NAME> -o json

# Verify managed identity is assigned
az containerapp identity show -g <RESOURCE_GROUP_NAME> -n <CONTAINER_APP_NAME>

一般的な原因と解決策

原因 エラー信号 Resolution
管理IDが有効になっていません Managed identity not configured システム割り当てマネージド ID またはユーザー割り当てマネージド ID を有効にする: az containerapp identity assign -g <RESOURCE_GROUP_NAME> -n <CONTAINER_APP_NAME> --system-assigned
RBAC ロールがありません Authorization failedAccess denied Key Vault: のマネージド ID に、Key Vault az role assignment create --role "Key Vault Secrets User" --assignee <IDENTITY_PRINCIPAL_ID> --scope <KEYVAULT_RESOURCE_ID> ロールを付与します。
Key Vault ファイアウォールによってアクセスがブロックされる 接続タイムアウト、 ForbiddenByFirewall Container Apps 環境の送信 IP を Key Vault ファイアウォールに追加するか、プライベート エンドポイントを構成します。 また、AzureKeyVault サービス タグを追加し、AZURE FIREWALLで UDR を使用する場合は FQDN をlogin.microsoft.comします。
シークレットがKey Vaultで無効になっている SecretDisabled Key Vault でシークレットを有効にする: Azure portal > Key Vault > Secrets > シークレットを選択 > 有効にする。
Key Vault URI の形式に誤りがあります SecretNotFoundInvalidUri URI 形式 ( https://<vault>.vault.azure.net/secrets/<secret-name> または https://<vault>.vault.azure.net/secrets/<secret-name>/<version>) を確認します。
RBAC ロールの伝達の遅延 約5分後に動作します RBAC の変更が反映されるまでに最大 10 分かかることがあります。 ID トークン キャッシュは、最大 24 時間保持できます。 待機して再試行するか、新しいリビジョンをデプロイします。

マネージド ID の構成ミス

このセクションは、マネージド ID を使用するようにアプリが構成されていても、サービスAzure認証が失敗する場合に使用します。

Symptoms

  • アプリケーション コードは、Azure サービスを呼び出すときに 401 (未承認) または 403 (禁止) を受け取ります。
  • マネージド ID トークンの取得が失敗する。

検索する場所: ID と承認の診断

Azure ポータルで、Container App>Settings>Identity に移動します (システム割り当て ID がOnされているか、ユーザー割り当て ID が一覧表示されていることを確認します)。 次に、ターゲット リソースの IAM/アクセス制御ブレードでロールの割り当てを確認します。

# Verify identity configuration
az containerapp identity show -g <RESOURCE_GROUP_NAME> -n <CONTAINER_APP_NAME>

# Check role assignments for the identity's principal ID
az role assignment list --assignee <PRINCIPAL_ID> --all -o table

一般的な原因と解決策

原因 エラー信号 Resolution
ID が割り当てられていない SDK による ManagedIdentityCredential エラーのスロー ID を割り当てる: az containerapp identity assign -g <RESOURCE_GROUP_NAME> -n <CONTAINER_APP_NAME> --system-assigned
正しくない ID が使用されました (システムとユーザー割り当て) 対象リソースで 403 ユーザー割り当て ID を使用する場合は、コードでクライアント ID DefaultAzureCredential(managed_identity_client_id="<CLIENT_ID>")を指定します。
ターゲット リソースにロールの割り当てが見つからない 403 ターゲット リソースに必要なロール (ストレージ アカウントの ストレージ BLOB データ共同作成者 など) を割り当てます。
Init コンテナーには ID が必要ですが、使用できません Init コンテナーが認証エラーで失敗する 従量課金および専用ワークロードプロファイル環境では、init コンテナーはマネージド IDを使用できません。 ID に依存するロジックをメイン コンテナーに移動するか、ワークロード プロファイルの使用環境を使用して ID に lifecycle: Init を設定します。
ロール変更後、トークン キャッシュが古いままになる 403 は修正後数分保持されます ID トークン キャッシュは、最大 24 時間保持できます。 新しいリビジョンをデプロイして、トークンの更新を強制します。

Tip

Container Apps は、マネージド ID トークンを取得するための内部アクセス可能な REST エンドポイントを公開します。 このエンドポイントを直接呼び出すのではなく、環境間で一貫したエクスペリエンスを実現するために、Azure Identity SDK (DefaultAzureCredential) を使用します。

初期化のタイミングに関する問題

このセクションは、メイン コンテナーがトラフィックの提供を開始する前に、init コンテナーが起動または失敗をブロックする場合に使用します。

Symptoms

  • アプリが実行中の状態に達することはありません。
  • Init コンテナーがスタックしているか失敗しているようです。
  • システム ログには、実行中の init コンテナーが表示されますが、完了しません。

確認場所: init コンテナーの診断情報

Azure ポータルで、Container App > Revisions に移動し、リビジョンを選択して、[イベント] タブを開きます。init コンテナー イベントを探します。

# Check revision running state
az containerapp revision show -g <RESOURCE_GROUP_NAME> -n <CONTAINER_APP_NAME> --revision <REV> \
  --query "{running:properties.runningState, details:properties.runningStateDetails}" -o json

# Check init container logs
az containerapp logs show -g <RESOURCE_GROUP_NAME> -n <CONTAINER_APP_NAME> --container <INIT_CONTAINER_NAME> --tail 100

# System logs for platform events
az containerapp logs show -g <RESOURCE_GROUP_NAME> -n <CONTAINER_APP_NAME> --type system --tail 50

一般的な原因と解決策

原因 エラー信号 Resolution
Init コンテナーは、まだ使用できないサービスに依存します init コンテナー ログで接続が拒否またはタイムアウトしました init コンテナーに再試行ロジックまたは準備チェックを追加します。 依存サービスが初期化時に使用可能であると想定しないでください。
Init コンテナーが終了しない リビジョンはProvisioningのままです init コンテナーが有限のコマンドを実行し、コード 0 で終了することを確認します。 実行される Init コンテナーは、メイン コンテナーの起動を無期限にブロックします。
Init コンテナーにはマネージド ID が必要です init コンテナーから 401 または 403 従量課金のみの専用ワークロード プロファイル環境では、マネージド ID は init コンテナーでは使用できません。 ワークロード プロファイルの使用環境を使用するか、ID に依存する作業をメイン コンテナーに移動します。
init コンテナ イメージの取得に失敗する イメージプルエラーと同じ症状 同じレジストリ認証とイメージ タグ チェックを適用します。
操作の順序: シークレットがまだ同期されていません Init コンテナーが空のシークレットを読み取る Key Vault シークレットの同期は非同期に行われます。 init コンテナーがKey Vault参照されるシークレットに依存している場合、値はまだ使用できない可能性があります。 初期化時の依存関係に直接シークレットを使用するか、再試行ロジックを追加します。

正常性プローブのエラー

このセクションは、リビジョンのデプロイは正常に完了したものの、プローブ チェックの結果、正常でない、またはパフォーマンスが低下していると判定された場合に使用します。

Symptoms

  • リビジョンはプロビジョニングされますが、実行中の状態は Degraded
  • システム ログには、プローブエラーの詳細を含む Unhealthy イベントが表示されます。
  • アプリはローカルで動作しますが、ACA の正常性チェックに失敗します。

確認場所: プローブの正常性診断

Azure ポータルで、Container App>Application>Containers>Health probes (プローブ構成の確認) に移動します。 次に、 Container App>Revisions に移動し、リビジョンを選択してイベントを開きます。

# Check the revision's probe configuration
az containerapp revision show -g <RESOURCE_GROUP_NAME> -n <CONTAINER_APP_NAME> --revision <REV> \
  --query "properties.template.containers[].probes" -o json

# System logs for probe failure events
az containerapp logs show -g <RESOURCE_GROUP_NAME> -n <CONTAINER_APP_NAME> --type system --tail 50

一般的な原因と解決策

原因 エラー信号 Resolution
プローブ ポートがアプリ ポートと一致しない プローブが接続拒否を返す アプリのリッスン ポートとイングレス targetPortに一致するようにプローブ ポートを設定します。
アプリの起動に時間がかかりすぎる アプリの準備が整う前にプローブが失敗し、リビジョンが失敗状態になる Degraded liveness プローブと readiness プローブの initialDelaySeconds を増やします。 Java アプリと共通です。
プローブ パスが 200 以外を返す プローブが HTTP エラーで失敗する 正常性エンドポイントが 200 を返すようにします。 HTTP プローブの場合は、パスが存在し、正しく応答されていることを確認します。
アプリが init の後でのみバインドされる場合の TCP プローブ アプリがリッスンする前にプローブが接続される より高い failureThreshold を持つスタートアップ プローブを使用して、アプリがそのポートをバインドする時間を与えます。

既定のプローブ値

イングレスを有効にし、プローブを構成しない場合、ACA は次の既定値を適用します。

財産 Startup 稼動 準備
Protocol TCP TCP TCP
Port イングレス ターゲット ポート イングレス ターゲット ポート イングレス ターゲット ポート
初期延期時間 1s 1s 3s
ピリオド 1s 1s 5s
失敗のしきい値 240 48 N/A

イングレスとトラフィック のルーティングに関する問題

このセクションは、アプリが実行されているが、イングレスまたはリビジョン のトラフィック設定が正しくないために要求が失敗する場合に使用します。

Symptoms

  • アプリは実行中で正常ですが、HTTP 要求はエラー (404、502) を返すか、応答を返しません。
  • アプリは az containerapp exec 経由で動作しますが、パブリック URL 経由では動作しません。

確認箇所: イングレスとトラフィック診断

Azure ポータルで、Container App>Settings>Ingress に移動します。 次に、 Container App>Application>Revisions (トラフィックの分割を確認) に移動します。

# Check ingress configuration and traffic split
az containerapp show -g <RESOURCE_GROUP_NAME> -n <CONTAINER_APP_NAME> \
  --query "{ingress:properties.configuration.ingress, latestReady:properties.latestReadyRevisionName}" -o json

# Verify the FQDN
az containerapp show -g <RESOURCE_GROUP_NAME> -n <CONTAINER_APP_NAME> --query "properties.configuration.ingress.fqdn" -o tsv

一般的な原因と解決策

原因 エラー信号 Resolution
イングレスが有効になっていない FQDN が割り当てられていない、アプリに到達できない Ingress を有効にする: az containerapp ingress enable -g <RESOURCE_GROUP_NAME> -n <CONTAINER_APP_NAME> --type external --target-port 8080 --transport auto
ターゲット ポートの不一致 502 無効なゲートウェイ アプリがリッスンするポートと一致するように targetPort を設定します。
最新のリビジョンではトラフィックの重みが 0% です 古いリビジョンがトラフィックを処理する トラフィックの分割を更新: az containerapp ingress traffic set -g <RESOURCE_GROUP_NAME> -n <CONTAINER_APP_NAME> --revision-weight latest=100
IP制限によりクライアントがブロックされます 403 [イングレス設定] で IP セキュリティの制限を確認します。
間違ったトランスポート (HTTP と TCP) 接続エラー イングレスの種類がアプリのプロトコルと一致するかどうかを確認します。

コンテナー レジストリ認証

このセクションは、アプリがコンテナー レジストリに対して認証できないためにイメージプルが失敗する場合に使用します。

Symptoms

  • デプロイは UNAUTHORIZED: authentication requiredで失敗します。
  • このエラーは、多くの場合、他の問題 (無効なイメージ タグなど) をマスクします。これは、レジストリがタグを確認する前に要求を拒否するためです。

参照する場所: レジストリ認証の診断

Azure ポータルで、Container App>Settings>Container に移動します (レジストリ設定を確認します)。 次に、 Container App>Diagnose に移動して問題を解決 し、"レジストリ" を検索します。

# Check configured registries
az containerapp show -g <RESOURCE_GROUP_NAME> -n <CONTAINER_APP_NAME> \
  --query "properties.configuration.registries" -o json

# Verify ACR credentials work
az acr login --name <AZURE_CONTAINER_REGISTRY_NAME>
docker pull <AZURE_CONTAINER_REGISTRY_NAME>.azurecr.io/<REPOSITORY_NAME>:<TAG>

一般的な原因と解決策

原因 エラー信号 Resolution
レジストリ資格情報が構成されていない UNAUTHORIZED レジストリ資格情報を追加する: az containerapp registry set -g <RESOURCE_GROUP_NAME> -n <CONTAINER_APP_NAME> --server <AZURE_CONTAINER_REGISTRY_NAME>.azurecr.io --identity system
ACR で無効になっている管理者資格情報 UNAUTHORIZED と管理者ユーザー 管理者ユーザーを有効にする: az acr update -n <AZURE_CONTAINER_REGISTRY_NAME> --admin-enabled true推奨: 代わりに ACR プルにマネージド ID を使用します。
マネージド ID に AcrPull ロールがない UNAUTHORIZED AcrPull ロールを割り当てます: az role assignment create --role AcrPull --assignee <PRINCIPAL_ID> --scope <ACR_RESOURCE_ID>
サーバーのホスト名が正しくありません name unknown レジストリ サーバーが ACR: <your-acr>.azurecr.ioと一致するかどうかを確認します。

診断ワークフローの概要

何が失敗したかわからない場合は、次のシーケンスを使用します。

  1. az containerapp show -g <RESOURCE_GROUP_NAME> -n <CONTAINER_APP_NAME> -o json を実行します。 provisioningStateprovisioningError、およびlatestRevisionNameを確認します。

  2. az containerapp revision list -g <RESOURCE_GROUP_NAME> -n <CONTAINER_APP_NAME> -o table を実行します。 一覧が空の場合、エラーはイメージ プルまたはテンプレート検証の問題です (イメージ プルエラーとコンテナー レジストリ認証)。 リビジョンが存在する場合は、手順 3 に進みます。

  3. az containerapp revision show -g <RESOURCE_GROUP_NAME> -n <CONTAINER_APP_NAME> --revision <REV> -o json を実行します。 healthStaterunningStaterunningStateDetails、およびprovisioningErrorを確認します。

  4. az containerapp logs show -g <RESOURCE_GROUP_NAME> -n <CONTAINER_APP_NAME> --type system --tail 50を実行して、プローブの失敗、ID エラー、シークレット同期の問題などのプラットフォーム レベルのイベントを表示します。

  5. az containerapp logs show -g <RESOURCE_GROUP_NAME> -n <CONTAINER_APP_NAME> --tail 100を実行して、スタック トレース、構成エラー、接続エラーなどのアプリケーション stdout/stderr を表示します。

  6. 前の手順で認証関連のエラーが発生した場合は、 az containerapp identity show -g <RESOURCE_GROUP_NAME> -n <CONTAINER_APP_NAME> を実行して ID 構成を確認します。

ポータルで問題の診断と解決を使用する

Container Apps ポータルには、自動診断を含む [問題の診断と解決 ] ブレードが含まれています。

  1. Azure ポータルでコンテナー アプリに移動します。
  2. 左側のナビゲーションから [ 問題の診断と解決 ] を選択します。
  3. 検索ボックスを使用して、特定の診断 ("image pull"、"health probe"、"ingress" など) を見つけます。
  4. ガイド付き分析用のトラブルシューティング カテゴリ タイルを選択します。

このブレードは、ガイド付き診断の開始点として推奨されます。 この記事のすべてのシナリオに対応しているわけではありませんが、一般的な問題の自動チェックが提供されます。

Log Analyticsクエリを使用して詳細な調査を行う

CLI の出力とポータルの診断が十分でない場合は、Log Analyticsで基になるログに直接クエリを実行します。 次の 2 つのクエリでは、プラットフォーム レベルのエラーとイングレス レベルの HTTP エラーの最も一般的な開始点について説明します。

システム レベルの障害を見つける

ContainerAppSystemLogs_CL
| where RevisionName_s == "<REV>"
| where Log_s contains "BackOff" or Log_s contains "Failed" or Log_s contains "Error"
  or Reason_s == "Unhealthy"
| project TimeGenerated, Reason_s, Log_s
| order by TimeGenerated desc
| take 50

このクエリでは、イメージのプル エラー、プローブエラー、プロビジョニング エラー、およびその他のプラットフォーム イベントが表示されます。

HTTP エラーを見つける (HTTP ログが有効になっている必要があります)

Ingress レイヤーは HTTP ログを出力し、それらを有効にするかどうかは選択できます。 Container Apps マネージド環境の Azure Monitor の診断設定で、これらのログを有効にします。 有効にすると、ContainerAppHTTPLogsテーブルがLog Analyticsに表示されます。 テーブルが表示されるまでに数分かかる場合があります。

ContainerAppHTTPLogs
| where TimeGenerated > ago(1h)
| where StatusCode >= 400
| project TimeGenerated, ContainerAppName, RevisionName, Method, Path,
  StatusCode, ResponseCodeDetails, RequestDuration, RequestId
| order by TimeGenerated desc
| take 100

このクエリでは、イングレスレイヤーの HTTP ログがフィルター処理され、過去 1 時間の失敗した要求 (状態コード 400 以上) のみが表示されます。 タイムスタンプ、アプリとリビジョン名、HTTP メソッドとパス、エラー状態コード、エラーがコンテナー (ResponseCodeDetails) またはプラットフォーム (via_upstreamroute_not_found)、要求期間、およびアプリケーション ログとの関連付けに使用できる一意の要求 ID を示すconnection_timeout フィールドが返されます。

低速な要求分析、リビジョンごとのエラー率、単一要求トレース、失敗した上位のエンドポイントなど、その他のクエリについては、「Log Analyticsを使用してAzure Container Appsのログを監視する」を参照してください。