Problemen oplossen met het inschakelen van application Insights Snapshot Debugger of het weergeven van momentopnamen
Als u Application Insights Snapshot Debugger hebt ingeschakeld voor uw toepassing, maar geen momentopnamen ziet voor uitzonderingen, kunt u deze instructies gebruiken om problemen op te lossen.
Er kunnen veel verschillende redenen zijn waarom momentopnamen niet worden gegenereerd. U kunt beginnen met het uitvoeren van de statuscontrole voor momentopnamen om enkele van de mogelijke veelvoorkomende oorzaken te identificeren.
Niet-ondersteunde scenario's
Hieronder vindt u scenario's waarin Snapshot Collector niet wordt ondersteund:
Scenario | Neveneffecten | Aanbeveling |
---|---|---|
Wanneer u de Snapshot Collector SDK in uw toepassing rechtstreeks (.csproj) gebruikt en u de geavanceerde optie Interop hebt ingeschakeld. | De lokale Application Insights SDK (inclusief de telemetrie van Snapshot Collector) gaat verloren. Er zijn dus geen momentopnamen beschikbaar. Uw toepassing kan vastlopen bij het opstarten met System.ArgumentException: telemetryProcessorTypedoes not implement ITelemetryProcessor Zie de documentatie voor meer informatie over de functie Interop van Application Insights. |
Als u de geavanceerde optie Interop gebruikt, gebruikt u de injectie voor momentopnameverzamelaar zonder code (ingeschakeld via de UX van Azure Portal) |
Zorg ervoor dat u het juiste eindpunt van het foutopsporingsprogramma voor momentopnamen gebruikt
Momenteel zijn de enige regio's die eindpuntwijzigingen vereisen Azure Government en Microsoft Azure beheerd door 21Vianet.
Voor App Service en toepassingen die de Application Insights SDK gebruiken, moet u de verbindingsreeks bijwerken met behulp van de ondersteunde onderdrukkingen voor snapshot debugger, zoals hieronder is gedefinieerd:
Eigenschap Verbindingsreeks | Cloud voor de Amerikaanse overheid | China-cloud |
---|---|---|
SnapshotEndpoint | https://snapshot.monitor.azure.us |
https://snapshot.monitor.azure.cn |
Zie de Application Insights-documentatie voor meer informatie over andere verbindingsoverschrijvingen.
Voor functie-app moet u het host.json
bijwerken met behulp van de ondersteunde onderdrukkingen hieronder:
Eigenschappen | Cloud voor de Amerikaanse overheid | China-cloud |
---|---|---|
AgentEndpoint | https://snapshot.monitor.azure.us |
https://snapshot.monitor.azure.cn |
Hieronder ziet u een voorbeeld van het host.json
bijgewerkte eindpunt van de Cloud-agent voor de Amerikaanse overheid:
{
"version": "2.0",
"logging": {
"applicationInsights": {
"samplingExcludedTypes": "Request",
"samplingSettings": {
"isEnabled": true
},
"snapshotConfiguration": {
"isEnabled": true,
"agentEndpoint": "https://snapshot.monitor.azure.us"
}
}
}
}
Snapshot Health Check gebruiken
Verschillende veelvoorkomende problemen leiden ertoe dat de momentopname voor foutopsporing openen niet wordt weergegeven. Een verouderde momentopnameverzamelaar gebruiken, bijvoorbeeld; het bereiken van de dagelijkse uploadlimiet; of misschien duurt het lang voordat de momentopname is geüpload. Gebruik de statuscontrole voor momentopnamen om veelvoorkomende problemen op te lossen.
Er is een koppeling in het uitzonderingsvenster van de end-to-end-traceweergave waarmee u naar de statuscontrole van de momentopname gaat.
De interactieve, chatachtige interface zoekt naar veelvoorkomende problemen en begeleidt u bij het oplossen van deze problemen.
Als dit het probleem niet oplost, raadpleegt u de volgende handmatige stappen voor probleemoplossing.
De instrumentatiesleutel controleren
Zorg ervoor dat u de juiste instrumentatiesleutel gebruikt in uw gepubliceerde toepassing. Meestal wordt de instrumentatiesleutel gelezen uit het ApplicationInsights.config-bestand . Controleer of de waarde hetzelfde is als de instrumentatiesleutel voor de Application Insights-resource die u in de portal ziet.
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.
Tls/SSL-clientinstellingen controleren (ASP.NET)
Als u een ASP.NET-toepassing hebt die wordt gehost in Azure-app Service of in IIS op een virtuele machine, kan uw toepassing geen verbinding maken met de Snapshot Debugger-service vanwege een ontbrekend SSL-beveiligingsprotocol.
Voor het eindpunt snapshot debugger is TLS-versie 1.2 vereist. De set SSL-beveiligingsprotocollen is een van de quirks ingeschakeld door de httpRuntime targetFramework
waarde in de system.web
sectie van web.config
.
Als de httpRuntime targetFramework
4.5.2 of lager is, is TLS 1.2 niet standaard opgenomen.
Notitie
De httpRuntime targetFramework
waarde is onafhankelijk van het doelframework dat wordt gebruikt bij het bouwen van uw toepassing.
Als u de instelling wilt controleren, opent u het web.config-bestand en zoekt u de sectie system.web. Zorg ervoor dat de targetFramework
for httpRuntime
is ingesteld op 4,6 of hoger.
<system.web>
...
<httpRuntime targetFramework="4.7.2" />
...
</system.web>
Notitie
Als u de httpRuntime targetFramework
waarde wijzigt, worden de runtime-onderbrekingen die op uw toepassing worden toegepast, gewijzigd en kunnen andere, subtiele gedragswijzigingen worden veroorzaakt. Zorg ervoor dat u uw toepassing grondig test nadat u deze wijziging hebt aangebracht. Zie Wijzigingen opnieuw instellen voor een volledige lijst met compatibiliteitswijzigingen.
Notitie
Als de targetFramework
waarde 4.7 of hoger is, bepaalt Windows de beschikbare protocollen. In Azure-app Service is TLS 1.2 beschikbaar. Als u echter uw eigen virtuele machine gebruikt, moet u MOGELIJK TLS 1.2 inschakelen in het besturingssysteem.
Overheadscenario's voor het foutopsporingsprogramma voor momentopnamen
Het snapshot debugger is ontworpen voor gebruik in productieomgevingen. De standaardinstellingen omvatten frequentielimieten om de impact op uw toepassingen te minimaliseren.
U kunt echter kleine CPU-, geheugen- en I/O-overhead ervaren die is gekoppeld aan het foutopsporingsprogramma voor momentopnamen, zoals in de volgende scenario's.
Wanneer er een uitzondering wordt gegenereerd in uw toepassing:
- Door een handtekening te maken voor het probleemtype en te bepalen of u een momentopname wilt maken, wordt er een zeer kleine CPU- en geheugenoverhead toegevoegd.
- Als de optimalisatie is ingeschakeld, is er een overhead voor het opnieuw jiteren van de methode die de uitzondering heeft veroorzaakt. Dit wordt gemaakt wanneer de methode de volgende keer wordt uitgevoerd. Afhankelijk van de grootte van de methode kan dit tussen 1 ms en 100 ms CPU-tijd zijn.
Als de uitzonderingshandler besluit een momentopname te maken:
Het maken van de momentopname van het proces duurt ongeveer een halve seconde (P50=0,3s, P90=1.2s, P95=1,9s) gedurende welke tijd de thread die de uitzondering heeft veroorzaakt, is onderbroken. Andere threads worden niet geblokkeerd.
Het converteren van de momentopname van het proces naar een minidump en het uploaden ervan naar Application Insights duurt enkele minuten.
- Converteren: P50=63s, P90=187s, P95=275s.
- Uploaden: P50=31s, P90=75s, P95=98s.
Dit wordt gedaan in Snapshot Uploader, dat in een afzonderlijk proces wordt uitgevoerd. Het proces Momentopname-uploader wordt uitgevoerd onder de normale CPU-prioriteit en gebruikt I/O met lage prioriteit.
De minidump wordt eerst naar de schijf geschreven en de hoeveelheid schijfruimte is ongeveer hetzelfde als de werkset van het oorspronkelijke proces. Het schrijven van de minidump kan paginafouten veroorzaken wanneer het geheugen wordt gelezen.
De minidump wordt gecomprimeerd tijdens het uploaden, dat zowel CPU als geheugen verbruikt in het proces momentopname-uploader. De CPU-, geheugen- en schijfoverhead hiervoor is evenredig aan de grootte van de momentopname van het proces. Snapshot Uploader verwerkt momentopnamen serieel.
Wanneer TrackException
wordt aangeroepen:
Het foutopsporingsprogramma voor momentopnamen controleert of de uitzondering nieuw is of of er een momentopname voor is gemaakt. Hierdoor wordt een zeer kleine CPU-overhead toegevoegd.
Preview-versies van .NET Core
Als u een preview-versie van .NET Core gebruikt of als uw toepassing verwijst naar Application Insights SDK, direct of indirect via een afhankelijke assembly, volgt u de instructies voor het enable Snapshot Debugger voor andere omgevingen.
Controleer de statuspagina van de site-extensie van Diagnostic Services
Als Snapshot Debugger is ingeschakeld via het deelvenster Application Insights in de portal, is dit ingeschakeld door de diagnostische services-site-extensie.
Notitie
Installatie zonder code van Application Insights Snapshot Debugger volgt het .NET Core-ondersteuningsbeleid.
Zie .NET Core-ondersteuningsbeleid voor meer informatie over ondersteunde runtimes.
U kunt de statuspagina van deze extensie controleren door naar de volgende URL te gaan: https://{site-name}.scm.azurewebsites.net/DiagnosticServices
Notitie
Het domein van de koppeling Statuspagina is afhankelijk van de cloud. Dit domein is hetzelfde als de Kudu-beheersite voor App Service. Deze statuspagina toont de installatiestatus van de Profiler- en Snapshot Collector-agents. Als er een onverwachte fout is opgetreden, wordt deze weergegeven en ziet u hoe u deze kunt oplossen.
U kunt de Kudu-beheersite voor App Service gebruiken om de basis-URL van deze statuspagina op te halen:
- Open uw App Service-toepassing in Azure Portal.
- Selecteer Geavanceerde hulpprogramma's of zoek naar Kudu.
- Selecteer Zoeken.
- Zodra u zich op de Kudu-beheersite bevindt, voegt u in de URL het volgende
/DiagnosticServices
toe en drukt u op Enter. Dit eindigt als volgt:https://<kudu-url>/DiagnosticServices
Upgraden naar de nieuwste versie van het NuGet-pakket
Zie de volgende opties op basis van hoe Snapshot Debugger is ingeschakeld:
Als Snapshot Debugger is ingeschakeld via het deelvenster Application Insights in de portal, moet uw toepassing al het nieuwste NuGet-pakket uitvoeren.
Als Snapshot Debugger is ingeschakeld door het NuGet-pakket Microsoft.ApplicationInsights.SnapshotCollector te gebruiken, gebruikt u de NuGet-Pakketbeheer van Visual Studio om ervoor te zorgen dat u de nieuwste versie van
Microsoft.ApplicationInsights.SnapshotCollector
.
Raadpleeg de releaseopmerkingen voor de meest recente updates en oplossingen voor fouten.
De logboeken van de uploader controleren
Nadat een momentopname is gemaakt, wordt er een minidumpbestand (.dmp) op schijf gemaakt. Een afzonderlijk uploaderproces maakt dat minidumpbestand en uploadt het, samen met eventuele bijbehorende PDBs, naar Application Insights Snapshot Debugger Storage. Nadat de minidump is geüpload, wordt deze verwijderd van de schijf. De logboekbestanden voor het uploaderproces worden op schijf bewaard. In een App Service-omgeving vindt u deze logboeken in D:\Home\LogFiles
. Gebruik de Kudu-beheersite voor App Service om deze logboekbestanden te vinden.
- Open uw App Service-toepassing in Azure Portal.
- Selecteer Geavanceerde hulpprogramma's of zoek naar Kudu.
- Selecteer Zoeken.
- Selecteer CMD in de vervolgkeuzelijst Foutopsporingsconsole.
- Selecteer LogFiles.
U ziet ten minste één bestand met een naam die begint met Uploader_
of SnapshotUploader_
met een .log
extensie. Selecteer het juiste pictogram om logboekbestanden te downloaden of te openen in een browser.
De bestandsnaam bevat een uniek achtervoegsel waarmee het App Service-exemplaar wordt geïdentificeerd. Als uw App Service-exemplaar op meer dan één computer wordt gehost, zijn er afzonderlijke logboekbestanden voor elke computer. Wanneer de uploader een nieuw minidumpbestand detecteert, wordt het opgenomen in het logboekbestand. Hier volgt een voorbeeld van een geslaagde momentopname en uploaden:
SnapshotUploader.exe Information: 0 : Received Fork request ID 139e411a23934dc0b9ea08a626db16c5 from process 6368 (Low pri)
DateTime=2018-03-09T01:42:41.8571711Z
SnapshotUploader.exe Information: 0 : Creating minidump from Fork request ID 139e411a23934dc0b9ea08a626db16c5 from process 6368 (Low pri)
DateTime=2018-03-09T01:42:41.8571711Z
SnapshotUploader.exe Information: 0 : Dump placeholder file created: 139e411a23934dc0b9ea08a626db16c5.dm_
DateTime=2018-03-09T01:42:41.8728496Z
SnapshotUploader.exe Information: 0 : Dump available 139e411a23934dc0b9ea08a626db16c5.dmp
DateTime=2018-03-09T01:42:45.7525022Z
SnapshotUploader.exe Information: 0 : Successfully wrote minidump to D:\local\Temp\Dumps\c12a605e73c44346a984e00000000000\139e411a23934dc0b9ea08a626db16c5.dmp
DateTime=2018-03-09T01:42:45.7681360Z
SnapshotUploader.exe Information: 0 : Uploading D:\local\Temp\Dumps\c12a605e73c44346a984e00000000000\139e411a23934dc0b9ea08a626db16c5.dmp, 214.42 MB (uncompressed)
DateTime=2018-03-09T01:42:45.7681360Z
SnapshotUploader.exe Information: 0 : Upload successful. Compressed size 86.56 MB
DateTime=2018-03-09T01:42:59.6184651Z
SnapshotUploader.exe Information: 0 : Extracting PDB info from D:\local\Temp\Dumps\c12a605e73c44346a984e00000000000\139e411a23934dc0b9ea08a626db16c5.dmp.
DateTime=2018-03-09T01:42:59.6184651Z
SnapshotUploader.exe Information: 0 : Matched 2 PDB(s) with local files.
DateTime=2018-03-09T01:42:59.6809606Z
SnapshotUploader.exe Information: 0 : Stamp does not want any of our matched PDBs.
DateTime=2018-03-09T01:42:59.8059929Z
SnapshotUploader.exe Information: 0 : Deleted D:\local\Temp\Dumps\c12a605e73c44346a984e00000000000\139e411a23934dc0b9ea08a626db16c5.dmp
DateTime=2018-03-09T01:42:59.8530649Z
Notitie
Het bovenstaande voorbeeld is afkomstig van versie 1.2.0 van het Microsoft.ApplicationInsights.SnapshotCollector
NuGet-pakket. In eerdere versies wordt het uploaderproces aangeroepen MinidumpUploader.exe
en is het logboek minder gedetailleerd.
In het vorige voorbeeld is c12a605e73c44346a984e00000000000
de instrumentatiesleutel . Deze waarde moet overeenkomen met de instrumentatiesleutel voor uw toepassing.
De minidump is gekoppeld aan een momentopname met de id 139e411a23934dc0b9ea08a626db16c5
. U kunt deze id later gebruiken om de bijbehorende uitzonderingsrecord te vinden in Application Insights Analytics.
De uploader scant ongeveer elke 15 minuten op nieuwe PDBs. Hier volgt een voorbeeld:
SnapshotUploader.exe Information: 0 : PDB rescan requested.
DateTime=2018-03-09T01:47:19.4457768Z
SnapshotUploader.exe Information: 0 : Scanning D:\home\site\wwwroot for local PDBs.
DateTime=2018-03-09T01:47:19.4457768Z
SnapshotUploader.exe Information: 0 : Local PDB scan complete. Found 2 PDB(s).
DateTime=2018-03-09T01:47:19.4614027Z
SnapshotUploader.exe Information: 0 : Deleted PDB scan marker : D:\local\Temp\Dumps\c12a605e73c44346a984e00000000000\6368.pdbscan
DateTime=2018-03-09T01:47:19.4614027Z
Voor toepassingen die niet worden gehost in App Service, bevinden de uploaderlogboeken zich in dezelfde map als de minidumps: %TEMP%\Dumps\<ikey>
(waar <ikey>
is uw instrumentatiesleutel).
Problemen met Cloud Services oplossen
In Cloud Services kan de standaard tijdelijke map te klein zijn voor het opslaan van de minidumpbestanden, wat leidt tot verloren momentopnamen.
De benodigde ruimte is afhankelijk van de totale werkset van uw toepassing en het aantal gelijktijdige momentopnamen.
De werkset van een 32-bits ASP.NET-webrol is doorgaans tussen 200 MB en 500 MB. Sta ten minste twee gelijktijdige momentopnamen toe.
Als uw toepassing bijvoorbeeld 1 GB aan totale werkset gebruikt, moet u ervoor zorgen dat er ten minste 2 GB schijfruimte is om momentopnamen op te slaan.
Volg deze stappen om uw cloudservicerol te configureren met een toegewezen lokale resource voor momentopnamen.
Voeg een nieuwe lokale resource toe aan uw cloudservice door het bestand cloudservicedefinitie (.csdef) te bewerken. In het volgende voorbeeld wordt een resource gedefinieerd die wordt aangeroepen
SnapshotStore
met een grootte van 5 GB.<LocalResources> <LocalStorage name="SnapshotStore" cleanOnRoleRecycle="false" sizeInMB="5120" /> </LocalResources>
Wijzig de opstartcode van uw rol om een omgevingsvariabele toe te voegen die verwijst naar de
SnapshotStore
lokale resource. Voor werkrollen moet de code worden toegevoegd aan de methode vanOnStart
uw rol:public override bool OnStart() { Environment.SetEnvironmentVariable("SNAPSHOTSTORE", RoleEnvironment.GetLocalResource("SnapshotStore").RootPath); return base.OnStart(); }
Voor webrollen (ASP.NET) moet de code worden toegevoegd aan de methode van
Application_Start
uw webtoepassing:using Microsoft.WindowsAzure.ServiceRuntime; using System; namespace MyWebRoleApp { public class MyMvcApplication : System.Web.HttpApplication { protected void Application_Start() { Environment.SetEnvironmentVariable("SNAPSHOTSTORE", RoleEnvironment.GetLocalResource("SnapshotStore").RootPath); // TODO: The rest of your application startup code } } }
Werk het bestand ApplicationInsights.config van uw rol bij om de tijdelijke maplocatie te overschrijven die wordt gebruikt door
SnapshotCollector
<TelemetryProcessors> <Add Type="Microsoft.ApplicationInsights.SnapshotCollector.SnapshotCollectorTelemetryProcessor, Microsoft.ApplicationInsights.SnapshotCollector"> <!-- Use the SnapshotStore local resource for snapshots --> <TempFolder>%SNAPSHOTSTORE%</TempFolder> <!-- Other SnapshotCollector configuration options --> </Add> </TelemetryProcessors>
De map Shadow Copy overschrijven
Wanneer de Snapshot Collector wordt gestart, wordt geprobeerd een map op de schijf te vinden die geschikt is voor het uitvoeren van het proces Momentopname-uploader. De gekozen map wordt de map Shadow Copy genoemd.
De Snapshot Collector controleert een aantal bekende locaties en zorgt ervoor dat deze gemachtigd is om de binaire bestanden van Snapshot Uploader te kopiëren. De volgende omgevingsvariabelen worden gebruikt:
- Fabric_Folder_App_Temp
- LOCALAPPDATA
- APPDATA
- TEMP
Als een geschikte map niet kan worden gevonden, meldt Snapshot Collector een fout met de mededeling 'Kan geen geschikte schaduwkopiemap vinden'.
Als het kopiëren mislukt, rapporteert Snapshot Collector een ShadowCopyFailed
fout.
Als de uploader niet kan worden gestart, meldt Snapshot Collector een UploaderCannotStartFromShadowCopy
fout. De hoofdtekst van het bericht bevat System.UnauthorizedAccessException
vaak . Deze fout treedt meestal op omdat de toepassing wordt uitgevoerd onder een account met beperkte machtigingen. Het account is gemachtigd om naar de map schaduwkopie te schrijven, maar heeft geen machtiging om code uit te voeren.
Omdat deze fouten meestal optreden tijdens het opstarten, worden ze meestal gevolgd door een ExceptionDuringConnect
fout waarin wordt aangegeven dat Uploader niet kan worden gestart.
Als u deze fouten wilt omzeilen, kunt u de map schaduwkopie handmatig opgeven via de ShadowCopyFolder
configuratieoptie. Gebruik bijvoorbeeld ApplicationInsights.config:
<TelemetryProcessors>
<Add Type="Microsoft.ApplicationInsights.SnapshotCollector.SnapshotCollectorTelemetryProcessor, Microsoft.ApplicationInsights.SnapshotCollector">
<!-- Override the default shadow copy folder. -->
<ShadowCopyFolder>D:\SnapshotUploader</ShadowCopyFolder>
<!-- Other SnapshotCollector configuration options -->
</Add>
</TelemetryProcessors>
Of als u appsettings.json gebruikt met een .NET Core-toepassing:
{
"ApplicationInsights": {
"InstrumentationKey": "<your instrumentation key>"
},
"SnapshotCollectorConfiguration": {
"ShadowCopyFolder": "D:\\SnapshotUploader"
}
}
Application Insights-zoekopdracht gebruiken om uitzonderingen met momentopnamen te vinden
Wanneer er een momentopname wordt gemaakt, wordt de uitzondering voor het genereren van een momentopname gelabeld met een momentopname-id. Deze momentopname-id wordt opgenomen als een aangepaste eigenschap wanneer de uitzondering wordt gerapporteerd aan Application Insights. Met behulp van Zoeken in Application Insights kunt u alle records vinden met de ai.snapshot.id
aangepaste eigenschap.
- Blader naar uw Application Insights-resource in Azure Portal.
- Selecteer Zoeken.
- Typ
ai.snapshot.id
het tekstvak Zoeken en druk op Enter.
Als deze zoekopdracht geen resultaten retourneert, zijn er geen momentopnamen gerapporteerd aan Application Insights in het geselecteerde tijdsbereik.
Als u wilt zoeken naar een specifieke momentopname-id uit de logboeken uploader, typt u die id in het zoekvak. Als u geen records kunt vinden voor een momentopname die u weet dat deze is geüpload, voert u de volgende stappen uit:
Controleer of u de juiste Application Insights-resource bekijkt door de instrumentatiesleutel te controleren.
Pas met behulp van de tijdstempel uit het uploaderlogboek het tijdsbereikfilter van de zoekopdracht aan om dat tijdsbereik te behandelen.
Als u nog steeds geen uitzondering met die momentopname-id ziet, is de uitzonderingsrecord niet gerapporteerd aan Application Insights. Deze situatie kan zich voordoen als uw toepassing is vastgelopen nadat deze de momentopname heeft gemaakt, maar voordat de uitzonderingsrecord werd gerapporteerd. In dit geval controleert u de App Service-logboeken onder Diagnose and solve problems
om te zien of er onverwachte herstarts of onverwerkte uitzonderingen zijn.
Netwerkproxy- of firewallregels bewerken
Als uw toepassing via een proxy of firewall verbinding maakt met internet, moet u mogelijk de regels bijwerken om te communiceren met de Snapshot Debugger-service.
De IP-adressen die worden gebruikt door application Insights Snapshot Debugger zijn opgenomen in de Azure Monitor-servicetag. Zie de documentatie voor servicetags voor meer informatie.
Zijn er factureringskosten bij het gebruik van momentopnamen?
Er zijn geen kosten voor uw abonnement dat specifiek is voor Snapshot Debugger. De verzamelde momentopnamebestanden worden afzonderlijk opgeslagen van de telemetrie die wordt verzameld door de Application Insights SDK's en er worden geen kosten in rekening gebracht voor opname of opslag van momentopnamen.