Sdílet prostřednictvím


Řešení potíží s povolením ladicího programu snímků Application Insights nebo zobrazením snímků

Pokud jste pro aplikaci povolili Application Insights Snapshot Debugger, ale snímky výjimek se nezobrazují, můžete tyto pokyny použít k řešení potíží.

Generování snímků selže z mnoha různých důvodů. Můžete začít spuštěním kontroly stavu snímku, abyste identifikovali některé z možných běžných příčin.

Nepodporované scénáře

Scénáře, ve kterých není podporovaný kolektor snímků:

Scénář Vedlejší účinky Doporučení
Při použití sady SDK Snapshot Collector ve vaší aplikaci přímo (.csproj) a povolili jste pokročilou možnost Interop. Došlo ke ztrátě místní sady Application Insights SDK (včetně telemetrie kolektoru snímků), a proto nejsou k dispozici žádné snímky.
Při spuštění může dojít k chybovému ukončení aplikace s chybou System.ArgumentException: telemetryProcessorTypedoes not implement ITelemetryProcessor.
Další informace o interoperabilitě funkcí Application Insights najdete v dokumentaci.
Pokud používáte možnost Interop, použijte možnost sběru snímků bez psaní kódu povolenou prostřednictvím portálu Azure.

Ujistěte se, že používáte příslušný koncový bod snapshot debuggeru.

Jedinými oblastmi, které vyžadují úpravy koncových bodů, jsou Azure Government a Microsoft Azure provozované společností 21Vianet.

Pro App Service a aplikace využívající sadu Application Insights SDK musíte aktualizovat připojovací řetězec pomocí podporovaných přepsání pro Snapshot Debugger:

Vlastnost připojovacího řetězce Cloud pro státní správu USA Čína Cloud
Koncový bod snímku https://snapshot.monitor.azure.us https://snapshot.monitor.azure.cn

Další informace o změnách nastavení připojení najdete v dokumentaci k Application Insights.

V případě aplikace Function App musíte aktualizovat host.json pomocí povolených přepsání:

Vlastnost Cloud pro státní správu USA Čína Cloud
AgentEndpoint https://snapshot.monitor.azure.us https://snapshot.monitor.azure.cn

Příklad souboru host.json aktualizovaného koncovým bodem agenta pro cloud vlády USA:

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

Použijte kontrolu stavu snímku

Několik běžných problémů způsobuje, že se nezobrazuje tlačítko Otevřít snímek ladění. Příklad:

  • Použití zastaralého kolektoru snímků
  • Dosažení denního limitu nahrávání
  • Nahrávání snímku trvá příliš dlouho.

Získejte přístup ke kontrole stavu Snapshotu pro odstraňování běžných problémů pomocí odkazu v podokně Výjimky v přehledu celkového trasování.

Snímek obrazovky znázorňující, jak zadat Snapshot Health Check

Interaktivní rozhraní podobné chatu hledá běžné problémy a provede vás jejich řešením.

Snímek obrazovky s interaktivním oknem Kontrola stavu se seznamem problémů a návrhů, jak je opravit

Pokud se tím problém nevyřeší, projděte si následující ruční kroky pro řešení potíží.

Kontrola nastavení klienta TLS/SSL (ASP.NET)

Pokud máte ASP.NET aplikaci, která je hostovaná ve službě Aplikace Azure Nebo ve službě IIS na virtuálním počítači, může se vaší aplikaci nepovedlo připojit ke službě Snapshot Debugger kvůli chybějícímu protokolu zabezpečení SSL.

Koncový bod snapshot debuggeru vyžaduje protokol TLS verze 1.2. Sada protokolů zabezpečení SSL je jednou z výstředností povolených hodnotou httpRuntime targetFramework v sekci system.webweb.config.

httpRuntime targetFramework Pokud je hodnota 4.5.2 nebo nižší, nebude ve výchozím nastavení zahrnut protokol TLS 1.2.

Poznámka:

Hodnota httpRuntime targetFramework je nezávislá na cílové architektuře používané při sestavování aplikace.

Pokud chcete zkontrolovat nastavení, otevřete soubor web.config a vyhledejte oddíl system.web. Ujistěte se, že targetFramework pro httpRuntime je nastavena na 4.6 nebo vyšší.

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

Poznámka:

Úprava httpRuntime targetFramework hodnoty změní běhové zvláštnosti použité ve vaší aplikaci a může způsobit jiné drobné změny chování. Po provedení této změny nezapomeňte aplikaci důkladně otestovat. Úplný seznam změn kompatibility najdete v tématu Změny opětovného cílení.

Poznámka:

Pokud je verze targetFramework 4.7 nebo vyšší, systém Windows určuje dostupné protokoly. Ve službě Aplikace Azure je k dispozici protokol TLS 1.2. Pokud ale používáte vlastní virtuální počítač, možná budete muset v operačním systému povolit protokol TLS 1.2.

Scénáře výkonnostní režie nástroje Snapshot Debugger

Snapshot Debugger je navržený pro použití v produkčních prostředích. Výchozí nastavení zahrnují omezení rychlosti, která minimalizují dopad na vaše aplikace.

Můžete se ale setkat s malou režií procesoru, paměti a vstupně-výstupních operací spojenou s ladicím programem Snapshot Debugger, například v těchto situacích.

Při vyvolání výjimky v aplikaci:

  • Vytvoření podpisu pro typ problému a rozhodnutí, zda vytvořit snímek, přidává malou režii na CPU i paměti.

  • Pokud je povolena deoptimalizace, je zde neoddiskutovatelný náklad na opětovné JIT kompilování metody, která vyvolala výjimku. K tomu dojde při příštím spuštění této metody. V závislosti na velikosti metody může být mezi 1 ms a 100 ms času procesoru.

Pokud se obslužná rutina výjimky rozhodne vytvořit snímek:

  • Vytvoření snímku procesu trvá přibližně půl sekundy (P50 = 0,3 s, P90 = 1,2 s, P95 = 1,9 s), během kterého je vlákno, které vyvolalo výjimku, pozastaveno. Jiná vlákna nejsou blokovaná.

  • Převod snímku procesu na minidump a jeho nahrání do Application Insights trvá několik minut.

    • Převést: P50 = 63 s, P90 = 187 s, P95 = 275 s.
    • Nahrání: P50 = 31 s, P90 = 75 s, P95 = 98 s.

    To se provádí v Nástroji pro nahrávání snímků, který běží v samostatném procesu. Proces Nahrávání snímků běží pod normální prioritou procesoru a používá vstupně-výstupní operace s nízkou prioritou.

    Minidump se nejprve zapíše na disk a velikost místa na disku je přibližně stejná jako pracovní sada původního procesu. Zápis minidumpu může při čtení paměti způsobit chyby stránky.

    Minidump se během nahrávání komprimuje, což spotřebovává procesor i paměť v procesu Nahrávání snímků. Zátěž procesoru, paměti a disku je úměrná velikosti snímku procesu. Snapshot Uploader zpracovává snímky sériově.

Když je TrackException voláno:

Snapshot Debugger zkontroluje, jestli je výjimka nová nebo jestli byl pro ni vytvořen snímek. Tím se přidá malá režie procesoru.

Náhledové verze .NET Core

Pokud používáte verzi Preview .NET Core nebo aplikace odkazuje na sadu Application Insights SDK přímo nebo nepřímo prostřednictvím závislého sestavení, postupujte podle pokynů pro povolení nástroje Snapshot Debugger pro jiná prostředí.

Zkontrolujte stránku stavu rozšíření Diagnostických služeb

Pokud byl Snapshot Debugger povolen prostřednictvím podokna Application Insights na portálu, povolilo ho rozšíření webu Diagnostických služeb.

Poznámka:

Bez kódu instalace nástroje Application Insights Snapshot Debugger se řídí zásadami podpory .NET Core. Další informace o podporovaných runtimech viz Zásady podpory .NET Core.

Stavovou stránku tohoto rozšíření můžete zkontrolovat tak, že přejdete na následující adresu URL: https://{site-name}.scm.azurewebsites.net/DiagnosticServices

Poznámka:

Doména odkazu na stránku stavu se bude lišit v závislosti na cloudu.

Tato doména je stejná jako správcovský web Kudu pro službu App Service. Na stránce stavu se zobrazuje stav instalace agentů .NET Profileru a Snapshot Collectoru. Pokud došlo k neočekávané chybě, ukazuje, jak ji opravit.

K získání základní adresy URL této stránky stavu můžete použít Kudu pro správu Služby App Service.

  1. Otevřete aplikaci App Service na webu Azure Portal.
  2. Vyberte Rozšířené nástroje nebo vyhledejte Kudu.
  3. Vyberte Přejít.
  4. Jakmile jste na webu pro správu Kudu, připojte v adrese URL následující /DiagnosticServices a stiskněte enter. Končí takto: https://<kudu-url>/DiagnosticServices

Upgrade na nejnovější verzi balíčku NuGet

Na základě toho, jak byl program Snapshot Debugger povolen, podívejte se na následující možnosti:

Nejnovější aktualizace a opravy chyb najdete v poznámkách k verzi.

Zkontrolovat protokoly nahrávání

Po vytvoření snímku se na disku vytvoří minidumpový soubor (.dmp). Samostatný proces nahrávače vytvoří tento minidump soubor a nahraje ho spolu s přidruženými soubory PDB do úložiště Snapshot Debugger služby Application Insights. Po úspěšném nahrání souboru minidump se odstraní z disku. Soubory protokolu pro proces nahrávače se uchovávají na disku. V prostředí App Service Environment najdete tyto protokoly v D:\Home\LogFiles. K vyhledání těchto souborů protokolu použijte web pro správu Kudu pro službu App Service.

  1. Otevřete aplikaci App Service na webu Azure Portal.
  2. Vyberte Rozšířené nástroje nebo vyhledejte Kudu.
  3. Vyberte Přejít.
  4. V rozevíracím seznamu Konzola ladění vyberte CMD.
  5. Vyberte LogFiles.

Měl by se zobrazit alespoň jeden soubor s názvem, který začíná Uploader_ nebo SnapshotUploader_ příponou .log . Výběrem příslušné ikony stáhněte všechny soubory protokolů nebo je otevřete v prohlížeči. Název souboru obsahuje jedinečnou příponu, která identifikuje instanci služby App Service. Pokud je vaše instance služby App Service hostovaná na více než jednom počítači, jsou pro každý počítač samostatné soubory protokolu. Když nahrávač zjistí nový minidump soubor, zaznamená se do souboru protokolu. Tady je příklad úspěšného snímku a nahrání:

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

Poznámka:

Předchozí příklad pochází z verze 1.2.0 Microsoft.ApplicationInsights.SnapshotCollector balíčku NuGet. V dřívějších verzích se proces nahrávání nazývá MinidumpUploader.exe a protokol je méně podrobný.

V předchozím příkladu by připojovací řetězec měl odpovídat připojovacímu řetězci pro vaši aplikaci. Minidump je přidružený k snímku s ID požadavku. Toto ID můžete později použít k vyhledání přidruženého záznamu výjimky v Analýze Application Insights.

Nahrávací nástroj vyhledá nové soubory PDB přibližně jednou za 15 minut. Tady je příklad:

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

U aplikací, které nejsou hostované ve službě App Service, jsou protokoly nahrávače ve stejné složce jako minidumps: %TEMP%\Dumps\<string> (kde <string> je váš připojovací řetězec).

Řešení potíží s Cloud Services

Ve službě Cloud Services může být výchozí dočasná složka příliš malá na uložení minidumpových souborů, což vede ke ztrátě snímků. Potřebný prostor závisí na celkové pracovní sadě vaší aplikace a počtu souběžných snímků.

Pracovní sada 32bitové webové role ASP.NET je obvykle mezi 200 MB a 500 MB. Umožňuje aspoň dva souběžné snímky. Pokud vaše aplikace například používá celkovou pracovní sadu o velikosti 1 GB, měli byste se ujistit, že je k uložení snímků alespoň 2 GB místa na disku.

Nakonfigurujte roli cloudové služby s speciálním místním zdrojem pro snímky.

  1. Přidáním nového místního prostředku do cloudové služby upravte soubor definice cloudové služby (.csdef). Následující příklad definuje prostředek volaný SnapshotStore s velikostí 5 GB.

    <LocalResources>
        <LocalStorage name="SnapshotStore" cleanOnRoleRecycle="false" sizeInMB="5120" />
    </LocalResources>
    
  2. Upravte spouštěcí kód vaší role a přidejte proměnnou prostředí, která odkazuje na SnapshotStore místní prostředek. V případě pracovních rolí by měl být kód přidán do metody vaší pracovní role OnStart.

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

    U webových rolí (ASP.NET) by se měl kód přidat do metody webové aplikace Application_Start :

    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. Aktualizujte soubor ApplicationInsights.config vaší role, abyste přepsali dočasné umístění složky používané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>
    

Přepsání složky Stínová kopie

Když se spustí kolektor snímků, pokusí se najít složku na disku, která je vhodná pro spuštění procesu Nahrávání snímků. Zvolená složka se označuje jako složka Stínová kopie.

Kolektor snímků zkontroluje několik dobře známých umístění, aby mělo oprávnění ke kopírování binárních souborů Snapshot Uploaderu. Používají se následující proměnné prostředí:

  • Fabric_Folder_App_Temp
  • LOCALAPPDATA
  • APPDATA
  • TEMP

Pokud nelze najít vhodnou složku, nástroj Snapshot Collector hlásí chybu s informací, že se nepodařilo najít vhodnou složku stínové kopie.

Pokud kopírování selže, nástroj Snapshot Collector hlásí ShadowCopyFailed chybu.

Pokud nahrávací modul nejde spustit, nahlásí UploaderCannotStartFromShadowCopy kolektor snímků chybu. Tělo zprávy často obsahuje System.UnauthorizedAccessException. K této chybě obvykle dochází, protože aplikace běží pod účtem s omezenými oprávněními. Účet má oprávnění k zápisu do složky stínové kopie, ale nemá oprávnění ke spuštění kódu.

Vzhledem k tomu, že k těmto chybám obvykle dochází během spouštění, často následuje ExceptionDuringConnect chyba s informací, že Uploader se nepodařilo spustit.

Pokud chcete tyto chyby obejít, můžete složku stínové kopie zadat ručně pomocí ShadowCopyFolder možnosti konfigurace. Například pomocí 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>

Nebo pokud používáte appsettings.json s aplikací .NET Core:

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

Použití vyhledávání Application Insights k vyhledání výjimek se snímky

Když je snímek vytvořen, k vyvolané výjimce je přiřazeno ID snímku. Toto ID snímku je součástí vlastní vlastnosti, když je výjimka hlášena do Application Insights. Pomocí vyhledávání ve službě ai.snapshot.id Application Insights můžete najít všechny záznamy s vlastní vlastností.

  1. Na webu Azure Portal přejděte k prostředku Application Insights.
  2. Vyberte Hledat.
  3. Zadejte ai.snapshot.id do textového pole Hledat a stiskněte klávesu Enter.

Snímek obrazovky znázorňující vyhledávání telemetrie podle ID snímku v portálu

Pokud toto hledání nevrátí žádné výsledky, ve vybraném časovém rozsahu nebyly do Application Insights hlášeny žádné snímky.

Pokud chcete vyhledat konkrétní ID snímku z protokolů uploaderu, zadejte toto ID do vyhledávacího pole. Pokud nemůžete najít záznamy pro snímek, který jste věděli, že byl nahraný, postupujte takto:

  1. Pečlivě zkontrolujte, že se díváte na správný prostředek Application Insights ověřením připojovacího řetězce.

  2. Pomocí časového razítka z protokolu nahrávače upravte filtr časového rozsahu hledání tak, aby pokrývala tento časový rozsah.

Pokud stále nevidíte výjimku s tímto ID snímku, znamená to, že záznam výjimky nebyl nahlášen do Application Insights. K této situaci může dojít v případě, že se aplikace poté, co pořídila snímek, chybově ukončila, ale před nahlášením záznamu o výjimce. V tomto případě zkontrolujte protokoly Diagnose and solve problems služby App Service a zjistěte, jestli nedošlo k neočekávaným restartováním nebo neošetřeným výjimkám.

Úprava pravidel proxy serveru sítě nebo brány firewall

Pokud se vaše aplikace připojuje k internetu přes proxy server nebo bránu firewall, možná budete muset aktualizovat pravidla pro komunikaci se službou Snapshot Debugger.

IP adresy používané nástrojem Application Insights Snapshot Debugger jsou součástí značky služby Azure Monitor. Další informace najdete v dokumentaci ke značkám služeb.

Existují při používání snímků nějaké fakturační náklady?

Za předplatné se neúčtují žádné poplatky související s rozšířením Snapshot Debugger. Shromážděné soubory snímků se ukládají odděleně od telemetrie shromážděné sadami Application Insights SDK a za příjem ani ukládání snímků se neúčtují žádné poplatky.

Řešení potíží s používáním vlastního úložiště (BYOS)

Řešení běžných problémů s konfigurací BYOS

Scénář: Template schema '{schema_uri}' isn't supported

Zobrazila se chyba podobná následujícímu příkladu:

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

Řešení

  • Ujistěte se, že $schema je vlastnost šablony platná. Musí se řídit tímto vzorem:

    https://schema.management.azure.com/schemas/{schema_version}/deploymentTemplate.json#
    
  • Ujistěte se, že schema_version šablony je v rámci platných hodnot: 2014-04-01-preview, 2015-01-01, 2018-05-01, 2019-04-01, 2019-08-01.

Scénář: No registered resource provider found for location '{location}'

Zobrazila se chyba podobná následujícímu příkladu:

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

Řešení

  • Ujistěte se, že apiVersion zdroj microsoft.insights/components je 2015-05-01.
  • Ujistěte se, že apiVersion zdroj linkedStorageAccount je 2020-03-01-preview.

Scénář: Storage account location should match Application Insights component location

Zobrazila se chyba podobná následujícímu příkladu:

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"
      ]
    }
  }
}'

Řešení

Ujistěte se, že umístění prostředku Application Insights je stejné jako umístění účtu pro ukládání.