다음을 통해 공유


Windows Azure クラウド アプリケーションにトレースを使用する

このポストは、10 月 26 日に投稿された Using Trace in Windows Azure Cloud Applications の翻訳です。

編集メモ : 今回は、マイクロソフトの ASP.NET MVC プログラマ兼ライターを務める Rick Anderson の投稿をご紹介します。この投稿では、トレースを使用した Windows Azure クラウド アプリケーションについて取り上げています。

Windows Azure サンプル コードの多くで、Trace API が使用されています。Visual Studio (および Visual Studio 用 Windows Azure SDK) で Windows Azure 用のクラウド アプリケーションを新規作成すると、アプリケーションに以下の Trace 文が挿入されます。

Trace .WriteLine("Working","Information");

Windows Azure テンプレートにより生成されたコードには、部分的に構成されたトレース診断リスナーが含まれています。ここでは、このトレースを完全に構成する方法を説明します。

トレースの永続化

個人的に、エラーには Trace.TraceError を、情報には Trace.TraceInformation を好んで使用しています。

しかし API の呼び出しでは、Azure 内のデータを完全に永続化するには不十分です。そのため、診断モニターを構成する必要があります。私が使用しているコードを以下に示します。

private void ConfigDiagnostics()

{

   DiagnosticMonitorConfiguration config =

      DiagnosticMonitor .GetDefaultInitialConfiguration();

   config.ConfigurationChangePollInterval = TimeSpan.FromMinutes(1d);

   config.Logs.BufferQuotaInMB = 500;

   config.Logs.ScheduledTransferLogLevelFilter = LogLevel.Verbose;

   config.Logs.ScheduledTransferPeriod = TimeSpan.FromMinutes(1d);

   DiagnosticMonitor .Start(

       "Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString" ,

      config);

}

上のコードでは、転送頻度は 1 分に設定されています (1 分が最小値であり、これより小さな値を設定すると 1 分に切り上げられます)。アプリケーションがトレース データを生成する速度が非常に遅く、たとえば 1 分あたり 1 イベント程度しか処理されない場合、各エージェントから毎分 1 行のみが 1 つのトランザクションでアップロードされます。転送頻度を 60 分に設定すると、60 行が 1 つのバッチにパッケージされ、1 トランザクションにアップロードされるため、トランザクション コストを抑えることができます。ただし、転送頻度を大きく設定すると以下のデメリットがあります。

ストレージへのデータ転送に大きな遅延が発生する。

データの行数が多い場合 (数万~数十万行)、アップロードは (スムースでなく) バースト的になるため、スロットリングの原因となります。

サンプルでは ScheduledTransferLogLevelFilterVerbose に設定しているため、すべてのトレース メッセージが取得されます。

コードを使用するため、各 Web ロールおよびワーカー ロールの OnStart() メソッドでは、以下のコードに示す、ConfigDiagnostics を呼び出します。

public override bool OnStart()

{

   ConfigDiagnostics();

   Trace .TraceInformation("Initializing storage account")

       // Code removed for clarity.

}

メモ: 上のコードは、Windows Azure 用のクラウド アプリケーションでのみ動作するものであり、Windows Azure Web サイトでは動作しません。

警告: トレース情報を保存する際には、料金が発生する場合があります。詳細については、Windows Azure 計算ツールを参照してください。また、Azure Storage Explorer (英語) の WADLogsTable で、トレース データをご覧いただけます。

良好なトレース データおよび実稼働データを得るには、独立したストレージ アカウントを使用することが重要です。私がトレース構成に使用する、ServiceConfiguration.Cloud.cscfg ファイルにある XML を以下に示します。

<? xmlversion = " 1.0 " encoding = " utf-8 " ?>

< ServiceConfigurationserviceName = " AzureEmailService " xmlns = " https://schemas.microsoft.com/ServiceHosting/2008/10/ServiceConfiguration " osFamily = " 1 " osVersion = " * " schemaVersion = " 2012-05.1.7 " >

    < Rolename = " MvcWebRole " >

       < Instancescount = " 1 " />

       < ConfigurationSettings >

          < Settingname = " Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString "

         value = " DefaultEndpointsProtocol=https;

         AccountName=[TraceAccount];

         AccountKey=[Key] " />

       < Settingname = " StorageConnectionString "

         value = " DefaultEndpointsProtocol=https;

         AccountName=[DataAccount];

         AccountKey=[Key2] " />

       </ ConfigurationSettings >

    </ Role >

    < Rolename = " WorkerRoleA " >

       < Instancescount = " 1 " />

       < ConfigurationSettings >

          < Settingname = " Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString "

             value = " DefaultEndpointsProtocol=https;

             AccountName=[TraceAccount];

             AccountKey=[Key] " />

          < Settingname = " StorageConnectionString "

             value = " DefaultEndpointsProtocol=https;

             AccountName=[DataAccount];

             AccountKey=[Key2] " />

       </ ConfigurationSettings >

    </ Role >

</ ServiceConfiguration >

トレースは、Windows Azure アプリケーションの監視にたいへん効果的です。また、プログラムのデバッグに役立つ情報が豊富に得られます。

Windows Azure のトレースに関する詳細については、以下を参照してください。