App Service アプリケーション ログを有効化して構成する

完了

このユニットでは、Web アプリでアプリ ログがどのように役立つかを確認し、アプリ ログを有効にする方法を示します。

アプリ ログとは

Azure には、アプリ ログを使用する組み込みの診断機能が用意されています。 アプリ ログは、アプリ コードでのランタイム トレース ステートメントの出力です。 たとえば、トレースを追加していつ特定の関数が処理されているかが分かるようにして、コード内のロジックを確認したい場合があります。 または、特定のレベルのエラーが発生したときにのみ、ログに記録されたメッセージを表示したい場合があります。 アプリ ログの対象は、主に、運用前アプリおよび厄介な問題です。これは、過剰なログは、パフォーマンスに影響を与え、ストレージが速く消費される場合があるためです。 このため、ファイル システムへのログ記録は 12 時間後に自動的に無効になります。

アプリ ログはスケールに制限があります。その主な理由は、ログ出力の保存に "ファイル" が使用されることにあります。 アプリの複数のインスタンスが存在し、同じストレージがすべてのインスタンス間で共有される場合は、さまざまなインスタンスのメッセージがインタリーブされ、トラブルシューティングが困難になる可能性があります。 各インスタンスに独自のログ ファイルがある場合は、複数のログが生成されるので、やはりインスタンス固有の問題のトラブルシューティングが困難になります。

Azure App Service で使用できるログの種類は、アプリのコード フレームワークと、アプリが Windows または Linux のどちらのアプリ ホストで実行されているかによって異なります。

ASP.NET

ASP.NET アプリは、Windows アプリ サービスでのみ実行されます。 アプリ診断ログに情報を記録するには、System.Diagnostics.Trace クラスを使用します。 使用できるトレース レベルは 4 つあり、それぞれ、Azure portal に表示される errorwarninginformation、および 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 アプリの [診断ログ] ペインで管理されます。

Azure portal の [診断ログ] ペインのスクリーンショット。

Web アプリのファイル システムへのアプリ ログを有効にするには、[アプリケーション ログ (ファイル システム)][オン] に設定し、[レベル] を [エラー]、[警告]、[情報]、または [詳細] に設定します。 ファイル システムへのログは、12 時間後に自動的にリセットされオフになります。

Blob Storage コンテナーへのアプリ ログを有効にするには、[アプリケーション ログ (Blob)][オン] に設定してから、ストレージ アカウントとコンテナーを選択します。 ストレージ アカウントと Web アプリは、同じ Azure リージョンに作成する必要があります。 その後、[レベル] を [エラー]、[警告]、[情報]、または [詳細] に設定します。

Note

Linux アプリ ログでは、Blob Storage への保存は利用できません。

Blob ストレージにログを記録する際には、[リテンション期間] も設定する必要があります。 ファイル システム ログとは異なり、BLOB ログは既定では削除されることはありません。 保持期間オプションでは、指定した日数よりも古いログはすべて削除されます。

Azure portal でのアプリケーション ログの構成を示すスクリーンショット。[保存] が強調表示されています。

ログを構成したら、[保存] を選択します。

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>

自分の知識をチェックする

1.

どのような種類の Web アプリにより、Azure Blob Storage にログを保存できますか?

2.

ファイル システム ログが 12 時間後に自動的に無効になるのはなぜですか?