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
- Schakel Application Insights in uw .NET-resource in.
- Neem het NuGet-pakket Microsoft.ApplicationInsights.SnapshotCollector versie 1.4.2 of hoger op in uw app.
- Het kan 10 tot 15 minuten duren voordat momentopnamen naar het Application Insights-exemplaar worden verzonden nadat een uitzondering is geactiveerd.
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 dit niet ziet SnapshotCollectorTelemetryProcessor
ApplicationInsights.config
of als u de configuratie van het foutopsporingsprogramma voor momentopnamen wilt aanpassen, kunt u deze handmatig bewerken.
Notitie
Handmatige configuraties kunnen worden overschreven bij het upgraden 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 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. 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 collector voor momentopnamen 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 waaraan appsettings.json
u de standaardinstellingen kunt overschrijven.
De standaardconfiguratie appsettings.json
van Snapshot Collector ziet er ongeveer als volgt uit:
{
"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. 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.");
}
}
}
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 TrackExceptionsAsExceptionTelemetry
false
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
- Momentopnamen weergeven in Azure Portal.
- Problemen met het foutopsporingsprogramma voor momentopnamen oplossen.