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.

Voordat u begint

Momentopnameverzameling configureren voor ASP.NET toepassingen

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

Als u applicationInsights.config niet ziet SnapshotCollectorTelemetryProcessor of als u de configuratie van het foutopsporingsprogramma voor momentopnamen wilt aanpassen, kunt u deze handmatig bewerken. Deze bewerkingen worden echter mogelijk overschreven als u later een upgrade uitvoert naar een nieuwere versie van het NuGet-pakket Microsoft.ApplicationInsights.SnapshotCollector .

In het volgende voorbeeld ziet u een configuratie die gelijk is aan de standaardconfiguratie:

<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 alleen verzameld op uitzonderingen die zijn gerapporteerd aan Application Insights. In sommige gevallen (bijvoorbeeld 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 NuGet-pakket Microsoft.ApplicationInsights.SnapshotCollector 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. Het is een goed idee om 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 momentopnameverzamelaar configureren

In de meeste gevallen zijn de standaardinstellingen voldoende. Als dat niet het is, past u de instellingen aan 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 waar u de standaardinstellingen kunt overschrijven. In het volgende voorbeeld ziet u een configuratie die gelijk is aan de standaardconfiguratie:

{
  "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 de collector. Voorbeeld:

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

Momentopnameverzameling configureren voor andere .NET-toepassingen

Momentopnamen worden alleen verzameld op uitzonderingen die worden gerapporteerd aan Application Insights. 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. Hier volgt een 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 wordt ervan uitgegaan dat u de Application Insights-logboekregistratieprovider 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.");
    }
  }
}

Notitie

De Application Insights Logger (ApplicationInsightsLoggerProvider) stuurt standaard uitzonderingen door naar het foutopsporingsprogramma voor momentopnamen via TelemetryClient.TrackException. Dit gedrag wordt beheerd via de TrackExceptionsAsExceptionTelemetry eigenschap in de ApplicationInsightsLoggerOptions klasse. Als u deze optie instelt TrackExceptionsAsExceptionTelemetryfalse bij het configureren van de Application Insights-logboekregistratie, wordt in het voorgaande voorbeeld het foutopsporingsprogramma voor momentopnamen niet geactiveerd. Wijzig in dit geval uw code om handmatig aan te roepen TrackException .

Notitie

Op 31 maart 2025 eindigt de ondersteuning voor opname van instrumentatiesleutels. Opname van instrumentatiesleutels blijft werken, maar we bieden geen updates of ondersteuning meer voor de functie. Overgang naar verbindingsreeks s om te profiteren van nieuwe mogelijkheden.

Volgende stappen

  • Genereer verkeer naar uw toepassing waarmee een uitzondering kan worden geactiveerd. Wacht vervolgens 10 tot 15 minuten totdat momentopnamen naar het Application Insights-exemplaar zijn verzonden.
  • Zie momentopnamen in Azure Portal.
  • Problemen met snapshot debugger oplossen.