Log Analytics を使用して Azure Container Apps のログを監視する

Azure Container Apps は、コンテナー アプリのログを監視および分析するために、Azure Monitor Log Analytics と統合されています。 ログ監視ソリューションとして選んだ場合、Container Apps 環境には Log Analytics ワークスペースが含まれており、環境内で実行されているすべてのコンテナー アプリのシステム ログ データとアプリケーション ログ データを格納するための共通の場所として使用できます。

ログ エントリには、Azure portal から、または Azure CLI を使ってコマンド シェルから Log Analytics テーブルを照会することでアクセスできます。

Container Apps には 2 種類のログがあります。

  • コンソール ログ。これはアプリによって出力されます。
  • システム ログ。これは Container Apps サービスによって出力されます。

システム ログ

Container Apps サービスでは、コンテナー アプリ レベルでのシステム ログ メッセージが提供されます。 システム ログでは、次のメッセージが出力されます。

ソース Type メッセージ
Dapr Info dapr コンポーネント <component-name> がスコープ <dapr-component-scope> で正常に作成されました
Dapr Info dapr コンポーネント <component-name> がスコープ <component-type> で正常に更新されました
Dapr Error dapr コンポーネント <component-name> の作成中にエラーが発生しました
ボリューム マウント Info ボリューム <volume-name> がリビジョン <revision-scope> に対して正常にマウントされました
ボリューム マウント Error ボリューム <volume-name> のマウント中にエラーが発生しました
ドメインのバインド Info ドメイン <domain> をコンテナー アプリ <container app name> に正常にバインドしました
認証 Info アプリで認証が有効になっています。 認証構成を作成しています
認証 Info 認証構成が正常に作成されました
トラフィックの重み Info リビジョン <revision-name\> のトラフィックの重みを <percentage>%に設定しています
リビジョンのプロビジョニング Info 新しいリビジョンを作成しています: <revision-name>
リビジョンのプロビジョニング Info リビジョン <name> が正常にプロビジョニングされました
リビジョンのプロビジョニング Info "ActiveRevisionsMode=Single" 以降の古いリビジョンを非アクティブ化しています
リビジョンのプロビジョニング Error リビジョン <revision-name> のプロビジョニング中にエラーが発生しました。 ErrorCode: <[ErrImagePull]|[Timeout]|[ContainerCrashing]>

システム ログ データには、ContainerAppSystemLogs_CL テーブルを照会することでアクセスできます。 テーブルで最もよく使用される Container Apps 固有の列は以下の列です。

説明
ContainerAppName_s コンテナー アプリ名
EnvironmentName_s Container Apps 環境名
Log_s ログ メッセージ
RevisionName_s リビジョン名

コンソール ログ

コンソール ログは、コンテナー アプリと Dapr サイドカー内のコンテナーから送られる stderr および stdout メッセージから生成されます。 コンソール ログは、ContainerAppConsoleLogs_CL テーブルを照会することで表示できます。

ヒント

適切に定義されたログ メッセージを使用してコードをインストルメント化すると、コードのパフォーマンスを把握し、問題をデバッグするのに役立ちます。 ベスト プラクティスの詳細については、「操作に合わせた設計」を参照してください。

ContainerAppConsoleLogs_CL で最もよく使用される Container Apps 固有の列には、以下の列が含まれます。

説明
ContainerAppName_s コンテナー アプリ名
ContainerGroupName_g レプリカ名
ContainerId_s コンテナー識別子
ContainerImage_s コンテナー イメージ名
EnvironmentName_s Container Apps 環境名
Log_s ログ メッセージ
RevisionName_s リビジョン名

Log Analytics を使用してログのクエリを実行する

Log Analytics は、ログ データの表示と分析に使用できる Azure portal のツールです。 Log Analytics を使用すると、Kusto クエリを作成し、結果の並べ替え、フィルター処理、グラフでの視覚化を行い、傾向を見つけて問題を特定することができます。 クエリ結果を対話的に操作したり、アラート、ダッシュボード、ブックなどの他の機能と一緒に使用したりできます。

Azure Portal

コンテナー アプリ ページのサイドバー メニューの [ログ] から Log Analytics を起動します。 [監視]>[ログ] から Log Analytics を開始することもできます。

ログは、[カスタム ログ] カテゴリの [テーブル] タブに一覧表示されているテーブルを使用して照会できます。このカテゴリのテーブルは、ContainerAppSystemlogs_CL テーブルと ContainerAppConsoleLogs_CL テーブルです。

Screenshot of the Log Analytics custom log tables.

次に示すのは、album-api という名前のコンテナー アプリのコンソール ログ エントリを表示する Kusto クエリです。

ContainerAppConsoleLogs_CL
| where ContainerAppName_s == 'album-api'
| project Time=TimeGenerated, AppName=ContainerAppName_s, Revision=RevisionName_s, Container=ContainerName_s, Message=Log_s
| take 100

次に示すのは、album-api という名前のコンテナー アプリのシステム ログ エントリを表示する Kusto クエリです。

ContainerAppSystemLogs_CL
| where ContainerAppName_s == 'album-api'
| project Time=TimeGenerated, EnvName=EnvironmentName_s, AppName=ContainerAppName_s, Revision=RevisionName_s, Message=Log_s
| take 100

Log Analytics とログ クエリの詳細については、「Log Analytics のチュートリアル」を参照してください。

Azure CLI または PowerShell

Container Apps ログには、Azure CLI を使用してクエリを実行できます。

これらの Azure CLI クエリの例では、コンテナー アプリ名 "album-api" のログ レコードを格納しているテーブルを出力します。 テーブル列は、project 演算子の後のパラメーターによって指定されます。 $WORKSPACE_CUSTOMER_ID 変数には、Log Analytics ワークスペースの GUID が含まれています。

次の例では、ContainerAppConsoleLogs_CL テーブルを照会します。

az monitor log-analytics query --workspace $WORKSPACE_CUSTOMER_ID --analytics-query "ContainerAppConsoleLogs_CL | where ContainerAppName_s == 'album-api' | project Time=TimeGenerated, AppName=ContainerAppName_s, Revision=RevisionName_s, Container=ContainerName_s, Message=Log_s, LogLevel_s | take 5" --out table

次の例では、ContainerAppSystemLogs_CL テーブルを照会します。

az monitor log-analytics query --workspace $WORKSPACE_CUSTOMER_ID --analytics-query "ContainerAppSystemLogs_CL | where ContainerAppName_s == 'album-api' | project Time=TimeGenerated, AppName=ContainerAppName_s, Revision=RevisionName_s, Message=Log_s, LogLevel_s | take 5" --out table

次のステップ