Azure Cloud Services での Azure Diagnostics の有効化Enabling Azure Diagnostics in Azure Cloud Services

Azure 診断の背景については、「 What is Microsoft Azure Diagnostics 」をご覧ください。See Azure Diagnostics Overview for a background on Azure Diagnostics.

Worker ロールの診断を有効にする方法How to Enable Diagnostics in a Worker Role

このチュートリアルでは、.NET EventSource クラスを使用してテレメトリ データを生成する Azure Worker ロールの実装方法について説明します。This walkthrough describes how to implement an Azure worker role that emits telemetry data using the .NET EventSource class. Azure Diagnostics を使用してテレメトリ データを収集し、これを Azure ストレージ アカウントに格納します。Azure Diagnostics is used to collect the telemetry data and store it in an Azure storage account. Worker ロールを作成すると、Visual Studio は Azure SDK for .NET 2.4 以降でソリューションの一部として自動的に診断 1.0 を有効にします。When creating a worker role, Visual Studio automatically enables Diagnostics 1.0 as part of the solution in Azure SDKs for .NET 2.4 and earlier. 次の手順では、Worker ロールの作成、ソリューションからの診断、1.0 の無効化、Worker ロールへの診断、1.2 または 1.3 のデプロイに関するプロセスについて説明します。The following instructions describe the process for creating the worker role, disabling Diagnostics 1.0 from the solution, and deploying Diagnostics 1.2 or 1.3 to your worker role.

前提条件Prerequisites

この記事では、Azure サブスクリプションがあり、Azure SDK で Visual Studio を使用していることを前提としています。This article assumes you have an Azure subscription and are using Visual Studio with the Azure SDK. Azure サブスクリプションがない場合でも、 無料試用版にサインアップできます。If you do not have an Azure subscription, you can sign up for the Free Trial. Azure PowerShell Version 0.8.7 以降をインストールして構成していることを確認してください。Make sure to Install and configure Azure PowerShell version 0.8.7 or later.

手順 1:worker ロールを作成するStep 1: Create a Worker Role

  1. Visual Studio を起動します。Launch Visual Studio.
  2. .NET Framework 4.5 をターゲットとする [クラウド] テンプレートから、Azure クラウド サービス プロジェクトを作成します。Create an Azure Cloud Service project from the Cloud template that targets .NET Framework 4.5. プロジェクト名を「WadExample」と入力し、[OK] をクリックします。Name the project "WadExample" and click Ok.
  3. [worker ロール] を選択して [OK] をクリックします。Select Worker Role and click Ok. プロジェクトが作成されます。The project will be created.
  4. ソリューション エクスプローラーで、WorkerRole1 プロパティ ファイルをダブルクリックします。In Solution Explorer, double-click the WorkerRole1 properties file.
  5. [構成] タブで、 [診断を有効にする] をオフにして診断 1.0 (Azure SDK 2.4 以前) を無効にします。In the Configuration tab, un-check Enable Diagnostics to disable Diagnostics 1.0 (Azure SDK 2.4 and earlier).
  6. ソリューションを構築してエラーが発生しないことを確認します。Build your solution to verify that you have no errors.

手順 2:コードをインストルメント化するStep 2: Instrument your code

WorkerRole.cs の内容を次のコードに置き換えます。Replace the contents of WorkerRole.cs with the following code. EventSource クラスから継承された SampleEventSourceWriter クラスは、4 つのログの作成方法 (SendEnumsMessageMethodSetOtherHighFreq) を実装しています。The class SampleEventSourceWriter, inherited from the EventSource Class, implements four logging methods: SendEnums, MessageMethod, SetOther and HighFreq. WriteEvent メソッドの最初のパラメーターは各イベントの ID を定義しています。The first parameter to the WriteEvent method defines the ID for the respective event. Run メソッドは、 SampleEventSourceWriter クラスに実装されているログ作成方法をぞれぞれ 10 秒ごとに呼び出す無限ループを実装します。The Run method implements an infinite loop that calls each of the logging methods implemented in the SampleEventSourceWriter class every 10 seconds.

using Microsoft.WindowsAzure.ServiceRuntime;
using System;
using System.Diagnostics;
using System.Diagnostics.Tracing;
using System.Net;
using System.Threading;

namespace WorkerRole1
{
    sealed class SampleEventSourceWriter : EventSource
    {
        public static SampleEventSourceWriter Log = new SampleEventSourceWriter();
        public void SendEnums(MyColor color, MyFlags flags) { if (IsEnabled())  WriteEvent(1, (int)color, (int)flags); }// Cast enums to int for efficient logging.
        public void MessageMethod(string Message) { if (IsEnabled())  WriteEvent(2, Message); }
        public void SetOther(bool flag, int myInt) { if (IsEnabled())  WriteEvent(3, flag, myInt); }
        public void HighFreq(int value) { if (IsEnabled()) WriteEvent(4, value); }

    }

    enum MyColor
    {
        Red,
        Blue,
        Green
    }

    [Flags]
    enum MyFlags
    {
        Flag1 = 1,
        Flag2 = 2,
        Flag3 = 4
    }

    public class WorkerRole : RoleEntryPoint
    {
        public override void Run()
        {
            // This is a sample worker implementation. Replace with your logic.
            Trace.TraceInformation("WorkerRole1 entry point called");

            int value = 0;

            while (true)
            {
                Thread.Sleep(10000);
                Trace.TraceInformation("Working");

                // Emit several events every time we go through the loop
                for (int i = 0; i < 6; i++)
                {
                    SampleEventSourceWriter.Log.SendEnums(MyColor.Blue, MyFlags.Flag2 | MyFlags.Flag3);
                }

                for (int i = 0; i < 3; i++)
                {
                    SampleEventSourceWriter.Log.MessageMethod("This is a message.");
                    SampleEventSourceWriter.Log.SetOther(true, 123456789);
                }

                if (value == int.MaxValue) value = 0;
                SampleEventSourceWriter.Log.HighFreq(value++);
            }
        }

        public override bool OnStart()
        {
            // Set the maximum number of concurrent connections
            ServicePointManager.DefaultConnectionLimit = 12;

            // For information on handling configuration changes
            // see the MSDN topic at https://go.microsoft.com/fwlink/?LinkId=166357.

            return base.OnStart();
        }
    }
}

手順 3:worker ロールをデプロイするStep 3: Deploy your Worker Role

警告

既存のロールで診断を有効にすると、パッケージがデプロイされるときに、既に設定してあるすべての拡張機能が無効になります。When you enable diagnostics for an existing role, any extensions that you have already set are disabled when the package is deployed. チェックの内容は次のとおりですThese include:

  • Microsoft Monitoring Agent 診断Microsoft Monitoring Agent Diagnostics
  • Microsoft Azure セキュリティ監視Microsoft Azure Security Monitoring
  • Microsoft AntimalwareMicrosoft Antimalware
  • Microsoft Monitoring AgentMicrosoft Monitoring Agent
  • Microsoft Service Profiler AgentMicrosoft Service Profiler Agent
  • Microsoft Azure ドメイン拡張機能Windows Azure Domain Extension
  • Microsoft Azure Diagnostics 拡張機能Windows Azure Diagnostics Extension
  • Microsoft Azure リモート デスクトップ拡張機能Windows Azure Remote Desktop Extension
  • Microsoft Azure Log CollectorWindows Azure Log Collector

更新したロールをデプロイした後、Azure Portal または PowerShell で拡張機能を再度設定できます。You can reset your extensions via the Azure portal or PowerShell after you deploy the updated role.

  1. ソリューション エクスプローラーで [WadExample] プロジェクトを選択し、 [ビルド] メニューから [発行] を選択して、worker ロールを Visual Studio から Azure にデプロイします。Deploy your worker role to Azure from within Visual Studio by selecting the WadExample project in the Solution Explorer then Publish from the Build menu.
  2. サブスクリプションを選択します。Choose your subscription.
  3. [Microsoft Azure 発行設定] ダイアログで、 [新規作成] を選択します。In the Microsoft Azure Publish Settings dialog, select Create New….
  4. [クラウド サービスとストレージ アカウントの作成] ダイアログで [名前] を入力し ("WadExample" など)、リージョンまたはアフィニティ グループを選択します。In the Create Cloud Service and Storage Account dialog, enter a Name (for example, "WadExample") and select a region or affinity group.
  5. [環境][ステージング] に設定します。Set the Environment to Staging.
  6. 必要に応じて、他の [設定] を変更し、 [発行] をクリックします。Modify any other Settings as appropriate and click Publish.
  7. デプロイが完了したら、クラウド サービスが [実行中] 状態になっていることを Azure Portal で確認します。After deployment has completed, verify in the Azure portal that your cloud service is in a Running state.

手順 4:診断構成ファイルを作成して拡張機能をインストールするStep 4: Create your Diagnostics configuration file and install the extension

  1. 次の PowerShell コマンドを実行して、パブリック構成ファイルのスキーマ定義をダウンロードします。Download the public configuration file schema definition by executing the following PowerShell command:

    (Get-AzureServiceAvailableExtension -ExtensionName 'PaaSDiagnostics' -ProviderNamespace 'Microsoft.Azure.Diagnostics').PublicConfigurationSchema | Out-File -Encoding utf8 -FilePath 'WadConfig.xsd'
    
  2. WorkerRole1 プロジェクトを右クリックし、 [追加] -> [新しいアイテム] の順に選択して、XML ファイルを WorkerRole1 プロジェクトに追加します。Add an XML file to your WorkerRole1 project by right-clicking on the WorkerRole1 project and select Add -> New Item… -> [Visual C# アイテム] -> [データ] -> [XML ファイル] の順に選びます -> Visual C# items -> Data -> XML File. ファイルに「WadExample.xml」という名前を付けます。Name the file "WadExample.xml".

    CloudServices_diag_add_xml

  3. 構成ファイルに WadConfig.xsd を関連付けます。Associate the WadConfig.xsd with the configuration file. WadExample.xml エディター ウィンドウがアクティブになっていることを確認します。Make sure the WadExample.xml editor window is the active window. F4 キーを押し、 [プロパティ] ウィンドウを開きます。Press F4 to open the Properties window. [プロパティ] ウィンドウで [スキーマ] プロパティをクリックします。Click the Schemas property in the Properties window. [スキーマ] プロパティでClick the in the […] をクリックします。in the Schemas property. [追加]Click the Add… ボタンをクリックし、XSD ファイルを保存した場所に移動して [WadConfig.xsd] を選択します。button and navigate to the location where you saved the XSD file and select the file WadConfig.xsd. Click OK.Click OK.

  4. WadExample.xml 構成ファイルの内容を次の XML に置き換え、ファイルを保存します。Replace the contents of the WadExample.xml configuration file with the following XML and save the file. この構成ファイルは、収集するいくつかのパフォーマンス カウンターを定義します。1 つは CPU 使用率、1 つはメモリ使用率です。This configuration file defines a couple performance counters to collect: one for CPU utilization and one for memory utilization. 次に、SampleEventSourceWriter クラスのメソッドに対応する 4 つのイベントを定義します。Then the configuration defines the four events corresponding to the methods in the SampleEventSourceWriter class.

<?xml version="1.0" encoding="utf-8"?>
<PublicConfig xmlns="http://schemas.microsoft.com/ServiceHosting/2010/10/DiagnosticsConfiguration">
  <WadCfg>
    <DiagnosticMonitorConfiguration overallQuotaInMB="25000">
      <PerformanceCounters scheduledTransferPeriod="PT1M">
        <PerformanceCounterConfiguration counterSpecifier="\Processor(_Total)\% Processor Time" sampleRate="PT1M" unit="percent" />
        <PerformanceCounterConfiguration counterSpecifier="\Memory\Committed Bytes" sampleRate="PT1M" unit="bytes"/>
      </PerformanceCounters>
      <EtwProviders>
        <EtwEventSourceProviderConfiguration provider="SampleEventSourceWriter" scheduledTransferPeriod="PT5M">
          <Event id="1" eventDestination="EnumsTable"/>
          <Event id="2" eventDestination="MessageTable"/>
          <Event id="3" eventDestination="SetOtherTable"/>
          <Event id="4" eventDestination="HighFreqTable"/>
          <DefaultEvents eventDestination="DefaultTable" />
        </EtwEventSourceProviderConfiguration>
      </EtwProviders>
    </DiagnosticMonitorConfiguration>
  </WadCfg>
</PublicConfig>

手順 5:worker ロールに診断をインストールするStep 5: Install Diagnostics on your Worker Role

Web ロールまたは worker ロールの診断を管理する PowerShell コマンドレットは、Set-AzureServiceDiagnosticsExtension、Get-AzureServiceDiagnosticsExtension、Remove-AzureServiceDiagnosticsExtension です。The PowerShell cmdlets for managing Diagnostics on a web or worker role are: Set-AzureServiceDiagnosticsExtension, Get-AzureServiceDiagnosticsExtension, and Remove-AzureServiceDiagnosticsExtension.

  1. Azure PowerShell を開きます。Open Azure PowerShell.
  2. スクリプトを実行して Worker ロールに診断をインストールします (StorageAccountKey を wadexample ストレージ アカウントのストレージ アカウント キーに、config_pathWadExample.xml ファイルへのパスに置き換えます)。Execute the script to install Diagnostics on your worker role (replace StorageAccountKey with the storage account key for your wadexample storage account and config_path with the path to the WadExample.xml file):
$storage_name = "wadexample"
$key = "<StorageAccountKey>"
$config_path="c:\users\<user>\documents\visual studio 2013\Projects\WadExample\WorkerRole1\WadExample.xml"
$service_name="wadexample"
$storageContext = New-AzureStorageContext -StorageAccountName $storage_name -StorageAccountKey $key
Set-AzureServiceDiagnosticsExtension -StorageContext $storageContext -DiagnosticsConfigurationPath $config_path -ServiceName $service_name -Slot Staging -Role WorkerRole1

手順 6:テレメトリ データを確認するStep 6: Look at your telemetry data

Visual Studio のサーバー エクスプローラーで、wadexample ストレージ アカウントに移動します。In the Visual Studio Server Explorer, navigate to the wadexample storage account. クラウド サービスを 5 分程実行すると、WADEnumsTableWADHighFreqTableWADMessageTableWADPerformanceCountersTableWADSetOtherTable の各テーブルが表示されます。After the cloud service has been running about five (5) minutes, you should see the tables WADEnumsTable, WADHighFreqTable, WADMessageTable, WADPerformanceCountersTable and WADSetOtherTable. いずれかのテーブルをダブルクリックして、収集した利用統計情報を表示します。Double-click one of the tables to view the telemetry that has been collected.

CloudServices_diag_tables

構成ファイル スキーマConfiguration File Schema

診断構成ファイルでは、診断エージェントの起動時に診断構成設定の初期化に使用される値を定義します。The Diagnostics configuration file defines values that are used to initialize diagnostic configuration settings when the diagnostics agent starts. 有効な値と例については、「 Azure 診断構成スキーマ 」をご覧ください。See the latest schema reference for valid values and examples.

トラブルシューティングTroubleshooting

問題が発生した場合、一般的な問題の解決方法については、「 Azure Diagnostics Troubleshooting 」をご覧ください。If you have trouble, see Troubleshooting Azure Diagnostics for help with common problems.

次の手順Next Steps

収集するデータの変更、問題のトラブルシューティング、または一般的な診断の詳細については、関連する Azure 仮想マシンの診断に関する記事の一覧をご覧ください。See a list of related Azure virtual-machine diagnostic articles to change the data you are collecting, troubleshoot problems or learn more about diagnostics in general.