Azure には、Azure App Service アプリのデバッグに役立つ組み込みの診断機能が用意されています。 この記事では、診断ログを有効にし、アプリケーションにインストルメンテーションを追加する方法について説明します。 また、Azure がログに記録する情報にアクセスする方法についても説明します。
この記事では、 Azure portal と Azure CLI を使用して診断ログを操作します。 Visual Studio を使用した診断ログの操作については、「Visual Studio を使用 した Azure App Service でのアプリのトラブルシューティング」を参照してください。
この記事のログ記録手順に加えて、Azure Monitor 統合ログ機能を使用できます。 詳細については、「 Azure Monitor へのログの送信」を参照してください。
注
App Service には、アプリケーションのトラブルシューティングに役立つ専用の対話型診断ツールが用意されています。 詳細については、「Azure App Service 診断の概要」を参照してください。
また、他の Azure サービスを使用して、Azure Monitor などのアプリのログ記録と監視機能を向上させることもできます。
ログの種類の概要
タイプ | プラットフォーム | ログの保存場所 | 説明 |
---|---|---|---|
アプリケーションのログ記録 | Windows、Linux | App Service ファイル システムおよび Azure Storage BLOB | アプリケーション コードによって生成されるメッセージをログに記録します。 メッセージは、選択した Web フレームワークによって生成することも、言語の標準ログ 記録パターンを使用してアプリケーション コードから直接生成することもできます。 各メッセージには、 重大、 エラー、 警告、 情報、 デバッグ、 トレースのいずれかのカテゴリが割り当てられます。 アプリケーションのログ記録を有効にするときに、重大度レベルを設定することにより、ログ記録の詳細さを指定できます。 |
Web サーバーのログ記録 | ウィンドウズ | App Service ファイル システムまたは Azure Storage BLOB | W3C 拡張ログ ファイル形式の生 HTTP 要求データ。 各ログ メッセージには、HTTP メソッド、リソース URI、クライアント IP、クライアント ポート、ユーザー エージェント、応答コードなどのデータが含まれます。 |
詳細なエラー メッセージ | ウィンドウズ | App Service ファイル システム | クライアント ブラウザーに送信された .htm エラー ページのコピー。 セキュリティ上の理由から、詳細なエラー ページを運用環境のクライアントに送信しないでください。 ただし、App Service では、HTTP コード 400 以上のアプリケーション エラーが発生するたびにエラー ページを保存できます。 このページには、サーバーがエラー コードを返す理由を判断するのに役立つ情報が含まれている場合があります。 |
失敗した要求トレース | ウィンドウズ | App Service ファイル システム | 要求の処理に使用された IIS コンポーネントのトレースや各コンポーネントにかかった時間など、失敗した要求の詳細なトレース情報。 この情報は、サイトのパフォーマンスを向上させたい場合や、特定の HTTP エラーを分離する場合に役立ちます。 失敗した要求ごとに 1 つのフォルダーが生成されます。 このフォルダーには、XML ログ ファイルと、ログ ファイルを表示するための XSL スタイルシートが含まれています。 |
デプロイ ログ | Windows、Linux | App Service ファイル システム | アプリにコンテンツを発行するときのログ。 展開ログは自動的に行われ、展開ログの構成可能な設定はありません。 デプロイが失敗した理由を判断するのに役立ちます。 たとえば、カスタム デプロイ スクリプトを使用している場合は、デプロイ ログを使用して、スクリプトでエラーが発生する理由を特定できることがあります。 |
ログが App Service ファイル システムに格納されると、価格レベルで使用可能なストレージの対象になります。 詳細については、「 App Service の制限」を参照してください。
アプリケーションのログ記録を有効にする (Windows)
Azure portal で Windows アプリのアプリケーション ログを有効にするには:
アプリに移動し、 監視>App Service ログを選択します。
次のいずれかのオプションまたは両方のオプション で [オン] を 選択します。
アプリケーション ログ (ファイルシステム): このオプションは、一時的なデバッグを目的とします。 12 時間でオフになります。
アプリケーション ログ (BLOB): このオプションは、長期的なログ記録用です。 ログを書き込むための BLOB ストレージ コンテナーが必要です。
BLOB オプションには、ログ メッセージの配信元仮想マシン インスタンスの ID (
InstanceId
)、スレッド ID (Tid
)、より詳細なタイム スタンプ (EventTickCount
) など、ログ メッセージに追加情報が含まれます。
[ レベル] で、ログに記録する詳細のレベルを選択します。 次の表に、各レベルに含まれるログのカテゴリを示します。
レベル 含まれるカテゴリ 無効 なし エラー エラー、 重大 警告 警告、 エラー、 重大 情報 情報、 警告、 エラー、 重大 詳細 トレース、 デバッグ、 情報、 警告、 エラー、 重大 (すべてのカテゴリ) 保存 を選択します。
BLOB にログを書き込む場合、アプリを削除しても BLOB にログを保持していると、アイテム保持ポリシーは適用されなくなります。 詳細については、「リソースの削除後に発生する可能性があるコスト」を参照してください。
現時点では、.NET アプリケーション ログのみを BLOB ストレージに書き込むことができます。 Java、PHP、Node.js、Python のアプリケーション ログは、外部ストレージにログを書き込むためのコードを変更することなく、App Service ファイル システムにのみ格納できます。
ストレージ アカウントのアクセス キーを再生成する場合は、更新されたアクセス キーを使用するように、それぞれのログ構成をリセットする必要があります。
[ 構成 ] タブで、それぞれのログ機能を [オフ] に設定します。 設定を保存します。
ストレージ アカウントの BLOB へのログ記録をもう一度有効にします。 設定を保存します。
アプリケーション ログを有効にする (Linux またはコンテナー)
Azure portal で Linux アプリまたはカスタム コンテナーのアプリケーション ログを有効にするには:
アプリに移動し、 監視>App Service ログを選択します。
[アプリケーション ログ記録] で [ファイル システム] を選択します。
[クォータ (MB)] で、アプリケーション ログのディスク クォータを指定します。
[ 保持期間 (日数)] で、ログを保持する日数を設定します。
保存 を選択します。
Web サーバーのログ記録を有効にする
Azure portal で Windows アプリの Web サーバー ログを有効にするには:
アプリに移動し、 監視>App Service ログを選択します。
Web サーバーのログ記録の場合は、[ストレージ] を選択して BLOB ストレージにログを格納するか、[ファイル システム] を選択して App Service ファイル システムにログを格納します。
[ 保持期間 (日数)] で、ログを保持する日数を設定します。
保存 を選択します。
BLOB にログを書き込む場合、アプリを削除しても BLOB にログを保持していると、アイテム保持ポリシーは適用されなくなります。 詳細については、「リソースの削除後に発生する可能性があるコスト」を参照してください。
ストレージ アカウントのアクセス キーを再生成する場合は、更新されたキーを使用するように、それぞれのログ構成をリセットする必要があります。
[ 構成 ] タブで、それぞれのログ機能を [オフ] に設定します。 設定を保存します。
ストレージ アカウントの BLOB へのログ記録をもう一度有効にします。 設定を保存します。
詳細なエラーのログを記録する
Azure portal で Windows アプリのエラー ページまたは失敗した要求トレースを保存するには:
アプリに移動し、 監視>App Service ログを選択します。
[ 詳細なエラー メッセージ ] または [失敗した要求トレース] で、[オン] を選択します。
保存 を選択します。
どちらの種類のログも、App Service ファイル システムに格納されます。 最大 50 個のエラー (ファイルまたはフォルダー) が保持されます。 HTML ファイルの数が 50 を超えると、App Service は最も古いエラー ファイルを削除します。
既定では、失敗した要求トレースは、400 から 600 までの HTTP 状態コードで失敗した要求のログをキャプチャします。 カスタム規則を指定するには、<traceFailedRequests>
ファイルの Web.config
セクションをオーバーライドします。
コードでログ メッセージを追加する
アプリケーション コードでは、通常のログ機能を使用して、ログ メッセージをアプリケーション ログに送信できます。 次に例を示します。
アプリケーション ASP.NET System.Diagnostics.Trace クラスを使用して、アプリケーション診断ログに情報を記録できます。 次に例を示します。
System.Diagnostics.Trace.TraceError("If you're seeing this, something bad happened");
ASP.NET Core では、既定で、Microsoft.Extensions.Logging.AzureAppServices ログ プロバイダーが使用されます。 詳しくは、Azure 内での ASP.NET Core のログ記録に関するページをご覧ください。 WebJobs SDK のログの詳細については、Azure WebJobs SDK の概要に関するページを参照してください。
Python アプリケーションでは、OpenTelemetry を使用して、アプリケーション診断ログにログを送信できます。 詳細については、「 Azure Monitor OpenTelemetry を有効にする」を参照してください。
ログのストリーミング
ログをリアルタイムでストリーミングする前に、目的のログの種類を有効にします。 App Service は、コンソール出力に書き込まれた情報、または /home/LogFiles
ディレクトリ (D:\home\LogFiles
) に格納されている .txt、.log、または .htm で終わるファイルをストリーミングします。
注
ログ バッファーの一部の種類はログ ファイルに書き込みます。これにより、イベントがストリーム内の正しくない順序で表示される可能性があります。 たとえば、ユーザーがページにアクセスしたときに発生するアプリケーション ログ エントリは、ページ要求の対応する HTTP ログ エントリの前にストリームに表示される場合があります。
Azure Portal
Azure portal でログをストリーミングするには、アプリに移動し、[監視>ログ ストリーム] を選択します。
Cloud Shell
Azure Cloud Shell でログをライブストリーミングするには、次のコマンドを使用します。
重要
このコマンドは、Linux ベースの App Service プランでホストされている Web アプリでは機能しない可能性があります。
az webapp log tail --name appname --resource-group myResourceGroup
HTTP などの特定のログの種類をフィルター処理するには、 --provider
パラメーターを使用します。 次に例を示します。
az webapp log tail --name appname --resource-group myResourceGroup --provider http
ローカル ターミナル
ローカル コンソールでログをストリーミングするには、 Azure CLI をインストール して アカウントにサインインします。 ログインした後、Cloud Shell の場合の手順に従います。
アクセス ログ ファイル
ログの種類に Azure Storage BLOB オプションを構成する場合は、Azure Storage で使用できるクライアント ツールが必要です。 詳細については、 Azure Storage を操作するための Microsoft クライアント ツールに関するページを参照してください。
App Service ファイル システムに格納されているログについては、Kudu エンジンを使用してログにアクセスします。
- Azure portal でアプリを開き、[ 開発ツール>Advanced Tools] を選択し、[ Go] を選択します。
- Kudu で、ツール>診断ダンプを選択します。
Linux またはカスタム コンテナーの場合、ZIP ファイルには Docker ホストと Docker コンテナーの両方のコンソール出力ログが含まれます。 スケールアウトされたアプリの場合、ZIP ファイルには、各インスタンスの 1 セットのログが含まれます。 App Service ファイル システムでは、これらのログ ファイルは /home/LogFiles
ディレクトリの内容です。 デプロイ ログは、 /site/deployments/
に格納されます。
Windows アプリの場合、ZIP ファイルには App Service ファイル システムの D:\Home\LogFiles
ディレクトリの内容が含まれます。 その構造を次に示します。
ログのタイプ | ディレクトリ | 説明 |
---|---|---|
アプリケーション ログ | /LogFiles/Application/ |
1 つ以上のテキスト ファイルが含まれます。 ログ メッセージの形式は、使用するログ プロバイダーによって異なります。 |
失敗した要求のトレース | /LogFiles/W3SVC#########/ |
XML ファイルと XSL ファイルが含まれます。 書式設定された XML ファイルをブラウザーで表示できます。 |
詳細なエラー ログ | /LogFiles/DetailedErrors/ |
HTM エラー ファイルが含まれます。 ブラウザーで HTM ファイルを表示できます。 失敗した要求トレースを表示するもう 1 つの方法は、ポータルでアプリ ページに移動することです。 左側のメニューで、[ 問題の診断と解決] を選択します。 失敗した要求トレース ログを検索し、アイコンを選択して目的のトレースを参照して表示します。 |
Web サーバー ログ | /LogFiles/http/RawLogs/ |
W3C 拡張ログ ファイル形式を使用して書式設定されたテキスト ファイルが含まれています。 これらのファイルは、テキスト エディターまたは Log Parser などのツールを使用して読み取ることができます。 App Service では、 s-computername 、 s-ip 、および cs-version フィールドはサポートされていません。 |
デプロイ ログ |
/LogFiles/Git/ と /deployments/ |
Git デプロイのログと共に、内部デプロイ プロセスによって生成されたログが含まれます。 |
ログを Azure Monitor に送信する
Azure Monitor 統合を使用すると、診断設定を作成して、ストレージ アカウント、イベント ハブ、Log Analytics ワークスペースにログを送信できます。 診断設定を追加すると、App Service がアプリ設定をアプリに追加し、それによってアプリの再起動がトリガーされます。
サポートされるログの種類
サポートされているログの種類とその説明の一覧については、「Microsoft.Web でサポートされているリソース ログ」を参照してください。
ネットワークに関する考慮事項
診断設定の制限については、「 宛先の制限」を参照してください。