Dela via


Felsöka problem med att aktivera Application Insights Snapshot Debugger eller visa ögonblicksbilder

Om du har aktiverat Application Insights Snapshot Debugger för ditt program, men inte ser ögonblicksbilder för undantag, kan du använda de här instruktionerna för att felsöka.

Det går inte att skapa ögonblicksbilder på grund av många olika orsaker. Du kan börja med att köra Snapshot Health Check för att identifiera några av de möjliga vanliga orsakerna.

Scenarier som inte stöds

Scenarier där ögonblicksbildinsamlaren inte stöds:

Scenarium Sidoeffekter Rekommendation
När du använder Snapshot Collector SDK:et i ditt program direkt (.csproj) och du har aktiverat det avancerade alternativet Interop. Den lokala Application Insights SDK (inklusive telemetri för ögonblicksbildinsamlaren) går förlorad, och därför är inga ögonblicksbilder tillgängliga.
Programmet kan krascha vid start med System.ArgumentException: telemetryProcessorTypedoes not implement ITelemetryProcessor.
Mer information om Application Insights-funktionen Interop finns i dokumentationen .
Om du använder det avancerade alternativet Interop, använder du den kodlösa inmatningen för Snapshot Collector som är aktiverad via Azure Portal.

Kontrollera att du använder rätt slutpunkt för ögonblicksbildsfelsökaren

För närvarande är de enda regioner som kräver slutpunktsändringar Azure Government och Microsoft Azure som drivs av 21Vianet.

För App Service och program som använder Application Insights SDK måste du uppdatera anslutningssträng med hjälp av åsidosättningar som stöds för Felsökning av ögonblicksbilder:

Egenskap för anslutningssträng Molntjänst för den amerikanska regeringen Kina Cloud
SnapshotEndpoint https://snapshot.monitor.azure.us https://snapshot.monitor.azure.cn

Mer information om andra åsidosättningar av anslutningar finns i Application Insights-dokumentationen.

För funktionsappen måste du uppdatera host.json med hjälp av de åsidosättningar som stöds:

Egendom Molntjänst för den amerikanska regeringen Kina Cloud
AgentEndpoint https://snapshot.monitor.azure.us https://snapshot.monitor.azure.cn

Exempel på host.json uppdaterat med US Government Cloud-agentens slutpunkt:

{
    "version": "2.0",
    "logging": {
        "applicationInsights": {
            "samplingExcludedTypes": "Request",
            "samplingSettings": {
                "isEnabled": true
            },
            "snapshotConfiguration": {
                "isEnabled": true,
                "agentEndpoint": "https://snapshot.monitor.azure.us"
            }
        }
    }
}

Använda hälsokontrollen för ögonblicksbilder

Flera vanliga problem gör att knappen Öppna ögonblicksbild av felsökning inte visas. Till exempel:

  • Använda en inaktuell ögonblicksbildinsamlare
  • Nå den dagliga uppladdningsgränsen
  • Ögonblicksbilden tar lång tid att ladda upp.

Gå till Ögonblicksbildens hälsokontroll för att felsöka vanliga problem via en länk i undantagsfönstret i helhetsvyn för spårning.

Skärmbild som visar hur man går in i Snapshot Health Check.

Det interaktiva, chattliknande gränssnittet letar efter vanliga problem och hjälper dig att åtgärda dem.

Skärmbild som visar det interaktiva hälsokontrollfönstret med problem och förslag på hur du åtgärdar dem.

Om det inte löser problemet kan du läsa följande manuella felsökningssteg.

Kontrollera TLS/SSL-klientinställningar (ASP.NET)

Om du har ett ASP.NET program som finns i Azure App Service eller i IIS på en virtuell dator kan programmet inte ansluta till tjänsten Snapshot Debugger på grund av ett SSL-säkerhetsprotokoll som saknas.

Slutpunkten för ögonblicksbildsfelsökaren kräver TLS version 1.2. Uppsättningen av SSL-säkerhetsprotokoll är en av de ovanligheter som aktiveras av httpRuntime targetFramework-värdet i system.web-avsnittet.web.config

Om httpRuntime targetFramework är 4.5.2 eller lägre, då inkluderas inte TLS 1.2 som standard.

Kommentar

Värdet httpRuntime targetFramework är oberoende av det målramverk som används när du skapar ditt program.

Om du vill kontrollera inställningen öppnar du filen web.config och letar upp avsnittet system.web. Kontrollera att targetFramework för httpRuntime är inställd på 4,6 eller högre.

<system.web>
    ...
    <httpRuntime targetFramework="4.7.2" />
    ...
</system.web>

Kommentar

Att ändra httpRuntime targetFramework-värdet ändrar de körningstidsegenskaper som tillämpas på ditt program och kan orsaka andra, subtila beteendeförändringar. Se till att testa programmet noggrant när du har gjort den här ändringen. En fullständig lista över kompatibilitetsändringar finns i Ändra mål för ändringar.

Kommentar

Om targetFramework är 4.7 eller högre avgör Windows de tillgängliga protokollen. I Azure App Service är TLS 1.2 tillgängligt. Men om du använder en egen virtuell dator kan du behöva aktivera TLS 1.2 i operativsystemet.

Överbelastningsscenarier i samband med Snapshot-felsökaren

Felsökningsprogrammet för ögonblicksbilder är utformat för användning i produktionsmiljöer. Standardinställningarna innehåller hastighetsbegränsningar för att minimera påverkan på dina program.

Du kan dock uppleva små processor-, minnes- och I/O-omkostnader som är associerade med felsökningsprogrammet för ögonblicksbilder, till exempel i följande scenarier.

När ett undantag utlöses i programmet:

  • När du skapar en signatur för problemtypen och bestämmer om du vill skapa en ögonblicksbild läggs en liten processor- och minnesbelastning till.

  • Om avoptimisering är aktiverad finns det en omkostnad för att återför JIT-kompilera metoden som utlöste undantaget. Detta uppstår nästa gång metoden körs. Beroende på metodens storlek kan den vara mellan 1 ms och 100 ms cpu-tid.

Om undantagshanteraren bestämmer sig för att skapa en ögonblicksbild:

  • Det tar ungefär en halv sekund att skapa processögonblicksbilden (P50 = 0,3 s, P90 = 1,2 s, P95 = 1,9 s) under vilken tid tråden som kastade undantaget pausas. Andra trådar blockeras inte.

  • Det tar flera minuter att konvertera processögonblicksbilden till en miniduplicering och ladda upp den till Application Insights.

    • Konvertera: P50 = 63 s, P90 = 187 s, P95 = 275 s.
    • Ladda upp: P50 = 31 s, P90 = 75 s, P95 = 98 s.

    Detta görs i Snapshot Uploader, som körs i en separat process. Snapshot Uploader-processen körs under normal CPU-prioritet och använder I/O med låg prioritet.

    Minidumpen skrivs först till disken och mängden diskutrymme är ungefär lika stor som den ursprungliga processens arbetsuppsättning. Att skriva minidumpen kan orsaka sidfel när minnet läses.

    Minidumpen komprimeras under uppladdningen, vilket förbrukar både CPU och minne i Snapshot Uploader-processen. Processor-, minnes- och diskomkostnaderna är proportionella mot storleken på processögonblicksbilden. Snapshot Uploader bearbetar ögonblicksbilder seriellt.

När TrackException anropas:

Felsökningsprogrammet för ögonblicksbilder kontrollerar om undantaget är nytt eller om en ögonblicksbild har skapats för det. Detta lägger till en liten CPU-belastning.

Förhandsversioner av .NET Core

Om du använder en förhandsversion av .NET Core eller ditt program refererar till Application Insights SDK, direkt eller indirekt via en beroende sammansättning, följer du anvisningarna för Aktivera felsökning av ögonblicksbilder för andra miljöer.

Kontrollera statussidan för webbplatstillägget för diagnostiktjänster

Om felsökningsprogrammet för ögonblicksbilder aktiverades via Application Insights-fönstret i portalen, aktiverades det av webbplatstillägget Diagnostiktjänster.

Kommentar

Kodlös installation av Application Insights Snapshot Debugger följer .NET Core-supportprincipen. För mer information om stödda runtimes, se .NET Core-supportprincipen.

Du kan kontrollera statussidan för det här tillägget genom att gå till följande URL: https://{site-name}.scm.azurewebsites.net/DiagnosticServices

Kommentar

Domänen för länken Statussida varierar beroende på molnet.

Den här domänen är samma som Kudu-hanteringswebbplatsen för App Service. På statussidan visas installationstillståndet för .NET Profiler - och Snapshot Collector-agenterna. Om det uppstod ett oväntat fel visas hur du åtgärdar det.

Du kan använda Kudu-hanteringswebbplatsen för App Service för att hämta bas-URL:en för den här statussidan:

  1. Öppna App Service-programmet i Azure Portal.
  2. Välj Avancerade verktyg eller sök efter Kudu.
  3. Välj .
  4. När du är på Kudu-hanteringswebbplatsen lägger du till följande i URL:en /DiagnosticServices och trycker på Retur. Det slutar så här: https://<kudu-url>/DiagnosticServices

Uppgradera till den senaste versionen av NuGet-paketet

Beroende på hur Snapshot Debugger aktiverades kan du överväga följande alternativ:

För de senaste uppdateringarna och felkorrigeringarna, konsultera versionsinformationen.

Kontrollera uppladdningsloggarna

När en ögonblicksbild har skapats skapas en minidumpfil (.dmp) på disken. En separat uppladdningsprocess skapar den minidump-filen och laddar upp den, tillsammans med eventuella associerade PDF-filer, till Application Insights Snapshot Debugger Storage. När minidumpen har laddats upp tas den bort från disken. Loggfilerna för uppladdningsprocessen sparas på disken. I en App Service-miljö hittar du loggarna i D:\Home\LogFiles. Använd Kudu-hanteringswebbplatsen för App Service för att hitta dessa loggfiler.

  1. Öppna App Service-programmet i Azure Portal.
  2. Välj Avancerade verktyg eller sök efter Kudu.
  3. Välj .
  4. I listrutan Felsökningskonsol väljer du CMD.
  5. Välj LogFiles.

Du bör se minst en fil med ett namn som börjar med Uploader_ eller SnapshotUploader_ och ett .log tillägg. Välj lämplig ikon för att ladda ned loggfiler eller öppna dem i en webbläsare. Filnamnet innehåller ett unikt suffix som identifierar App Service-instansen. Om din App Service-instans finns på fler än en dator finns det separata loggfiler för varje dator. När uppladdaren identifierar en ny minidumpfil registreras den i loggfilen. Här är ett exempel på en lyckad ögonblicksbild och uppladdning:

SnapshotUploader.exe Information: 0 : Received Fork request ID <request-ID> from process <ID> (Low pri)
    DateTime=2018-03-09T01:42:41.8571711Z
SnapshotUploader.exe Information: 0 : Creating minidump from Fork request ID <request-ID> from process 6368 (Low pri)
    DateTime=2018-03-09T01:42:41.8571711Z
SnapshotUploader.exe Information: 0 : Dump placeholder file created: <request-ID>.dm_
    DateTime=2018-03-09T01:42:41.8728496Z
SnapshotUploader.exe Information: 0 : Dump available <request-ID>.dmp
    DateTime=2018-03-09T01:42:45.7525022Z
SnapshotUploader.exe Information: 0 : Successfully wrote minidump to D:\local\Temp\Dumps\<connection-string>\<request-ID>.dmp
    DateTime=2018-03-09T01:42:45.7681360Z
SnapshotUploader.exe Information: 0 : Uploading D:\local\Temp\Dumps\<connection-string>\<request-ID>.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\<connection-string>\<request-ID>.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\<connection-string>\<request-ID>.dmp
    DateTime=2018-03-09T01:42:59.8530649Z

Kommentar

Föregående exempel är från version 1.2.0 av Microsoft.ApplicationInsights.SnapshotCollector NuGet-paketet. I tidigare versioner kallas uppladdningsprocessen MinidumpUploader.exe och loggen är mindre detaljerad.

I föregående exempel ska anslutningssträngen matcha anslutningssträngen för ditt program. Minidumpen är associerad med en ögonblicksbild med begärande-ID:t. Du kan använda det här ID:t senare för att hitta den associerade undantagsposten i Application Insights Analytics.

Uppladdaren söker efter nya PDF-filer ungefär en gång var 15:e minut. Här är ett exempel:

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\<connection-string>\<process-ID>.pdbscan
    DateTime=2018-03-09T01:47:19.4614027Z

För program som inte finns i App Service finns uppladdningsloggarna i samma mapp som minidumps: %TEMP%\Dumps\<string> (där <string> är anslutningssträngen).

Felsöka molntjänster

I Cloud Services kan den tillfälliga standardmappen vara för liten för att innehålla minidump-filerna, vilket leder till förlorade ögonblicksbilder. Det utrymme som behövs beror på programmets totala arbetsuppsättning och antalet samtidiga ögonblicksbilder.

Arbetsuppsättningen för en 32-bitars ASP.NET webbroll är vanligtvis mellan 200 MB och 500 MB. Tillåt minst två samtidiga ögonblicksbilder. Om ditt program till exempel använder 1 GB av den totala arbetsuppsättningen bör du se till att det finns minst 2 GB diskutrymme för att lagra ögonblicksbilder.

Konfigurera din molntjänstroll med en dedikerad lokal resurs för ögonblicksbilder:

  1. Lägg till en ny lokal resurs i molntjänsten genom att redigera cloud service-definitionsfilen (.csdef). I följande exempel definieras en resurs som heter SnapshotStore med storleken 5 GB.

    <LocalResources>
        <LocalStorage name="SnapshotStore" cleanOnRoleRecycle="false" sizeInMB="5120" />
    </LocalResources>
    
  2. Ändra startkoden för din roll för att lägga till en miljövariabel som pekar på den lokala resursen SnapshotStore . För arbetsroller ska koden läggas till i din rolls OnStart-metod:

    public override bool OnStart()
    {
        Environment.SetEnvironmentVariable("SNAPSHOTSTORE", RoleEnvironment.GetLocalResource("SnapshotStore").RootPath);
        return base.OnStart();
    }
    

    För webbroller (ASP.NET) ska koden läggas till i webbprogrammets Application_Start metod:

    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
            }
        }
    }
    
  3. Uppdatera rollens ApplicationInsights.config-fil för att åsidosätta den temporära mappplats som används av 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>
    

Åsidosätta mappen Shadow Copy

När ögonblicksbildinsamlaren startar försöker den hitta en mapp på disken som är lämplig för att köra uppladdningsprocessen för ögonblicksbilder. Den valda mappen kallas för mappen Shadow Copy.

Ögonblicksbildinsamlaren kontrollerar några välkända platser och ser till att den har behörighet att kopiera binärfilerna för uppladdning av ögonblicksbilder. Följande miljövariabler används:

  • Fabric_Folder_App_Temp
  • LOCALAPPDATA
  • APPDATA
  • TEMP

Om det inte går att hitta en lämplig mapp rapporterar Snapshot Collector ett fel med texten "Det gick inte att hitta en lämplig mapp för skuggkopiering".

Om kopieringen misslyckas rapporterar Snapshot Collector ett ShadowCopyFailed fel.

Om uppladdaren inte kan startas rapporterar Snapshot Collector ett UploaderCannotStartFromShadowCopy fel. Meddelandets brödtext innehåller System.UnauthorizedAccessExceptionofta . Det här felet uppstår vanligtvis eftersom programmet körs under ett konto med begränsad behörighet. Kontot har behörighet att skriva till mappen skuggkopia, men det har inte behörighet att köra kod.

Eftersom dessa fel vanligtvis inträffar under starten följs de ofta av ett ExceptionDuringConnect fel som säger att Uppladdaren inte kunde starta.

Om du vill kringgå dessa fel kan du ange mappen för skuggkopiering manuellt via konfigurationsalternativet ShadowCopyFolder . Du kan till exempel använda 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>

Eller om du använder appsettings.json med ett .NET Core-program:

{
    "ApplicationInsights": {
        "ConnectionString": "<your connection string>"
    },
    "SnapshotCollectorConfiguration": {
        "ShadowCopyFolder": "D:\\SnapshotUploader"
    }
}

Använd Application Insights sökning för att hitta undantag med ögonblicksbilder

När en ögonblicksbild skapas taggas utlöse undantaget med ett ögonblicksbilds-ID. Det ögonblicksbilds-ID:t ingår som en anpassad egenskap när undantaget rapporteras till Application Insights. med hjälp av Sök i Application Insights kan du söka efter alla poster med en ai.snapshot.id anpassad egenskap.

  1. Bläddra till din Application Insights-resurs i Azure Portal.
  2. Välj Sök.
  3. Skriv ai.snapshot.id i textrutan Sök och tryck på Enter.

Skärmbild som visar sökning efter telemetri med ett ögonblicksbilds-ID i portalen.

Om den här sökningen inte returnerar några resultat rapporterades inga ögonblicksbilder till Application Insights i det valda tidsintervallet.

Om du vill söka efter ett specifikt ögonblicksbilds-ID från uppladdningsloggarna skriver du det ID:t i sökrutan. Om du inte hittar poster för en ögonblicksbild som du vet har laddats upp följer du dessa steg:

  1. Kontrollera att du tittar på rätt Application Insights-resurs genom att verifiera anslutningssträngen.

  2. Med tidsstämpeln från uppladdningsloggen justerar du tidsintervallfiltret för sökningen för att täcka det tidsintervallet.

Om du fortfarande inte ser något undantag med det ögonblicksbilds-ID:t, har undantagsposten inte rapporterats till Application Insights. Den här situationen kan inträffa om programmet kraschade efter att det tog en ögonblicksbild men innan programmet rapporterade undantagsrapporten. I det här fallet kontrollerar du App Service-loggarna under Diagnose and solve problems för att se om det fanns oväntade omstarter eller ohanterade undantag.

Redigera nätverksproxy eller brandväggsregler

Om ditt program ansluter till Internet via en proxy eller en brandvägg kan du behöva uppdatera reglerna för att kommunicera med tjänsten Snapshot Debugger.

IP-adresser som används av Application Insights Snapshot Debugger ingår i Azure Monitor-tjänsttaggen. Mer information finns i dokumentationen om tjänsttaggar.

Finns det några faktureringskostnader när du använder ögonblicksbilder?

Det finns inga avgifter för din prenumeration som är specifika för Snapshot Debugger. Ögonblicksbildfilerna som samlas in lagras separat från telemetrin som samlas in av Application Insights SDK:er och det tillkommer inga avgifter för inmatning eller lagring av ögonblicksbilder.

Felsöka "Ta med din egen lagring" (BYOS)

Felsöka vanliga problem med att konfigurera BYOS.

Scenario: Template schema '{schema_uri}' isn't supported

Du fick ett fel som liknar följande exempel:

New-AzResourceGroupDeployment : 11:53:49 AM - Error: Code=InvalidTemplate; Message=Deployment template validation failed: 'Template schema
'https://schema.management.azure.com/schemas/2020-01-01/deploymentTemplate.json#' is not supported. Supported versions are
'2014-04-01-preview,2015-01-01,2018-05-01,2019-04-01,2019-08-01'. Please see https://aka.ms/arm-template for usage details.'.

Lösningar

  • Kontrollera att mallens $schema egenskap är giltig. Det måste följa det här mönstret:

    https://schema.management.azure.com/schemas/{schema_version}/deploymentTemplate.json#
    
  • Kontrollera att mallen schema_version ligger inom giltiga värden: 2014-04-01-preview, 2015-01-01, 2018-05-01, 2019-04-01, 2019-08-01.

Scenario: No registered resource provider found for location '{location}'

Du fick ett fel som liknar följande exempel:

New-AzResourceGroupDeployment : 6:18:03 PM - Resource microsoft.insights/components 'byos-test-westus2-ai' failed with message '{
  "error": {
    "code": "NoRegisteredProviderFound",
    "message": "No registered resource provider found for location 'westus2' and API version '2020-03-01-preview' for type 'components'. The supported api-versions are '2014-04-01,
2014-08-01, 2014-12-01-preview, 2015-05-01, 2018-05-01-preview'. The supported locations are ', eastus, southcentralus, northeurope, westeurope, southeastasia, westus2, uksouth,
canadacentral, centralindia, japaneast, australiaeast, koreacentral, francecentral, centralus, eastus2, eastasia, westus, southafricanorth, northcentralus, brazilsouth, switzerlandnorth,
australiasoutheast'."
  }
}'

Lösningar

  • Kontrollera att resursen apiVersionmicrosoft.insights/components är 2015-05-01.
  • Kontrollera att resursen apiVersionlinkedStorageAccount är 2020-03-01-preview.

Scenario: Storage account location should match Application Insights component location

Du fick ett fel som liknar följande exempel:

New-AzResourceGroupDeployment : 1:01:12 PM - Resource microsoft.insights/components/linkedStorageAccounts 'byos-test-centralus-ai/serviceprofiler' failed with message '{
  "error": {
    "code": "BadRequest",
    "message": "Storage account location should match AI component location",
    "innererror": {
      "trace": [
        "System.ArgumentException"
      ]
    }
  }
}'

Lösning

Kontrollera att platsen för Application Insights-resursen är samma som lagringskontot.