Azure App Service でのアプリの診断ログの有効化

概要

Azure では、組み込みの診断機能により、 App Service アプリのデバッグを容易に行うことができます。 この記事では、診断ログを有効にしてインストルメンテーションをアプリケーションに追加する方法と、Azure によってログに記録された情報にアクセスする方法について説明します。

この記事では、Azure portal と Azure CLI を使用して診断ログを操作します。 Visual Studio で診断ログを使用する方法の詳細については、「 Visual Studio での Azure のトラブルシューティング」を参照してください。

Note

この記事のログ記録の手順に加えて、Azure Monitoring による新しい統合ログ機能があります。 この機能の詳細については、「ログを Azure Monitor に送信する」のセクションを参照してください。

Type プラットフォーム 場所 説明
アプリケーションのログ記録 Windows、Linux App Service ファイル システムおよび Azure Storage BLOB アプリケーションのコードによって生成されたメッセージがログに記録されます。 メッセージは、選択した Web フレームワークによって、またはお使いの言語の標準ログ パターンを使用してアプリケーションのコードから直接、生成できます。 各メッセージには、次のいずれかのカテゴリが割り当てられます: 重大エラー警告情報デバッグトレース。 アプリケーションのログ記録を有効にするときに、重大度レベルを設定することにより、ログ記録の詳細さを指定できます。
Web サーバーのログ記録 Windows App Service ファイル システムまたは Azure Storage BLOB W3C 拡張ログ ファイル形式の生 HTTP 要求データ。 各ログ メッセージには、HTTP メソッド、リソース URI、クライアント IP、クライアント ポート、ユーザー エージェント、応答コードなどのデータが含まれます。
詳細なエラー メッセージ Windows App Service ファイル システム クライアントのブラウザーに送信された .htm エラー ページのコピー。 セキュリティ上の理由から、詳細なエラー ページを運用環境のクライアントに送信することはできませんが、App Service では、HTTP コード 400 以上のアプリケーション エラーが発生するたびにエラー ページを保存できます。 ページには、サーバーによってエラー コードが返される理由を特定するのに役立つ情報が記録されている場合があります。
失敗した要求トレース Windows App Service ファイル システム 要求の処理に使用された IIS コンポーネントのトレースや各コンポーネントにかかった時間など、失敗した要求の詳細なトレース情報。 これは、サイトのパフォーマンスを向上させたり、特定の HTTP エラーを分離したりする場合に役立ちます。 失敗した要求ごとに 1 つのフォルダーが生成され、それには、XML ログ ファイルと、ログ ファイルを表示するための XSL スタイルシートが含まれます。
デプロイ ログ Windows、Linux App Service ファイル システム アプリにコンテンツを発行するときのログ。 デプロイ ログの記録は自動的に行われ、デプロイ ログの構成可能な設定はありません。 デプロイが失敗した理由を判断するのに役立ちます。 たとえば、カスタム デプロイ スクリプトを使用している場合は、デプロイ ログを使用して、スクリプトでエラーが発生する理由を特定できることがあります。

Note

App Service では、アプリケーションのトラブルシューティングに役立つ専用の対話型診断ツールが提供されています。 詳細については、「Azure App Service 診断の概要」を参照してください。

さらに、Azure Monitor などの他の Azure サービスを使用して、アプリのログ記録と監視の機能を向上させることができます。

アプリケーションのログ記録を有効にする (Windows)

Azure portal で Windows アプリのアプリケーション ログ記録を有効にするには、アプリに移動し、 [App Service ログ] を選択します。

[アプリケーション ログ (ファイル システム)][アプリケーション ログ (Blob)] の一方または両方で、 [オン] を選択します。

ファイル システム オプションは、一時的なデバッグ用であり、12 時間で自動的にオフになります。 Blob オプションは、長期的なログ記録用であり、ログを書き込む BLOB ストレージ コンテナーが必要です。 Blob オプションには、ログ メッセージの生成元 VM インスタンスの ID (InstanceId)、スレッド ID (Tid)、さらに細かいタイムスタンプ (EventTickCount) など、ログ メッセージの追加情報も含まれます。

Note

お使いの Azure Storage アカウントがファイアウォール規則によって保護されている場合、「ネットワークに関する考慮事項」を参照してください。

Note

現在、Blob Storage には .NET アプリケーションのログのみ書き込むことができます。 Java、PHP、Node.js、Python のアプリケーション ログは、App Service ファイル システムにのみ保存できます (外部ストレージにログを書き込むためのコードの変更は必要ありません)。

また、ストレージ アカウントのアクセス キーを再生成する場合、更新されたキーを使用するように、該当するログ記録の構成を再設定する必要があります。 これを行うには、次の手順を実行します。

  1. [構成] タブで、該当するログ機能を [オフ] に設定します。 設定を保存します。
  2. ストレージ アカウントの BLOB へのログを再び有効にします。 設定を保存します。

ログに記録する詳細さのレベルを選択します。 次の表に、各レベルに含まれるログのカテゴリを示します。

Level 含まれるカテゴリ
Disabled なし
Error エラー、クリティカル
警告 警告、エラー、クリティカル
情報 情報、警告、エラー、クリティカル
詳細 トレース、デバッグ、情報、警告、エラー、クリティカル (すべてのカテゴリ)

終わったら、 [保存] を選択します。

Note

BLOB にログを書き込む場合、アプリを削除しても BLOB にログを保持していると、アイテム保持ポリシーは適用されなくなります。 詳細については、「リソースの削除後に発生する可能性があるコスト」を参照してください。

アプリケーションのログ記録を有効にする (Linux/コンテナー)

Azure portal で Linux アプリまたはカスタム コンテナーのアプリケーション ログ記録を有効にするには、アプリに移動し、[App Service ログ] を選択します。

[アプリケーション ログ記録][ファイル システム] を選択します。

[クォータ (MB)] で、アプリケーション ログのディスク クォータを指定します。 [リテンション期間 (日)] で、ログを保持する日数を設定します。

終わったら、 [保存] を選択します。

Web サーバーのログ記録を有効にする

Azure portal で Windows アプリの Web サーバー ログ記録を有効にするには、アプリに移動し、 [App Service ログ] を選択します。

[Web サーバーのログ記録] で、Blob Storage にログを格納する場合は [ストレージ] を選択し、App Service ファイル システムにログを格納する場合は [ファイル システム] を選択します。

Note

お使いの Azure Storage アカウントがファイアウォール規則によって保護されている場合、「ネットワークに関する考慮事項」を参照してください。

[リテンション期間 (日)] で、ログを保持する日数を設定します。

Note

ストレージ アカウントのアクセス キーを再生成する場合は、該当するログ構成を更新後のキーを使用するように設定し直す必要があります。 これを行うには、次の手順を実行します。

  1. [構成] タブで、該当するログ機能を [オフ] に設定します。 設定を保存します。
  2. ストレージ アカウントの BLOB へのログを再び有効にします。 設定を保存します。

終わったら、 [保存] を選択します。

Note

BLOB にログを書き込む場合、アプリを削除しても BLOB にログを保持していると、アイテム保持ポリシーは適用されなくなります。 詳細については、「リソースの削除後に発生する可能性があるコスト」を参照してください。

詳細なエラーのログを記録する

Azure portal で Windows アプリのエラー ページまたは失敗した要求のトレースを保存するには、アプリに移動し、 [App Service ログ] を選択します。

[Detailed Error Logging](詳細なエラー ログ記録) または [失敗した要求のトレース] で、 [オン] を選択し、 [保存] を選択します。

どちらの種類のログも、App Service ファイル システムに格納されます。 最大 50 件のエラー (ファイル/フォルダー) が保持されます。 HTML ファイルの数が 50 を超えた場合、古い順にエラー ファイルが自動的に削除されます。

既定では、失敗した要求のトレース機能では、400 から 600 までの HTTP ステータス コードで失敗した要求のログをキャプチャします。 カスタム ルールを指定するには、web.config ファイルの <traceFailedRequests> セクションをオーバーライドします。

コードでログ メッセージを追加する

アプリケーションのコードでは、通常のログ記録機能を使用して、ログ メッセージをアプリケーション ログに送信します。 次に例を示します。

ログのストリーミング

ログをリアルタイムでストリーミングする前に、目的のログの種類を有効にします。 /LogFiles ディレクトリ (d:/home/logfiles) に格納されており、末尾が .txt、.log、.htm のいずれかになっているファイルに書き込まれた情報が、App Service によってストリーミングされます。

Note

一部の種類のログ バッファーはログ ファイルに書き込まれるため、ストリーミング中に無効な順序エラーが発生する可能性があります。 たとえば、ユーザーがページにアクセスしたときに発生するアプリケーション ログ エントリは、ページ要求の該当する HTTP ログ エントリより前のストリームに表示されることがあります。

Azure Portal

Azure portal でログをストリーミングするには、アプリに移動し、 [ログ ストリーム] を選択します。

Cloud Shell の場合

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 クライアント ツール」をご覧ください。

App Service ファイル システムに格納されているログの場合に最も簡単な方法は、次の場所にある ZIP ファイルをブラウザーでダウンロードすることです。

  • Linux/custom コンテナー: https://<app-name>.scm.azurewebsites.net/api/logs/docker/zip
  • Windows アプリ: https://<app-name>.scm.azurewebsites.net/api/dump

Linux/カスタム コンテナーの場合、ZIP ファイルには、Docker ホストと Docker コンテナー両方のコンソール出力ログが含まれます。 スケールアウトされたアプリの場合、ZIP ファイルには、各インスタンスの 1 セットのログが含まれます。 App Service ファイル システムでは、これらのログ ファイルは /home/LogFiles ディレクトリの内容です。

Windows アプリの場合、ZIP ファイルには、App Service ファイル システムの D:\Home\LogFiles ディレクトリの内容が含まれています。 その構造を次に示します。

ログのタイプ ディレクトリ 説明
アプリケーション ログ /LogFiles/Application/ 1 つ以上のテキスト ファイルが含まれます。 ログ メッセージの形式は、使用するログ プロバイダーによって異なります。
失敗した要求のトレース /LogFiles/W3SVC#########/ XML ファイルと XSL ファイルが含まれます。 書式設定された XML ファイルをブラウザーで表示できます。
詳細なエラー ログ /LogFiles/DetailedErrors/ HTM エラー ファイルが含まれます。 ブラウザーで HTM ファイルを表示できます。
失敗した要求のトレースを表示するもう 1 つの方法は、ポータルでアプリのページに移動します。 左側のメニューから、 [問題の診断と解決] を選択し、 [Failed Request Tracing Logs](失敗した要求トレースのログ) を検索し、アイコンをクリックして目的のトレースを参照して表示します。
Web サーバー ログ /LogFiles/http/RawLogs/ W3C 拡張ログ ファイル形式を使用して書式設定されたテキスト ファイルが含まれます。 この情報は、テキスト エディターまたは Log Parser などのユーティリティを使用して読むことができます。
App Service では、s-ips-computername、または cs-version フィールドはサポートされていません。
デプロイ ログ /LogFiles/Git/ および /deployments/ 内部デプロイ プロセスによって生成されたログだけでなく、Git デプロイのログも含まれます。

ログを Azure Monitor に送信する

新しい Azure Monitor の統合を使用すると、ストレージ アカウント、Event Hubs、および Log Analytics にログを送信するために診断設定を作成できます。

Diagnostic Settings

サポートされるログの種類

次の表は、サポートされるログの種類と説明を示しています。

ログのタイプ Windows Windows コンテナー Linux Linux コンテナー 説明
AppServiceConsoleLogs Java SE & Tomcat はい はい はい 標準出力と標準エラー
AppServiceHTTPLogs はい はい はい はい Web サーバー ログ
AppServiceEnvironmentPlatformLogs はい 該当なし はい はい App Service Environment: スケーリング、構成変更、および状態ログ
AppServiceAuditLogs はい はい はい はい FTP および Kudu 経由のログイン アクティビティ
AppServiceFileAuditLogs はい はい TBA TBA サイト コンテンツに行われたファイルの変更。Premium レベル以上でのみ使用可能
AppServiceAppLogs ASP.NET & Tomcat 1 ASP.NET & Tomcat 1 Java SE & Tomcat Blessed イメージ 2 Java SE & Tomcat Blessed イメージ 2 アプリケーション ログ
AppServiceIPSecAuditLogs はい はい はい はい IP ルールからの要求
AppServicePlatformLogs TBA はい はい はい コンテナーの操作ログ
AppServiceAntivirusScanAuditLogs 3 はい はい はい Yes Microsoft Defender for Cloud を使用するウイルス対策のスキャン ログPremium レベルでのみ使用可能

1 Tomcat アプリの場合は、アプリ設定に TOMCAT_USE_STARTUP_BAT を追加し、それを false または 0 に設定します。 "最新の" Tomcat バージョンであり、かつ java.util.logging を使用する必要があります。

2 Java SE アプリの場合は、アプリ設定に WEBSITE_AZMON_PREVIEW_ENABLED を追加し、それを true または 1 に設定します。

3 ログの種類の AppServiceAntivirusScanAuditLogs は、現在プレビューの段階です

ネットワークに関する考慮事項

選択したネットワークのみを許可して Azure Storage アカウントを保護する場合、次の両方に当てはまる場合にのみ、App Service からログを受信できます。

次のステップ