Aktivieren der Azure-Diagnose in Azure Cloud ServicesEnabling Azure Diagnostics in Azure Cloud Services

Hintergrundinformationen über Azure-Diagnose finden Sie unter Übersicht über Azure-Diagnose .See Azure Diagnostics Overview for a background on Azure Diagnostics.

Aktivieren der Diagnose in einer WorkerrolleHow to Enable Diagnostics in a Worker Role

In dieser Anleitung wird beschrieben, wie Sie eine Azure-Workerrolle implementieren, die mithilfe der .NET-EventSource-Klasse Telemetriedaten ausgibt.This walkthrough describes how to implement an Azure worker role that emits telemetry data using the .NET EventSource class. Die Telemetriedaten werden mit der Azure-Diagnose erfasst und in einem Azure-Speicherkonto gespeichert.Azure Diagnostics is used to collect the telemetry data and store it in an Azure storage account. Wenn Sie eine Workerrolle erstellen, aktiviert Visual Studio automatisch Diagnose 1.0 als Teil der Projektmappe in Azure SDKs für .NET 2.4 und früher.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. In den folgenden Anweisungen wird beschrieben, wie Sie die Workerrolle erstellen, die Diagnose 1.0 in der Projektmappe deaktivieren und die Diagnose 1.2 oder 1.3 in Ihrer Workerrolle bereitstellen.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.

VoraussetzungenPrerequisites

In diesem Artikel wird davon ausgegangen, dass Sie über ein Azure-Abonnement verfügen und Visual Studio mit dem Azure-SDK verwenden.This article assumes you have an Azure subscription and are using Visual Studio with the Azure SDK. Falls Sie nicht über ein Azure-Abonnement verfügen, können Sie sich für eine kostenlose Testversionregistrieren.If you do not have an Azure subscription, you can sign up for the Free Trial. Installieren und konfigurieren Sie Azure PowerShell Version 0.8.7 oder höher.Make sure to Install and configure Azure PowerShell version 0.8.7 or later.

Schritt 1: Erstellen einer WorkerrolleStep 1: Create a Worker Role

  1. Starten Sie Visual Studio.Launch Visual Studio.
  2. Erstellen Sie ein Azure Cloud Service-Projekt mithilfe der Cloudvorlage für .NET Framework 4.5.Create an Azure Cloud Service project from the Cloud template that targets .NET Framework 4.5. Geben Sie dem Projekt den Namen "WadExample", und klicken Sie auf "OK".Name the project "WadExample" and click Ok.
  3. Wählen Sie Workerrolle aus, und klicken Sie auf "OK".Select Worker Role and click Ok. Das Projekt wird erstellt.The project will be created.
  4. Doppelklicken Sie im Projektmappen-Explorer auf die Eigenschaftendatei WorkerRole1.In Solution Explorer, double-click the WorkerRole1 properties file.
  5. Deaktivieren Sie auf der Registerkarte Konfiguration die Option Diagnose aktivieren, um Diagnose 1.0 (Azure SDK 2.4 und früher) zu deaktivieren.In the Configuration tab, un-check Enable Diagnostics to disable Diagnostics 1.0 (Azure SDK 2.4 and earlier).
  6. Erstellen Sie die Projektmappe, um zu überprüfen, ob Fehler vorliegen.Build your solution to verify that you have no errors.

Schritt 2: Instrumentieren des CodesStep 2: Instrument your code

Ersetzen Sie den Inhalt von "WorkerRole.cs" durch den folgenden Code.Replace the contents of WorkerRole.cs with the following code. Die von der EventSource-Klasse geerbte SampleEventSourceWriter-Klasse implementiert vier Protokollierungsmethoden: SendEnums, MessageMethod, SetOther und HighFreq.The class SampleEventSourceWriter, inherited from the EventSource Class, implements four logging methods: SendEnums, MessageMethod, SetOther and HighFreq. Der erste Parameter für die WriteEvent -Methode definiert die ID für das betreffende Ereignis.The first parameter to the WriteEvent method defines the ID for the respective event. Die Run-Methode implementiert eine Endlosschleife, die jede der in der SampleEventSourceWriter -Klasse implementierten Protokollierungsmethoden alle 10 Sekunden aufruft.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();
        }
    }
}

Schritt 3: Bereitstellen der WorkerrolleStep 3: Deploy your Worker Role

Warnung

Wenn Sie die Diagnose für eine vorhandene Rolle aktivieren, werden alle Erweiterungen, die Sie festgelegt haben, beim Bereitstellen des Pakets deaktiviert.When you enable diagnostics for an existing role, any extensions that you have already set are disabled when the package is deployed. Das umfasst:These include:

  • Microsoft Monitoring Agent-DiagnoseMicrosoft Monitoring Agent Diagnostics
  • Microsoft Azure-SicherheitsüberwachungMicrosoft Azure Security Monitoring
  • Microsoft AntimalwareMicrosoft Antimalware
  • Microsoft Monitoring AgentMicrosoft Monitoring Agent
  • Microsoft-Dienst-Profiler-AgentMicrosoft Service Profiler Agent
  • Windows Azure-DomänenerweiterungWindows Azure Domain Extension
  • Windows Azure-DiagnoseerweiterungWindows Azure Diagnostics Extension
  • Windows Azure-RemotedesktoperweiterungWindows Azure Remote Desktop Extension
  • Windows Azure Log CollectorWindows Azure Log Collector

Sie können Ihre Erweiterungen über das Azure-Portal oder PowerShell zurücksetzen, nachdem Sie die aktualisierte Rolle bereitgestellt haben.You can reset your extensions via the Azure portal or PowerShell after you deploy the updated role.

  1. Stellen Sie Ihre Workerrolle über Visual Studio in Azure bereit. Wählen Sie dazu das Projekt WadExample aus, und klicken Sie anschließend im Menü Build auf Veröffentlichen.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. Wählen Sie Ihr Abonnement aus.Choose your subscription.
  3. Wählen Sie im Dialogfeld Microsoft Azure-Veröffentlichungseinstellungen die Option Neu erstellen aus.In the Microsoft Azure Publish Settings dialog, select Create New….
  4. Geben Sie im Dialogfeld Clouddienst und Speicherkonto erstellen im Feld Name einen Namen ein (z.B. „WadExample“), und wählen Sie eine Region oder Affinitätsgruppe aus.In the Create Cloud Service and Storage Account dialog, enter a Name (for example, "WadExample") and select a region or affinity group.
  5. Legen Sie Umgebung auf Staging fest.Set the Environment to Staging.
  6. Ändern Sie unter Einstellungen weitere Einstellungen nach Bedarf, und klicken Sie dann auf Veröffentlichen.Modify any other Settings as appropriate and click Publish.
  7. Überprüfen Sie nach Abschluss der Bereitstellung im Azure-Portal, ob Ihr Clouddienst den Status Wird ausgeführt aufweist.After deployment has completed, verify in the Azure portal that your cloud service is in a Running state.

Schritt 4: Erstellen der Diagnosekonfigurationsdatei und Installieren der ErweiterungStep 4: Create your Diagnostics configuration file and install the extension

  1. Laden Sie die Schemadefinition für die öffentliche Konfigurationsdatei mit dem folgenden PowerShell-Befehl herunter: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. Fügen Sie Ihrem Projekt WorkerRole1 eine XML-Datei hinzu. Klicken Sie dazu mit der rechten Maustaste auf das Projekt WorkerRole1, und wählen Sie Hinzufügen -> Neues Element…Add an XML file to your WorkerRole1 project by right-clicking on the WorkerRole1 project and select Add -> New Item… -> Visual C# Elemente -> Daten -> XML Datei aus. -> Visual C# items -> Data -> XML File. Nennen Sie die Datei "WadExample.xml".Name the file "WadExample.xml".

    CloudServices_diag_add_xml

  3. Ordnen Sie die Datei "WadConfig.xsd" der Konfigurationsdatei zu.Associate the WadConfig.xsd with the configuration file. Stellen Sie sicher, dass das Editorfenster mit "WadExample.xml" das aktive Fenster ist.Make sure the WadExample.xml editor window is the active window. Drücken Sie die Taste F4, um das Fenster Eigenschaften zu öffnen.Press F4 to open the Properties window. Klicken Sie im Fenster Eigenschaften auf die Eigenschaft Schemas.Click the Schemas property in the Properties window. Klicken Sie auf ... .Click the in the .in the Schemas property. Klicken Sie in der Eigenschaft Hinzufügen…Click the Add… , navigieren Sie zum Speicherort der XSD-Datei, und wählen Sie die Datei "WadConfig.xsd" aus.button and navigate to the location where you saved the XSD file and select the file WadConfig.xsd. Klicken Sie auf OK.Click OK.

  4. Ersetzen Sie den Inhalt der Konfigurationsdatei "WadExample.xml" durch den folgenden XML-Code, und speichern Sie die Datei.Replace the contents of the WadExample.xml configuration file with the following XML and save the file. Diese Konfigurationsdatei definiert ein Paar zu erfassender Leistungsindikatoren: einen für die CPU-Auslastung und einen für die Speicherauslastung.This configuration file defines a couple performance counters to collect: one for CPU utilization and one for memory utilization. Außerdem werden in der Konfiguration vier Ereignisse definiert, die den Methoden in der SampleEventSourceWriter-Klasse entsprechen.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>

Schritt 5: Installieren von Diagnose für die WorkerrolleStep 5: Install Diagnostics on your Worker Role

Die folgenden PowerShell-Cmdlets stehen zum Verwalten der Diagnose für eine Web- oder Workerrolle zur Verfügung: Set-AzureServiceDiagnosticsExtension, Get-AzureServiceDiagnosticsExtension und Remove-AzureServiceDiagnosticsExtension.The PowerShell cmdlets for managing Diagnostics on a web or worker role are: Set-AzureServiceDiagnosticsExtension, Get-AzureServiceDiagnosticsExtension, and Remove-AzureServiceDiagnosticsExtension.

  1. Öffnen Sie Azure PowerShell.Open Azure PowerShell.
  2. Führen Sie das Skript zum Installieren der Diagnose in Ihrer Workerrolle aus. Ersetzen Sie dabei StorageAccountKey durch den Speicherkontoschlüssel für Ihr wadexample-Speicherkonto und config_path durch den Pfad zur Datei WadExample.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

Schritt 6: Anzeigen der TelemetriedatenStep 6: Look at your telemetry data

Navigieren Sie in Visual Studio im Server-Explorer zum Speicherkonto „wadexample“.In the Visual Studio Server Explorer, navigate to the wadexample storage account. Wenn der Clouddienst etwa fünf (5) Minuten lang ausgeführt wurde, sollten die Tabellen WADEnumsTable, WADHighFreqTable, WADMessageTable, WADPerformanceCountersTable und WADSetOtherTable angezeigt werden.After the cloud service has been running about five (5) minutes, you should see the tables WADEnumsTable, WADHighFreqTable, WADMessageTable, WADPerformanceCountersTable and WADSetOtherTable. Doppelklicken Sie auf eine der Tabellen, um die erfassten Telemetriedaten anzuzeigen.Double-click one of the tables to view the telemetry that has been collected.

CloudServices_diag_tables

Schema der KonfigurationsdateiConfiguration File Schema

Die Diagnosekonfigurationsdatei definiert Werte, die verwendet werden, um beim Start des Diagnoseagenten die Diagnosekonfigurationseinstellungen zu initialisieren.The Diagnostics configuration file defines values that are used to initialize diagnostic configuration settings when the diagnostics agent starts. Gültige Werte und Beispiele finden Sie unter Azure-Diagnose-Konfigurationsschemas .See the latest schema reference for valid values and examples.

ProblembehandlungTroubleshooting

Unter Problembehandlung bei Azure-Diagnose finden Sie Informationen zur Behebung von häufig auftretenden Problemen.If you have trouble, see Troubleshooting Azure Diagnostics for help with common problems.

Nächste SchritteNext Steps

In der Liste der Artikel zur Azure-Diagnose im Zusammenhang mit virtuellen Computern finden Sie eine Anleitung zum Ändern erfasster Daten und zur Fehlerbehebung und erfahren mehr über Diagnose im Allgemeinen.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.