Snapshot Debugger inschakelen voor .NET-apps in Azure Service Fabric, Cloud Services en virtuele machines

Als uw ASP.NET of ASP.NET Core-toepassing wordt uitgevoerd in Azure-app Service en een aangepaste configuratie voor het foutopsporingsprogramma voor momentopnamen of een preview-versie van .NET Core vereist, begint u met Snapshot Debugger inschakelen voor .NET-apps in Azure-app Service.

Als uw toepassing wordt uitgevoerd in Azure Service Fabric, Azure Cloud Services, Azure Virtual Machines of on-premises machines, kunt u het inschakelen van het foutopsporingsprogramma voor momentopnamen in App Service overslaan en de richtlijnen in dit artikel volgen.

Vereisten

Momentopnameverzameling configureren voor ASP.NET toepassingen

Wanneer u het NuGet-pakket Microsoft.ApplicationInsights.SnapshotCollector toevoegt aan uw toepassing, wordt het SnapshotCollectorTelemetryProcessor automatisch toegevoegd aan de TelemetryProcessors sectie van ApplicationInsights.config.

Als u `SnapshotCollectorTelemetryProcessor` niet ziet in `ApplicationInsights.config`, of als u de Snapshot Debugger-configuratie wilt aanpassen, kunt u deze handmatig bewerken.

Notitie

Handmatige configuratie kan worden overschreven wanneer u een upgrade uitvoert naar een nieuwere versie van het NuGet-pakket Microsoft.ApplicationInsights.SnapshotCollector .

De standaardconfiguratie van Snapshot Collector ziet er ongeveer als volgt uit:

<TelemetryProcessors>
  <Add Type="Microsoft.ApplicationInsights.SnapshotCollector.SnapshotCollectorTelemetryProcessor, Microsoft.ApplicationInsights.SnapshotCollector">
    <!-- The default is true, but you can disable Snapshot Debugging by setting it to false -->
    <IsEnabled>true</IsEnabled>
    <!-- Snapshot Debugging is usually disabled in developer mode, but you can enable it by setting this to true. -->
    <!-- DeveloperMode is a property on the active TelemetryChannel. -->
    <IsEnabledInDeveloperMode>false</IsEnabledInDeveloperMode>
    <!-- How many times we need to see an exception before we ask for snapshots. -->
    <ThresholdForSnapshotting>1</ThresholdForSnapshotting>
    <!-- The maximum number of examples we create for a single problem. -->
    <MaximumSnapshotsRequired>3</MaximumSnapshotsRequired>
    <!-- The maximum number of problems that we can be tracking at any time. -->
    <MaximumCollectionPlanSize>50</MaximumCollectionPlanSize>
    <!-- How often we reconnect to the stamp. The default value is 15 minutes.-->
    <ReconnectInterval>00:15:00</ReconnectInterval>
    <!-- How often to reset problem counters. -->
    <ProblemCounterResetInterval>1.00:00:00</ProblemCounterResetInterval>
    <!-- The maximum number of snapshots allowed in ten minutes.The default value is 1. -->
    <SnapshotsPerTenMinutesLimit>3</SnapshotsPerTenMinutesLimit>
    <!-- The maximum number of snapshots allowed per day. -->
    <SnapshotsPerDayLimit>30</SnapshotsPerDayLimit>
    <!-- Whether or not to collect snapshot in low IO priority thread. The default value is true. -->
    <SnapshotInLowPriorityThread>true</SnapshotInLowPriorityThread>
    <!-- Agree to send anonymous data to Microsoft to make this product better. -->
    <ProvideAnonymousTelemetry>true</ProvideAnonymousTelemetry>
    <!-- The limit on the number of failed requests to request snapshots before the telemetry processor is disabled. -->
    <FailedRequestLimit>3</FailedRequestLimit>
  </Add>
</TelemetryProcessors>

Momentopnamen worden verzameld alleen bij uitzonderingen die zijn gerapporteerd aan Application Insights. In sommige gevallen, zoals in oudere versies van het .NET-platform, moet u mogelijk uitzonderingsverzameling configureren om uitzonderingen te zien met momentopnamen in de portal.

Momentopnameverzameling configureren voor ASP.NET Core-toepassingen of Worker Services

Vereisten

Uw toepassing moet al verwijzen naar een van de volgende NuGet-pakketten van Application Insights:

Het NuGet-pakket toevoegen

Voeg het Microsoft.ApplicationInsights.SnapshotCollector NuGet-pakket toe aan uw app.

De servicesverzameling bijwerken

Voeg in de opstartcode van uw toepassing, waar services zijn geconfigureerd, een aanroep toe aan de AddSnapshotCollector extensiemethode. We raden u aan deze regel direct na de aanroep toe te voegen.AddApplicationInsightsTelemetry Voorbeeld:

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
builder.Services.AddApplicationInsightsTelemetry();
builder.Services.AddSnapshotCollector();

De Snapshot Collector aanpassen

Voor de meeste scenario's zijn de standaardinstellingen van Snapshot Collector voldoende. U kunt de instellingen echter aanpassen door de volgende code toe te voegen voordat de aanroep naar AddSnapshotCollector():

using Microsoft.ApplicationInsights.SnapshotCollector;
...
builder.Services.Configure<SnapshotCollectorConfiguration>(builder.Configuration.GetSection("SnapshotCollector"));

Voeg vervolgens een SnapshotCollector sectie toe aan appsettings.json waarmee u de standaardinstellingen kunt overschrijven.

De standaardconfiguratie van Snapshot Collector appsettings.json lijkt op het volgende voorbeeld:

{
  "SnapshotCollector": {
    "IsEnabledInDeveloperMode": false,
    "ThresholdForSnapshotting": 1,
    "MaximumSnapshotsRequired": 3,
    "MaximumCollectionPlanSize": 50,
    "ReconnectInterval": "00:15:00",
    "ProblemCounterResetInterval":"1.00:00:00",
    "SnapshotsPerTenMinutesLimit": 1,
    "SnapshotsPerDayLimit": 30,
    "SnapshotInLowPriorityThread": true,
    "ProvideAnonymousTelemetry": true,
    "FailedRequestLimit": 3
  }
}

Als u het gedrag van de momentopnameverzamelaar handmatig moet aanpassen zonder appsettings.json te gebruiken, gebruikt u de overbelasting van AddSnapshotCollector, die een delegate accepteert. Voorbeeld:

builder.Services.AddSnapshotCollector(config => config.IsEnabledInDeveloperMode = true);

Momentopnameverzameling configureren voor andere .NET-toepassingen

Momentopnamen worden alleen verzameld bij uitzonderingen die aan Application Insights worden gerapporteerd.

Voor ASP.NET- en ASP.NET Core-toepassingen rapporteert de Application Insights SDK automatisch niet-verwerkte uitzonderingen die ontsnappen aan een controllermethode of eindpuntroute-handler.

Voor andere toepassingen moet u mogelijk uw code wijzigen om ze te rapporteren. De uitzonderingsafhandelingscode is afhankelijk van de structuur van uw toepassing. Voorbeeld:

using Microsoft.ApplicationInsights;
using Microsoft.ApplicationInsights.DataContracts;
using Microsoft.ApplicationInsights.Extensibility;

internal class ExampleService
{
  private readonly TelemetryClient _telemetryClient;

  public ExampleService(TelemetryClient telemetryClient)
  {
    // Obtain the TelemetryClient via dependency injection.
    _telemetryClient = telemetryClient;
  }

  public void HandleExampleRequest()
  {
    using IOperationHolder<RequestTelemetry> operation = 
        _telemetryClient.StartOperation<RequestTelemetry>("Example");
    try
    {
      // TODO: Handle the request.
      operation.Telemetry.Success = true;
    }
    catch (Exception ex)
    {
      // Report the exception to Application Insights.
      operation.Telemetry.Success = false;
      _telemetryClient.TrackException(ex);
      // TODO: Rethrow the exception if desired.
    }
  }
}

In het volgende voorbeeld wordt gebruikgemaakt ILogger van in plaats van TelemetryClient. In dit voorbeeld nemen we aan dat u de Application Insights Logger Provider gebruikt. Zoals in het voorbeeld wordt weergegeven, moet u bij het afhandelen van een uitzondering de uitzondering doorgeven als de eerste parameter aan LogError.

using Microsoft.Extensions.Logging;

internal class LoggerExample
{
  private readonly ILogger _logger;

  public LoggerExample(ILogger<LoggerExample> logger)
  {
    _logger = logger;
  }

  public void HandleExampleRequest()
  {
    using IDisposable scope = _logger.BeginScope("Example");
    try
    {
      // TODO: Handle the request
    }
    catch (Exception ex)
    {
      // Use the LogError overload with an Exception as the first parameter.
      _logger.LogError(ex, "An error occurred.");
    }
  }
}

De Application Insights Logger (ApplicationInsightsLoggerProvider) stuurt standaard uitzonderingen door naar het foutopsporingsprogramma voor momentopnamen met behulp van TelemetryClient.TrackException. Dit gedrag wordt beheerd via de TrackExceptionsAsExceptionTelemetry eigenschap in de ApplicationInsightsLoggerOptions klasse.

Als u TrackExceptionsAsExceptionTelemetry instelt op false wanneer u de Application Insights Logger configureert, wordt het foutopsporingsprogramma voor momentopnamen niet door het voorgaande voorbeeld geactiveerd. Wijzig in dit geval uw code om handmatig aan te roepen TrackException .