Azure Diagnostics inschakelen in Azure Cloud Services (klassiek)

Belangrijk

Cloud Services (klassiek) is nu afgeschaft voor nieuwe klanten en wordt op 31 augustus 2024 voor alle klanten buiten gebruik gesteld. Nieuwe implementaties moeten gebruikmaken van het nieuwe implementatiemodel op basis van Azure Resource Manager Azure Cloud Services (uitgebreide ondersteuning).

Zie Azure Diagnostics Overzicht voor een achtergrond over Azure Diagnostics.

Diagnostische gegevens inschakelen in een werkrol

In dit scenario wordt beschreven hoe u een Azure-werkrol implementeert die telemetriegegevens verzendt met behulp van de klasse .NET EventSource. Azure Diagnostics wordt gebruikt om de telemetriegegevens te verzamelen en op te slaan in een Azure-opslagaccount. Wanneer u een werkrol maakt, schakelt Visual Studio automatisch Diagnostics 1.0 in als onderdeel van de oplossing in Azure SDK's voor .NET 2.4 en eerder. In de volgende instructies wordt het proces beschreven voor het maken van de werkrol, het uitschakelen van Diagnostics 1.0 uit de oplossing en het implementeren van Diagnostics 1.2 of 1.3 in uw werkrol.

Vereisten

In dit artikel wordt ervan uitgegaan dat u een Azure-abonnement hebt en Visual Studio gebruikt met de Azure SDK. Als u geen Azure-abonnement hebt, kunt u zich registreren voor de gratis proefversie. Zorg ervoor dat u Azure PowerShell versie 0.8.7 of hoger installeert en configureert.

Stap 1: Een werkrol maken

  1. Start Visual Studio.
  2. Maak een Azure Cloud Service-project op basis van de cloudsjabloon die is gericht op .NET Framework 4.5. Geef het project de naam 'WadExample' en klik op OK.
  3. Selecteer Werkrol en klik op OK. Het project wordt gemaakt.
  4. Dubbelklik in Solution Explorer op het eigenschappenbestand WorkerRole1.
  5. Schakel op het tabblad Configuratiehet selectievakje Diagnostische gegevens inschakelen uit om Diagnostics 1.0 (Azure SDK 2.4 en eerder) uit te schakelen.
  6. Bouw uw oplossing om te controleren of u geen fouten hebt.

Stap 2: Instrumenteer uw code

Vervang de inhoud van WorkerRole.cs door de volgende code. De klasse SampleEventSourceWriter, overgenomen van de Klasse EventSource, implementeert vier logboekregistratiemethoden: SendEnums, MessageMethod, SetOther en HighFreq. De eerste parameter voor de methode WriteEvent definieert de id voor de betreffende gebeurtenis. De methode Run implementeert een oneindige lus die elke 10 seconden elk van de logboekregistratiemethoden aanroept die zijn geïmplementeerd in de klasse SampleEventSourceWriter .

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();
        }
    }
}

Stap 3: Uw werkrol implementeren

Waarschuwing

Wanneer u diagnostische gegevens inschakelt voor een bestaande rol, worden alle extensies die u al hebt ingesteld, uitgeschakeld wanneer het pakket wordt geïmplementeerd. Deze omvatten:

  • Diagnostische gegevens van Microsoft Monitoring Agent
  • Microsoft Azure-beveiligingsbewaking
  • Microsoft Antimalware
  • Microsoft Monitoring Agent
  • Microsoft Service Profiler Agent
  • Windows Azure-domeinextensie
  • Windows Azure Diagnostics-extensie
  • Windows Azure Extern bureaublad-extensie
  • Windows Azure-logboekverzamelaar

U kunt uw extensies opnieuw instellen via de Azure Portal of PowerShell nadat u de bijgewerkte rol hebt geïmplementeerd.

  1. Implementeer uw werkrol in Azure vanuit Visual Studio door het project WadExample te selecteren in de Solution Explorer vervolgens Publiceren in het menu Build.
  2. Kies uw abonnement.
  3. Selecteer in het dialoogvenster Microsoft Azure-publicatie-instellingende optie Nieuwe maken....
  4. Voer in het dialoogvenster Cloudservice en opslagaccount maken een naam in (bijvoorbeeld 'WadExample') en selecteer een regio of affiniteitsgroep.
  5. Stel Omgeving in op Fasering.
  6. Wijzig eventuele andere instellingen en klik op Publiceren.
  7. Nadat de implementatie is voltooid, controleert u in de Azure Portal of uw cloudservice de status Actief heeft.

Stap 4: Uw diagnostische configuratiebestand maken en de extensie installeren

  1. Download de schemadefinitie van het openbare configuratiebestand door de volgende PowerShell-opdracht uit te voeren:

    (Get-AzureServiceAvailableExtension -ExtensionName 'PaaSDiagnostics' -ProviderNamespace 'Microsoft.Azure.Diagnostics').PublicConfigurationSchema | Out-File -Encoding utf8 -FilePath 'WadConfig.xsd'
    
  2. Voeg een XML-bestand toe aan uw WorkerRole1-project door met de rechtermuisknop op het project WorkerRole1 te klikken en Add ->New Item... ->Visual C#items ->Data ->XML File te selecteren. Geef het bestand de naam 'WadExample.xml'.

    CloudServices_diag_add_xml

  3. Koppel de WadConfig.xsd aan het configuratiebestand. Zorg ervoor dat het WadExample.xml editorvenster het actieve venster is. Druk op F4 om het venster Eigenschappen te openen. Klik op de eigenschap Schema's in het venster Eigenschappen . Klik op de ... in de eigenschap Schema's . Klik op de knop Toevoegen... en navigeer naar de locatie waar u het XSD-bestand hebt opgeslagen en selecteer het bestand WadConfig.xsd. Klik op OK.

  4. Vervang de inhoud van het WadExample.xml configuratiebestand door de volgende XML en sla het bestand op. Dit configuratiebestand definieert een aantal prestatiemeteritems die moeten worden verzameld: één voor CPU-gebruik en één voor geheugengebruik. Vervolgens definieert de configuratie de vier gebeurtenissen die overeenkomen met de methoden in de klasse SampleEventSourceWriter.

<?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>

Stap 5: Diagnostische gegevens installeren voor uw werkrol

De PowerShell-cmdlets voor het beheren van diagnostische gegevens op een web- of werkrol zijn: Set-AzureServiceDiagnosticsExtension, Get-AzureServiceDiagnosticsExtension en Remove-AzureServiceDiagnosticsExtension.

  1. Open Azure PowerShell.
  2. Voer het script uit om Diagnostische gegevens te installeren op uw werkrol (vervang StorageAccountKey door de opslagaccountsleutel voor uw wadexample-opslagaccount en config_path met het pad naar het WadExample.xml-bestand ):
$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

Stap 6: Uw telemetriegegevens bekijken

Navigeer in Visual Studio Server Explorer naar het wadexample-opslagaccount. Nadat de cloudservice ongeveer vijf (5) minuten is uitgevoerd, ziet u de tabellen WADEnumsTable, WADHighFreqTable, WADMessageTable, WADPerformanceCountersTable en WADSetOtherTable. Dubbelklik op een van de tabellen om de verzamelde telemetrie weer te geven.

CloudServices_diag_tables

Configuratiebestandsschema

Het configuratiebestand Diagnostische gegevens definieert waarden die worden gebruikt voor het initialiseren van diagnostische configuratie-instellingen wanneer de diagnoseagent wordt gestart. Zie de meest recente schemareferentie voor geldige waarden en voorbeelden.

Problemen oplossen

Als u problemen ondervindt, raadpleegt u Probleemoplossing Azure Diagnostics voor hulp bij veelvoorkomende problemen.

Volgende stappen

Bekijk een lijst met gerelateerde diagnostische artikelen over virtuele Azure-machines om de gegevens te wijzigen die u verzamelt, problemen op te lossen of meer te weten te komen over diagnostische gegevens in het algemeen.