Pillanatkép-hibakereső engedélyezése .NET-alkalmazásokhoz az Azure Service Fabricben, a Cloud Servicesben és a virtuális gépeken

Ha a ASP.NET vagy ASP.NET Core-alkalmazás a Azure-alkalmazás Szolgáltatásban fut, és testre szabott Pillanatkép-hibakereső konfigurációt vagy a .NET Core előzetes verzióját igényli, kezdje a .NET-alkalmazások pillanatkép-hibakeresőjének engedélyezésével Azure-alkalmazás Szolgáltatásban.

Ha az alkalmazás az Azure Service Fabricben, az Azure Cloud Servicesben, az Azure Virtual Machinesben vagy a helyszíni gépeken fut, kihagyhatja a Snapshot Debugger engedélyezését az App Service-ben, és kövesse a jelen cikkben található útmutatást.

Mielőtt elkezdené

Pillanatkép-gyűjtemény konfigurálása ASP.NET alkalmazásokhoz

A Microsoft.Application hozzáadásakor Elemzések. SnapshotCollector NuGet-csomag az alkalmazáshoz, a SnapshotCollectorTelemetryProcessor csomagot automatikusan hozzá kell adni az TelemetryProcessors Alkalmazás Elemzések.config szakaszához.

Ha nem jelenik meg SnapshotCollectorTelemetryProcessor az Application Elemzések.config alkalmazásban, vagy testre szeretné szabni a Snapshot Debugger konfigurációt, manuálisan is szerkesztheti. Ezek a módosítások azonban felülíródnak, ha később a Microsoft.Application újabb verziójára frissít Elemzések. SnapshotCollector NuGet-csomag.

Az alábbi példa az alapértelmezett konfigurációnak megfelelő konfigurációt mutatja be:

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

A pillanatképek csak az Alkalmazás Elemzések által jelentett kivételek esetén gyűjthetők össze. Bizonyos esetekben (például a .NET-platform régebbi verzióiban) előfordulhat, hogy a kivételgyűjteményt úgy kell konfigurálnia, hogy láthassa a kivételeket pillanatképekkel a portálon.

Pillanatkép-gyűjtemény konfigurálása ASP.NET Core-alkalmazásokhoz vagy feldolgozói szolgáltatásokhoz

Előfeltételek

Az alkalmazásnak már hivatkoznia kell az alábbi Alkalmazás Elemzések NuGet-csomagok egyikére:

A NuGet-csomag hozzáadása

Adja hozzá a Microsoft.Application Elemzések. SnapshotCollector NuGet-csomag az alkalmazáshoz.

A szolgáltatásgyűjtemény frissítése

Az alkalmazás indítási kódjában, ahol a szolgáltatások konfigurálva vannak, adjon hozzá egy hívást a AddSnapshotCollector bővítménymetódushoz. Érdemes közvetlenül a hívás AddApplicationInsightsTelemetryután hozzáadni ezt a sort. Példa:

var builder = WebApplication.CreateBuilder(args);

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

A Pillanatkép-gyűjtő konfigurálása

A legtöbb esetben az alapértelmezett beállítások elegendőek. Ha nem, szabja testre a beállításokat úgy, hogy hozzáadja a következő kódot a hívás előtt AddSnapshotCollector()

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

Ezután adjon hozzá egy szakaszt SnapshotCollector appsettings.json, ahol felülbírálhatja az alapértelmezett értékeket. Az alábbi példa az alapértelmezett konfigurációnak megfelelő konfigurációt mutatja be:

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

Ha manuálisan kell testre szabnia a Pillanatkép-gyűjtő viselkedését appsettings.json használata nélkül, használja a delegáltak túlterhelésétAddSnapshotCollector. Példa:

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

Pillanatkép-gyűjtemény konfigurálása más .NET-alkalmazásokhoz

A pillanatképek csak az alkalmazás Elemzések jelentett kivételek esetén gyűjthetők össze. Az ASP.NET és ASP.NET Core-alkalmazások esetében az alkalmazás Elemzések SDK automatikusan jelentést tesz a vezérlőmetódus vagy a végpontútvonal-kezelő elől menekülő kezeletlen kivételekről. Más alkalmazások esetében előfordulhat, hogy módosítania kell a kódot a jelentéskészítéshez. A kivételkezelési kód az alkalmazás szerkezetétől függ. Példa:

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

A következő példa ahelyett használja ILogger a következőt TelemetryClient: Ez a példa feltételezi, hogy az alkalmazás Elemzések naplózószolgáltatót használja. Ahogy a példa is mutatja, a kivétel kezelésekor mindenképpen adja át a kivételt első paraméterként 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.");
    }
  }
}

Feljegyzés

Alapértelmezés szerint az alkalmazás Elemzések naplózó (ApplicationInsightsLoggerProvider) továbbítja a kivételeket a Pillanatkép-hibakeresőnekTelemetryClient.TrackException. Ezt a viselkedést az TrackExceptionsAsExceptionTelemetry osztály tulajdonsága ApplicationInsightsLoggerOptions szabályozza. Ha az alkalmazás Elemzések-naplózó konfigurálásakor van beállítva TrackExceptionsAsExceptionTelemetryfalse, akkor az előző példa nem aktiválja a Pillanatkép-hibakeresőt. Ebben az esetben módosítsa a kódot a manuális híváshoz TrackException .

Feljegyzés

2025. március 31-én megszűnik az eszközkulcsalapú betöltés támogatása. A rendszerállapot-kulcsok betöltése továbbra is működni fog, de a továbbiakban nem biztosítunk frissítéseket vagy támogatást a funkcióhoz. Váltás kapcsolati sztring az új képességek kihasználásához.

Következő lépések