次の方法で共有


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

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

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

Azure Container Apps には、監視とトラブルシューティングに役立つ 2 種類のログが用意されています。

  • コンソール ログ: アプリケーションによってこれらのログが生成されます。
  • システム ログ: Container Apps サービスによってこれらのログが生成されます。

システム ログ

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

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

システム ログ データには、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 テーブルです。

Log Analytics のカスタム ログ テーブルのスクリーンショット。

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

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

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

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

次のステップ