App Service アプリケーション ログを有効化して構成する
このユニットでは、Web アプリでアプリ ログがどのように役立つかを確認し、アプリ ログを有効にする方法を示します。
アプリ ログとは
Azure には、アプリ ログを使用する組み込みの診断機能が用意されています。 アプリ ログは、アプリ コードでのランタイム トレース ステートメントの出力です。 たとえば、トレースを追加していつ特定の関数が処理されているかが分かるようにして、コード内のロジックを確認したい場合があります。 または、特定のレベルのエラーが発生したときにのみ、ログに記録されたメッセージを表示したい場合があります。 アプリ ログの対象は、主に、運用前アプリおよび厄介な問題です。これは、過剰なログは、パフォーマンスに影響を与え、ストレージが速く消費される場合があるためです。 このため、ファイル システムへのログ記録は 12 時間後に自動的に無効になります。
アプリ ログはスケールに制限があります。その主な理由は、ログ出力の保存に "ファイル" が使用されることにあります。 アプリの複数のインスタンスが存在し、同じストレージがすべてのインスタンス間で共有される場合は、さまざまなインスタンスのメッセージがインタリーブされ、トラブルシューティングが困難になる可能性があります。 各インスタンスに独自のログ ファイルがある場合は、複数のログが生成されるので、やはりインスタンス固有の問題のトラブルシューティングが困難になります。
Azure App Service で使用できるログの種類は、アプリのコード フレームワークと、アプリが Windows または Linux のどちらのアプリ ホストで実行されているかによって異なります。
ASP.NET
ASP.NET アプリは、Windows アプリ サービスでのみ実行されます。 アプリ診断ログに情報を記録するには、System.Diagnostics.Trace
クラスを使用します。 使用できるトレース レベルは 4 つあり、それぞれ、Azure portal に表示される error
、warning
、information
、および verbose
ログ レベルに関連付けられます。
- Trace.TraceError("Message"); // Writes an error message
- Trace.TraceWarning("Message"); // Writes a warning message
- Trace.TraceInformation("Message"); // Writes an information message
- Trace.WriteLine("Message"); // Writes a verbose message
ASP.NET Core アプリ
ASP.NET Core アプリは、Windows または Linux のいずれかで実行できます。 Azure アプリ ログに情報を記録するには、ロガー ファクトリ クラスを使用し、次の 6 つのログ レベルのいずれかを使用します。
- logger.LogCritical("Message"); // Writes a critical message at log level 5
- logger.LogError("Message"); // Writes an error message at log level 4
- logger.LogWarning("Message"); // Writes a warning message at log level 3
- logger.LogInformation("Message"); // Writes an information message at log level 2
- logger.LogDebug("Message"); // Writes a debug message at log level 1
- logger.LogTrace("Message"); // Writes a detailed trace message at log level 0
Windows 上の ASP.NET Core アプリの場合、これらのメッセージは、次のように Azure portal でフィルターに関連付けられます。
- レベル 4 と 5 は "エラー" メッセージ。
- レベル 3 は "警告" メッセージ。
- レベル 2 は "情報" メッセージ。
- レベル 0 と 1 は "詳細" メッセージ。
Linux 上の ASP.NET Core アプリの場合、"エラー" メッセージ (レベル 4 と 5) のみが記録されます。
Node.js アプリ
Windows または Linux 上の Node.js アプリなど、スクリプト ベースの Web アプリの場合、アプリ ログは次の console() メソッドを使用して有効化されます。
- console.error("Message"); // Writes a message to STDERR.
- console.log("Message"); // Writes a message to STDOUT.
両方の種類のメッセージともに、Azure App Service のエラー レベル ログに書き込まれます。
Windows ホストと Linux ホストでのログの相違点
ログ ファイルにメッセージをルーティングするために、Azure Web アプリではインターネット インフォメーション サービス (IIS) Web サーバーを使用します。 Windows ベースの Web アプリは確立された Azure サービスであり、ASP.NET アプリのメッセージングは、基になる IIS サービスと緊密に統合されているため、Windows アプリは高度なログ インフラストラクチャからメリットを得ることができます。 その他のアプリでは、Windows アプリ サービスで実行されている場合でも、ログ オプションが開発プラットフォームによって制限されます。
アプリのコンテナーに使用される Docker イメージによって、Linux ベースのスクリプト 化されたアプリ (Node など) で使用できるログ機能が決定されます。 STDERR または STDOUT へのリダイレクトを使用するなどの基本的なログでは、Docker ログが使用されます。 より高度なログ機能は、PHP、Perl、Ruby などを実行しているかどうかや、基になるイメージなどに依存します。 Windows アプリ用の IIS によって提供されるのと同等の Web アプリケーション ログをダウンロードするには、SSH を使用してコンテナーに接続しなければならない場合があります。
次の表は、アプリの一般的な環境とホストに対するログのサポートをまとめたものです。
アプリ環境 | ホスト | ログ レベル | 保存場所 |
---|---|---|---|
ASP.NET | Windows | エラー、警告、情報、詳細 | ファイル システム、Blob ストレージ |
ASP.NET Core | Windows | エラー、警告、情報、詳細 | ファイル システム、Blob ストレージ |
ASP.NET Core | Linux | エラー | ファイル システム |
Node.js | Windows | エラー (STDERR)、情報 (STDOUT)、警告、詳細 | ファイル システム、Blob ストレージ |
Node.js | Linux | エラー | ファイル システム |
Java | Linux | エラー | ファイル システム |
アプリ診断の代替手段
Azure Application Insights は、詳細な使用状況データやパフォーマンス データなど、追加のパフォーマンス モニター機能を提供するサイト拡張機能です。 Application Insights は運用アプリのデプロイ用に設計されており、役立つ可能性のある開発ツールです。 さまざまなアプリの開発環境で動作し、アプリが ASP.NET と Node のどちらである場合でも、同じセットの豊富なテレメトリおよびパフォーマンス データを提供します。 ただし、Application Insights を使用するには、App Insights SDK を使用してアプリ内に特定のコードを含める必要があります。 Application Insights は課金対象のサービスでもあります。 そのため、アプリのデプロイと収集データのスケールによっては、通常のコストを計画する必要がある場合があります。
また、アプリのメトリックを表示させることもできます。これは、アプリ動作のプロファイリングに役立ちます。 これらのカウンターは、運用と開発に役立ちます。 CPU、メモリ、ネットワーク、ファイル システムの使用状況を表示し、カウンターが特定のしきい値に達したときにアラートを設定することができます。 メトリックの課金は、アプリ サービス プラン階層で行われます。
Azure portal を使用してログを有効化する
ポータルで、アプリ ログは、Web アプリの [診断ログ] ペインで管理されます。
Web アプリのファイル システムへのアプリ ログを有効にするには、[アプリケーション ログ (ファイル システム)] を [オン] に設定し、[レベル] を [エラー]、[警告]、[情報]、または [詳細] に設定します。 ファイル システムへのログは、12 時間後に自動的にリセットされオフになります。
Blob Storage コンテナーへのアプリ ログを有効にするには、[アプリケーション ログ (Blob)] を [オン] に設定してから、ストレージ アカウントとコンテナーを選択します。 ストレージ アカウントと Web アプリは、同じ Azure リージョンに作成する必要があります。 その後、[レベル] を [エラー]、[警告]、[情報]、または [詳細] に設定します。
Note
Linux アプリ ログでは、Blob Storage への保存は利用できません。
Blob ストレージにログを記録する際には、[リテンション期間] も設定する必要があります。 ファイル システム ログとは異なり、BLOB ログは既定では削除されることはありません。 保持期間オプションでは、指定した日数よりも古いログはすべて削除されます。
ログを構成したら、[保存] を選択します。
Azure CLI を使用してログを有効化する
ファイル システムへのアプリ ログを有効にするには、次のコマンドを実行します。
az webapp log config --application-logging filesystem --level verbose --name <app-name> --resource-group <resource-group-name>
たとえば、contosofashions123 という名前のアプリについてファイル システムへのログを有効化するには、次のコマンドを実行してすべてのメッセージをキャプチャします。
az webapp log config --application-logging filesystem --level verbose --name contosofashions123 --resource-group contosofashionsRG
現在、Azure CLI コマンドを使用してアプリケーション ログを無効にする方法はありません。 ただし、次のコマンドは、ファイル システムのログ記録をエラー レベルのみにリセットします。
az webapp log config --application-logging off --name <app-name> --resource-group <resource-group-name>
アプリの現在のログ状態を表示するには、次のコマンドを使用します。
az webapp log show --name <app-name> --resource-group <resource-group-name>