Aktivera felsökningsprogram för ögonblicksbilder för .NET-appar i Azure Service Fabric, Cloud Services och virtuella datorer

Om ditt ASP.NET- eller ASP.NET Core-program körs i Azure App Service och kräver en anpassad konfiguration av ögonblicksbildsfelsökaren eller en förhandsversion av .NET Core börjar du med Aktivera ögonblicksbildsfelsökare för .NET-appar i Azure App Service.

Om ditt program körs i Azure Service Fabric, Azure Cloud Services, Azure Virtual Machines eller lokala datorer kan du hoppa över aktivering av ögonblicksbildfelsökare i App Service och följa riktlinjerna i den här artikeln.

Innan du börjar

Konfigurera ögonblicksbildsamling för ASP.NET program

När du lägger till NuGet-paketet Microsoft.ApplicationInsights.SnapshotCollector i ditt program SnapshotCollectorTelemetryProcessor ska det läggas till automatiskt i TelemetryProcessors avsnittet ApplicationInsights.config.

Om du inte ser SnapshotCollectorTelemetryProcessor i ApplicationInsights.config, eller om du vill anpassa konfigurationen av felsökningsprogrammet för ögonblicksbilder, kan du redigera den för hand. Dessa redigeringar kan dock skrivas över om du senare uppgraderar till en nyare version av NuGet-paketet Microsoft.ApplicationInsights.SnapshotCollector .

I följande exempel visas en konfiguration som motsvarar standardkonfigurationen:

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

Ögonblicksbilder samlas endast in för undantag som rapporteras till Application Insights. I vissa fall (till exempel äldre versioner av .NET-plattformen) kan du behöva konfigurera undantagssamling för att se undantag med ögonblicksbilder i portalen.

Konfigurera ögonblicksbildsamling för ASP.NET Core-program eller Worker Services

Förutsättningar

Ditt program bör redan referera till något av följande Application Insights NuGet-paket:

Lägga till NuGet-paketet

Lägg till NuGet-paketet Microsoft.ApplicationInsights.SnapshotCollector i din app.

Uppdatera tjänstesamlingen

I programmets startkod, där tjänsterna konfigureras, lägger du till ett anrop till AddSnapshotCollector tilläggsmetoden. Det är en bra idé att lägga till den här raden direkt efter anropet till AddApplicationInsightsTelemetry. Till exempel:

var builder = WebApplication.CreateBuilder(args);

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

Konfigurera ögonblicksbildinsamlaren

I de flesta fall räcker standardinställningarna. Annars kan du anpassa inställningarna genom att lägga till följande kod före anropet till AddSnapshotCollector()

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

Lägg sedan till ett SnapshotCollector avsnitt i appsettings.json där du kan åsidosätta standardinställningarna. I följande exempel visas en konfiguration som motsvarar standardkonfigurationen:

{
  "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
  }
}

Om du behöver anpassa ögonblicksbildinsamlarens beteende manuellt, utan att använda appsettings.json, använder du överlagringen av AddSnapshotCollector som tar ett ombud. Till exempel:

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

Konfigurera ögonblicksbildsamling för andra .NET-program

Ögonblicksbilder samlas endast in för undantag som rapporteras till Application Insights. För ASP.NET- och ASP.NET Core-program rapporterar Application Insights SDK automatiskt ohanterade undantag som undgår en kontrollantmetod eller en slutpunktsvägshanterare. För andra program kan du behöva ändra koden för att rapportera dem. Undantagshanteringskoden beror på programmets struktur. Här är ett exempel:

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.
    }
  }
}

I följande exempel används ILogger i stället för TelemetryClient. Det här exemplet förutsätter att du använder Application Insights Logger-providern. Som exemplet visar bör du, när du hanterar ett undantag, skicka undantaget som den första parametern till 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.");
    }
  }
}

Kommentar

Som standard vidarebefordrar Application Insights Logger (ApplicationInsightsLoggerProvider) undantag till felsökningsprogrammet för ögonblicksbilder via TelemetryClient.TrackException. Det här beteendet styrs via TrackExceptionsAsExceptionTelemetry egenskapen på ApplicationInsightsLoggerOptions klassen. Om du anger TrackExceptionsAsExceptionTelemetry till false när du konfigurerar Application Insights-loggaren utlöser inte föregående exempel felsökningsprogrammet för ögonblicksbilder. I det här fallet ändrar du koden så att den anropas TrackException manuellt.

Kommentar

Stödet för inmatning av instrumentationsnycklar upphör den 31 mars 2025. Inmatningen av instrumenteringsnyckeln fortsätter att fungera, men vi kommer inte längre att tillhandahålla uppdateringar eller stöd för funktionen. Övergå till anslutningssträng för att dra nytta av nya funktioner.

Nästa steg

  • Generera trafik till ditt program som kan utlösa ett undantag. Vänta sedan 10 till 15 minuter innan ögonblicksbilder skickas till Application Insights-instansen.
  • Se ögonblicksbilder i Azure-portalen.
  • Felsöka problem med felsökning av ögonblicksbilder.