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 トランザクションにアップロードされるため、トランザクション コストを抑えることができます。ただし、転送頻度を大きく設定すると以下のデメリットがあります。

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

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

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

コードを使用するため、各 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 を以下に示します。

<?xml version="1.0" encoding="utf-8"?>

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

   <Role name="MvcWebRole">

      <Instances count="1" />

      <ConfigurationSettings>

         <Setting name="Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString"

         value="DefaultEndpointsProtocol=https;

         AccountName=[TraceAccount];

         AccountKey=[Key]" />

      <Setting name="StorageConnectionString"

         value="DefaultEndpointsProtocol=https;

         AccountName=[DataAccount];

         AccountKey=[Key2]" />

      </ConfigurationSettings>

   </Role>

   <Role name="WorkerRoleA">

      <Instances count="1" />

      <ConfigurationSettings>

         <Setting name="Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString"

             value="DefaultEndpointsProtocol=https;

             AccountName=[TraceAccount];

             AccountKey=[Key]" />

         <Setting name="StorageConnectionString"

             value="DefaultEndpointsProtocol=https;

             AccountName=[DataAccount];

             AccountKey=[Key2]" />

      </ConfigurationSettings>

   </Role>

</ServiceConfiguration>

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

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

Comments (0)

Skip to main content