Azure Cloud Services (延長サポート)と仮想マシンに対する診断を設定する
Note
この記事は、Azure Azure Cloud Services (延長サポート) に適用されます。 Cloud Services (クラシック) は、2024 年 8 月 31 日に廃止されます。 詳細については、「Cloud Services (クラシック) のデプロイ モデルが 2024 年 8 月 31 日に廃止される」を参照してください。 新しい開発では、Azure App Service、Azure Functions、Azure Container Apps など、特定の目的に合わせて設計された新しいサービスの種類を使用することをお勧めします。 利用可能なサービスの最新の一覧については、「Azure 製品のディレクトリ」を参照してください。
Azure Cloud Services (延長サポート) サービスまたは Azure 仮想マシンのトラブルシューティングを行うときは、Visual Studio を使用して Azure Diagnostics を簡単に構成できます。 診断は、クラウド サービスを実行する仮想マシンと仮想マシン インスタンスのシステム データとログ データを取り込みます。 診断データは、選択したストレージ アカウントに転送されます。 Azure での診断ログの詳細については、「Azure App Service の Web アプリの診断ログの有効化」を参照してください。
この記事では、Visual Studio を使用して、Azure Diagnostics を有効にして設定する方法を示します。 Azure Virtual Machines で診断を設定する方法、収集する診断情報の種類を選択する方法、および収集された情報を表示する方法についても取り上げます。
Azure Diagnostics を設定するには、次のオプションのいずれかを使用できます。
Visual Studio の [診断構成] ダイアログ ボックスで、診断設定を変更します。 設定は、diagnostics.wadcfgx という名前のファイルに保存されます。 構成ファイルを直接変更することもできます。 ファイルを直接更新した場合、構成の変更内容は、次回 Azure にクラウド サービスをデプロイしたとき、またはエミュレーターでサービスを実行したときに有効になります。
Visual Studio 2019 以前の Cloud Explorer またはサーバー エクスプローラーを使用して、実行中のクラウド サービスまたは仮想マシンの診断設定を変更します。
Azure Diagnostics を設定するには、Visual Studio の [診断構成] ダイアログ ボックスで、診断設定を変更します。 設定は、diagnostics.wadcfgx という名前のファイルに保存されます。 構成ファイルを直接変更することもできます。 ファイルを直接更新した場合、構成の変更内容は、次回 Azure にクラウド サービスをデプロイしたとき、またはエミュレーターでサービスを実行したときに有効になります。
警告
Visual Studio 2022 では、クラウド サービス プロジェクトのデバッグ時に非推奨の Azure Storage Emulator が Azurite エミュレーターに置き換えられました。 この Azurite エミュレーターは、Azure Diagnostics プラグインでは動作しません。これは、ローカルで実行およびテストするときに Azure Diagnostics をサポートするものです。 ローカルの実行とテストのシナリオにプラグインが必要な場合は、ローカル サービス構成 (.cscfg
) の接続文字列を Azure Storage アカウントに更新するか (「ストレージ アカウントの接続文字列の管理」を参照)、または以前の Azure Storage エミュレーターをダウンロードしてください。
Visual Studio 17.10 リリースでは、ローカルの Azure Diagnostics プラグインは非推奨となり、そのリリースで有効にするオプションはありますが、既定では無効になります。 Visual Studio 17.11 でプラグインが削除されました。 このプラグインは、ローカルの Azure コンピューティング エミュレーターでのみ使用され、無効にしても、Azure の Azure Diagnostics 拡張機能を使用するデプロイ済みの Cloud Services には影響しません。 Visual Studio 17.10 で 診断プラグインを有効にするには、プロジェクト ファイル内の任意の PropertyGroup
に次のプロパティ設定を追加します: <EnableEmulatorDiagnosticsPlugin>True</EnableEmulatorDiagnosticsPlugin>
。
使用する診断ストレージ アカウントを Visual Studio がどのように決定するか
- 診断接続文字列が .cscfg ファイルに指定されている場合、Visual Studio は、発行時と、パッケージ化中のパブリック構成 XML ファイルの生成時に、
.cscfg
ファイルに指定されている診断接続文字列を使用して診断拡張機能を設定します。 - 診断接続文字列が
.cscfg
ファイルに指定されていない場合、Visual Studio は、発行時と、パッケージ化中のパブリック構成 XML ファイルの生成時に、.wadcfgx
ファイルに指定されているストレージ アカウントを使用して診断拡張機能を設定します。 .cscfg
ファイルの診断接続文字列は、.wadcfgx
ファイルのストレージ アカウントよりも優先されます。 診断接続文字列が.cscfg
ファイルに指定されている場合、Visual Studio はその接続文字列を使用し、.wadcfgx
のストレージ アカウントを無視します。
[...開発ストレージの接続文字列を...更新する] チェックボックスの機能
[Microsoft Azure への公開時に診断とキャッシュのための開発ストレージの接続文字列を Microsoft Azure Storage アカウントの資格情報で更新する] チェックボックスは、開発ストレージ アカウントの接続文字列を、発行時に指定した Azure Storage アカウントに更新する便利な方法です。 この診断接続文字列は、プロジェクトを Azure に発行するとき、公開ウィザードで指定されたストレージ アカウントに自動的に更新されます。 ただし、実際のストレージ アカウントが診断接続文字列として指定されている場合は、そのアカウントが使用されます。
Azure Virtual Machines の診断を有効にする
Azure Virtual Machines の診断データを Visual Studio で収集できます。
Azure Virtual Machines の診断を有効にするには
サーバー エクスプローラーで [Azure] ノードを選択し、まだ接続していない場合は Azure サブスクリプションに接続します。
[Virtual Machines] ノードを展開します。 新しい仮想マシンを作成するか、既存のノードを選択できます。
目的の仮想マシンのショートカット メニューで [構成] を選択します。 [仮想マシンの構成] ダイアログ ボックスが表示されます。
ログ分析エージェント診断拡張機能がまだインストールされていない場合は追加します。 この拡張機能で、Azure 仮想マシンに関する診断データを収集することができます。 [インストールされている拡張機能] の下の [使用可能な拡張機能を選択してください] ドロップダウン リスト ボックスで、[Microsoft Monitoring Agent 診断] を選択します。
注意
他の診断拡張機能も仮想マシンで使用できます。 詳細については、「Windows 用の仮想マシン拡張機能とその機能」を参照してください。
拡張機能を追加してその [診断構成] ダイアログ ボックスを表示するには、[追加] を選択します。
ストレージ アカウントを指定するには、[構成] を選択し、[OK] を選択します。
[全般] と [ログ ディレクトリ] を除く各タブは、収集できる診断データのソースを表します。
既定の [全般] タブでは、診断データの収集オプションとして、[エラーのみ]、[すべての情報]、[カスタム プラン] を指定できます。 既定のオプションの [エラーのみ]では、警告またはトレース メッセージが転送されないため、必要とするストレージ容量が最小限で済みます。 [すべての情報] オプションは転送する情報量が最も多いため、ストレージ コストが最も高いオプションです。
この例では、収集するデータをカスタマイズできるよう、 [カスタム プラン] オプションを選択します。
[ディスク クォータ (MB)] ボックスでは、ストレージ アカウントで診断データ用に割り当てる容量を指定します。 既定の値は必要に応じて変更可能です。
収集する診断データに対応する各タブで、[<ログの種類> の転送を有効にする] チェックボックスをオンにします。
たとえば、アプリケーション ログを収集する場合は、[アプリケーション ログ] タブで [アプリケーション ログの転送を有効にする] チェックボックスをオンにします。それ以外にも、診断データの種類ごとに必要な情報があれば指定します。 各タブの構成情報については、この記事の後半にある「診断データのソースを構成する」セクションを参照してください。
目的の診断データの収集をすべて有効にしたら、[OK] を選択します。
更新したプロジェクトを保存します。
[Microsoft Azure のアクティビティ ログ] ウィンドウのメッセージに、仮想マシンが更新されたことが示されます。
診断データのソースを構成する
診断データの収集を有効にしたら、収集対象のデータ ソースと収集する情報を厳密に選択できます。 以降のセクションでは、[診断構成] ダイアログ ボックスの各タブと各構成オプションの意味について説明します。
アプリケーション ログ
アプリケーション ログには Web アプリケーションによって生成された診断情報が記録されます。 アプリケーション ログを取り込むには、 [アプリケーション ログの転送を有効にする] チェックボックスをオンにします。 ストレージ アカウントへのアプリケーション ログの転送間隔を増減するには、[転送間隔 (分)] の値を変更します。 ログに取り込む情報の量も、[ログ レベル] の値を設定することによって変更できます。 たとえば、取り込む情報の量を増やすには [詳細] を、重要なエラーのみ取り込むには [重大] を選択します。 アプリケーション ログを出力する特定の診断プロバイダーがある場合は、プロバイダーのグローバル一意識別子 (GUID) を [プロバイダー GUID] ボックスに追加することでログを取り込むことができます。
アプリケーション ログの詳細については、「Azure App Service の Web アプリの診断ログの有効化」を参照してください。
Windows イベント ログ
Windows イベント ログを取り込むには、[Windows イベント ログの転送を有効にする] チェックボックスをオンにします。 ストレージ アカウントへのイベント ログの転送間隔を増減するには、[転送間隔 (分)] の値を変更します。 追跡するイベントの種類に該当するチェックボックスをオンにしてください。
Azure SDK 2.6 以降を使用している場合、カスタム データ ソースを指定するには、<[データ ソース名]> テキスト ボックスに目的のデータ ソースを入力し、[追加] をクリックします。 指定したデータ ソースが diagnostics.cfcfg ファイルに追加されます。
パフォーマンス カウンター
パフォーマンス カウンターの情報は、システムのボトルネックを特定して、システムとアプリケーションのパフォーマンスを微調整するのに役立ちます。 詳細については、「Azure アプリケーションでのパフォーマンス カウンターの作成と使用」を参照してください。 パフォーマンス カウンターを取り込むには、[パフォーマンス カウンターの転送を有効にする] チェックボックスをオンにします。 ストレージ アカウントへのイベント ログの転送間隔を増減するには、[転送間隔 (分)] の値を変更します。 追跡するパフォーマンス カウンターに該当するチェックボックスをオンにしてください。
リストにないパフォーマンス カウンターを追跡するには、構文の候補を使用してパフォーマンス カウンターを入力し、 [追加] を選択します。 追跡できるパフォーマンス カウンターは、仮想マシンのオペレーティング システムによって決まります。構文の詳細については、「カウンター パスの指定」を参照してください。
インフラストラクチャ ログ
インフラストラクチャ ログには、Azure 診断インフラストラクチャ、RemoteAccess モジュール、および RemoteForwarder モジュールに関する情報があります。 インフラストラクチャ ログに関する情報を収集するには、[インフラストラクチャ ログの転送を有効にする] チェックボックスをオンします。 ストレージ アカウントへのインフラストラクチャ ログの転送間隔を増減するには、[転送間隔 (分)] の値を変更します。
詳細については、「Azure Diagnostics を使用したログ データの収集」を参照してください。
[ログ ディレクトリ]
ログ ディレクトリには、インターネット インフォメーション サービス (IIS) の要求、失敗した要求、または選択したフォルダーのログ ディレクトリから収集されたデータがあります。 ログ ディレクトリを取り込むには、[ログ ディレクトリの転送を有効にする] チェックボックスをオンにします。 ストレージ アカウントへのログの転送間隔を増減するには、[転送間隔 (分)] の値を変更します。
[IIS ログ] や [失敗した要求ログ] など、収集するログのチェックボックスを選択します。 既定のストレージ コンテナー名が指定されていますが、必要に応じて名前を変更できます。
任意のフォルダーからログを取り込むことができます。 [絶対ディレクトリのログ] セクションにパスを指定し、[ディレクトリの追加] を選択します。 ログは指定したコンテナーに取り込まれます。
ETW ログ
[Windows イベント トレーシング](ETW) を使用している場合、ETW ログを取り込むには、[ETW のログの転送を有効にする] チェックボックスをオンにします。 ストレージ アカウントへのログの転送間隔を増減するには、[転送間隔 (分)] の値を変更します。
イベントは、指定したイベント ソースおよびイベント マニフェストから取り込まれます。 イベント ソースを指定するには、[イベント ソース] セクションで名前を入力し、[イベント ソースの追加] を選択します。 同様に、[イベント マニフェスト] セクションでイベント マニフェストを指定し、[イベント マニフェストの追加] を選択できます。
System.Diagnostics.aspx 名前空間のクラスを通して ASP.NET で ETW フレームワークがサポートされています。 Microsoft.WindowsAzure.Diagnostics は、標準の System.Diagnostics.aspx クラスを継承して拡張する名前空間です。この名前空間では、Azure 環境のログ記録フレームワークとして System.Diagnostics.aspx を使用できます。 詳細については、Microsoft Azure でログ記録とトレースを制御する方法と Azure Cloud Services (延長サポート) と仮想マシンでの診断の有効化に関するページを参照してください。
クラッシュ ダンプ
ロール インスタンスがクラッシュしたときの情報を取り込むには、[クラッシュ ダンプの転送を有効にする] チェックボックスをオンにします。 (ASP.NET によってほとんどの例外が処理されるため、これは一般的に worker ロールに対してのみ機能します)。クラッシュ ダンプに充てる記憶域スペースの割合を増減するには、[ディレクトリのクォータ (%)] の値を変更します。 クラッシュ ダンプが保存されるストレージ コンテナーを変更でき、ダンプの種類として [フル] または [ミニ] を選択できます。
次のスクリーンショットは、現在追跡されているプロセスを一覧表示しています。 取り込むプロセスのチェックボックスをオンにしてください。 別のプロセスを一覧に追加するには、プロセス名を入力し、[プロセスの追加] を選択します。
詳細については、Microsoft Azure でのログ記録とトレースの制御に関するページを参照してください。
診断データの表示
クラウド サービスまたは仮想マシンの診断データを収集したら、そのデータを表示することができます。
クラウド サービスの診断データを表示するには
クラウド サービスを通常どおりにデプロイして実行します。
Visual Studio が生成するレポートまたはストレージ アカウントのテーブルのどちらでも診断データを表示できます。 レポートのデータを表示するには、Cloud Explorer またはサーバー エクスプローラーを開き、目的のロールのノードのショートカット メニューを開いて、[診断データの表示] を選択します。
利用可能なデータを示したレポートが表示されます。
最新のデータが表示されない場合は、転送間隔が経過するまで待ちます。
データをすぐに更新するには、[更新] リンクを選択します。 データを自動的に更新するには、[自動更新] ドロップダウン リスト ボックスで間隔を選択します。 エラー データをエクスポートするには、[CSV にエクスポート] ボタンをクリックして、Excel ワークシートで開くことができるコンマ区切り値ファイルを作成します。
Cloud Explorer またはサーバー エクスプローラーで、対象のデプロイに関連付けられたストレージ アカウントを開きます。
テーブル ビューアーで診断テーブルを開き、収集したデータを確認します。 IIS ログおよびカスタム ログについては、BLOB コンテナーを開くことができます。 次の表に、異なるログ ファイルのデータを含むテーブルまたは BLOB コンテナーの一覧を示します。 テーブルの項目には、ログ ファイルのデータだけでなく、EventTickCount、DeploymentId、Role、および RoleInstance が含まれており、どの仮想マシンとロールがデータがいつ生成したかを特定できます。
診断データ 説明 場所 アプリケーション ログ コードが System.Diagnostics.Trace クラスのメソッドを呼び出すことで生成するログ。 WADLogsTable イベント ログ 仮想マシンの Windows イベント ログから生成されるデータ。 Windows がこれらのログに情報を格納しますが、アプリケーションやサービスも、このログを使用してエラーまたはログ情報を報告します。 WADWindowsEventLogsTable パフォーマンス カウンター 仮想マシンで使用できるパフォーマンス カウンターのデータを収集できます。 パフォーマンス カウンターは、オペレーティング システムが備えている機能であり、メモリ使用率やプロセッサ時間など多くの統計情報を保持します。 WADPerformanceCountersTable インフラストラクチャ ログ 診断インフラストラクチャ自体から生成されるログ。 WADDiagnosticInfrastructureLogsTable IIS ログ Web 要求を記録するログ。 クラウド サービスが大量のトラフィックを取得する場合、これらのログは長くなる可能性があります。 このデータは、必要なときにのみ収集して格納することをお勧めします。 失敗した要求のログは、そのデプロイ、ロール、およびインスタンスのパスにある wad-IIS-failedreqlogs の BLOB コンテナーで見つけることができます。 ログ全体は wad-IIS-logfiles にあります。 各ファイルのエントリは WADDirectories テーブルで生成されます。 クラッシュ ダンプ クラウド サービス (通常はワーカー ロール) のバイナリ イメージを提供します。 wad-crush-dumps BLOB コンテナー カスタム ログ ファイル ユーザー定義のログ データです。 ストレージ アカウントのカスタム ログ ファイルの場所をコードで指定できます。 たとえば、カスタム BLOB コンテナーを指定できます。 データが切り捨てられる場合は、その種類のデータのバッファーを拡張したり、仮想マシンからストレージ アカウントへのデータ転送の間隔を短くしてみてください。
(省略可能) ストレージ コストを削減するために、折を見てストレージ アカウントからデータを消去します。
フル デプロイを行うと、Azure の diagnostics.cscfg ファイルが更新され、診断構成に対する変更があれば、クラウド サービスによってピックアップされます。 既存のデプロイを更新した場合は、Azure で .cscfg ファイルは更新されません。 その場合でも、次のセクションの手順に従って診断の設定を変更することができます。 フル デプロイの実行と既存のデプロイの更新の詳細については、 Azure アプリケーションの公開ウィザードに関するページを参照してください。
仮想マシンの診断データを表示するには
仮想マシンのショートカット メニューで [診断データの表示] を選択します。
[診断の概要] ダイアログ ボックスが表示されます。
最新のデータが表示されない場合は、転送間隔が経過するまで待ちます。
データをすぐに更新するには、[更新] リンクを選択します。 データを自動的に更新するには、[自動更新] ドロップダウン リスト ボックスで間隔を選択します。 エラー データをエクスポートするには、[CSV にエクスポート] ボタンをクリックして、Excel ワークシートで開くことができるコンマ区切り値ファイルを作成します。
クラウド サービスのデプロイ後に診断を設定する
既に実行しているクラウド サービスの問題について調べるとき、最初にロールをデプロイするときには指定しなかったデータを収集したい場合があります。 その場合は、サーバー エクスプローラーで設定を変更することで必要なデータの収集を開始できます。 診断は、ロールの単一インスタンスを対象に設定することも、すべてのインスタンスを対象に設定することもできます。どちらが対象となるかは、[診断構成] ダイアログ ボックスをインスタンスのショートカット メニューから開くか、ロールのショートカット メニューから開くかによって決まります。 ロール ノードを構成した場合、変更はすべてのインスタンスに適用されます。 インスタンス ノードを構成した場合、変更は対象のインスタンスにのみ適用されます。
実行中のクラウド サービスの診断を構成するには
サーバー エクスプローラーで、[クラウド サービス] ノードを展開し、ノードの一覧を展開して、調べたいロールとインスタンスのどちらかまたは両方を見つけます。
インスタンス ノードまたはロール ノードのショートカット メニューで [診断の設定の更新] を選択し、収集する診断の設定を選択します。
構成設定については、この記事の「診断データのソースを構成する」を参照してください。 診断データを表示する方法については、この記事の「診断データの表示」を参照してください。
サーバー エクスプローラーでデータ収集を変更した場合、その変更は、クラウド サービスを再度フル デプロイするまで有効になります。 既定の発行設定を使用する場合、変更は上書きされません。 既定の発行設定は、再度のフル デプロイを行うためではなく、既存のデプロイを更新するためのものです。 デプロイ時に設定が消去されるようにするには、発行ウィザードの [詳細設定] タブに移動し、[配置の更新] チェックボックスをオフにします。 このチェックボックスをオフにした状態で再デプロイすると、ロールの [プロパティ] エディターで行った
.wadcfgx
ファイルの設定に戻ります。 デプロイを更新した場合、Azure は前の設定を保持します。
Azure Cloud Services (延長サポート) の問題のトラブルシューティング
クラウド サービス プロジェクトで、ロールが "ビジー" 状態のままになる、リサイクルを繰り返す、内部サーバー エラーをスローするなどの問題が発生した場合、問題を診断して修正するために使用できる各種のツールと手法があります。 一般的な問題とソリューションの具体例や、エラーを診断して修正するために使用できる概念とツールの概要については、Azure platform as a service (PaaS) に関するページを参照してください。
Q & A
バッファー サイズとは何ですか。その大きさはどのくらいが適切ですか。
ローカル ファイル システムに保存できる診断データの量は、各仮想マシン インスタンスのクォータによって制限されています。 これに加えて、利用できる診断データの種類ごとにバッファー サイズを指定できます。 このバッファー サイズは、その種類のデータに対する個別のクォータのような役割を果たします。 クォータ全体とメモリ残量は、診断データの種類用のダイアログ ボックスの下部で確認できます。 バッファーのサイズを大きくしたり、データの種類を増やすには、クォータ全体を操作します。 クォータ全体を変更するには、diagnostics.wadcfg 構成ファイルを変更します。 診断データは、アプリケーションのデータと同じファイル システムに格納されます。 アプリケーションが大量のディスク領域を使用する場合は、診断クォータ全体を増加させないでください。
転送間隔とは何ですか。その長さはどのくらいが適切ですか。
転送間隔は、データの取り込み間隔、つまり前回の取り込みから次の取り込みまでの経過時間です。 転送間隔として指定された時間が経過するたびに、仮想マシンのローカル ファイル システムからストレージ アカウントのテーブルにデータが移動されます。 収集されたデータの量が、転送間隔の終わりを待たずにクォータを超えた場合、古いデータから順に破棄されます。 データがバッファー サイズまたは全体のクォータを超えるためにデータが失われる場合は、転送間隔を短くしてください。
タイム スタンプには、どのタイム ゾーンが使用されますか。
タイム スタンプは、クラウド サービスをホストしているデータ センターのローカル タイム ゾーンです。 ログ テーブルでは次の 3 つのタイム スタンプ列が使用されます。
- PreciseTimeStamp: イベントの ETW タイム スタンプ。 つまり、クライアントのイベントがログに記録された時刻です。
- TIMESTAMP: アップロード頻度境界に切り捨てられた PreciseTimeStamp。 たとえば、アップロード頻度が 5 分で、イベント時刻が 00:17:12 の場合、TIMESTAMP は 00:15:00 になります。
- Timestamp: エンティティが Azure テーブルに作成された時刻のタイム スタンプ。
診断情報を収集するためのコストを管理するにはどうすればよいですか。
既定の設定 ([ログ レベル] は [エラー]、[転送間隔] は [1 分]) はコストが最小となるように設計されています。 収集する診断データを増やしたり、転送間隔を短くしたりすると、コンピューティング コストが増大します。 必要以上に多くのデータを収集しないようにし、必要がなくなったらデータ収集を無効にしてください。 この記事ですでに説明したように、データ収集は、実行時も含めていつでも有効にすることができます。
IIS から失敗した要求のログを収集するにはどうすればよいですか。
既定では、IIS は失敗した要求のログを収集しません。 Web ロールの web.config ファイルを編集することで、失敗した要求のログを収集するように IIS を設定できます。
OnStart など RoleEntryPoint のメソッドからトレース情報を取得できません。 理由
RoleEntryPoint のメソッドは、IIS ではなく WAIISHost.exe のコンテキストで呼び出されます。 通常であればトレースを有効にする web.config の構成情報は適用されません。 この問題を解決するには、Web ロール プロジェクトに .config ファイルを追加し、そのファイルに RoleEntryPoint コードを含む出力アセンブリと同じ名前を付けます。 既定の Web ロール プロジェクトでは、.config ファイルの名前は WAIISHost.exe.config です。このファイルに次の行を追加します。
<system.diagnostics>
<trace>
<listeners>
<add name "AzureDiagnostics" type="Microsoft.WindowsAzure.Diagnostics.DiagnosticMonitorTraceListener">
<filter type="" />
</add>
</listeners>
</trace>
</system.diagnostics>
[プロパティ] ウィンドウで、[出力ディレクトリにコピー] プロパティを [常にコピーする] に設定します。
関連するコンテンツ
Azure の診断ログの詳細については、Azure Cloud Services (延長サポート) および Virtual Machines での診断の有効化に関するページと「Azure App Service の Web Apps の診断ログの有効化」を参照してください。