Partilhar via


Solucionar problemas ao ativar o Application Insights Snapshot Debugger ou visualizar snapshots

Se você habilitou o Application Insights Snapshot Debugger para seu aplicativo, mas não está vendo instantâneos para exceções, você pode usar estas instruções para solucionar problemas.

Pode haver muitas razões diferentes pelas quais os snapshots não são gerados. Você pode começar executando a verificação de integridade do instantâneo para identificar algumas das possíveis causas comuns.

Cenários não suportados

Cenários em que o Snapshot Collector não é suportado:

Cenário Efeitos Secundários Recomendação
Ao usar o SDK do Snapshot Collector em seu aplicativo diretamente (.csproj) e você habilitou a opção avançada Interop. O SDK local do Application Insights (incluindo a telemetria do Snapshot Collector) é perdido, portanto, nenhum Snapshots está disponível.
Seu aplicativo pode falhar na inicialização com System.ArgumentException: telemetryProcessorTypedoes not implement ITelemetryProcessoro .
Para obter mais informações sobre o recurso de interoperabilidade do Application Insights, consulte a documentação.
Se você estiver usando a opção avançada Interoperabilidade, use a injeção do Coletor de Instantâneo sem código habilitada por meio do portal do Azure.

Verifique se você está usando o ponto de extremidade apropriado do Depurador de Instantâneo

Atualmente, as únicas regiões que requerem modificações de ponto de extremidade são o Azure Government e o Microsoft Azure operados pela 21Vianet.

Para o Serviço de Aplicativo e aplicativos que usam o SDK do Application Insights, você precisa atualizar a cadeia de conexão usando as substituições suportadas para o Depurador de Instantâneo:

Propriedade Connection String Nuvem do governo dos EUA China Cloud
SnapshotEndpoint https://snapshot.monitor.azure.us https://snapshot.monitor.azure.cn

Para obter mais informações sobre outras substituições de conexão, consulte a documentação do Application Insights.

Para o Function App, você precisa atualizar o host.json usando as substituições suportadas:

Property Nuvem do governo dos EUA China Cloud
AgentEndpoint https://snapshot.monitor.azure.us https://snapshot.monitor.azure.cn

Exemplo de atualização host.json com o ponto de extremidade do agente de nuvem do governo dos EUA:

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

Utilizar a verificação de estado de funcionamento do instantâneo

Vários problemas comuns resultam na não exibição do Open Debug Snapshot. Usando um Snapshot Collector desatualizado, por exemplo; atingir o limite de upload diário; ou talvez o instantâneo esteja apenas demorando muito tempo para ser carregado. Use a Verificação de integridade do instantâneo para solucionar problemas comuns.

Há um link no painel de exceção da exibição de rastreamento de ponta a ponta que leva você à Verificação de Integridade do Instantâneo.

Captura de tela mostrando como inserir a verificação de integridade do instantâneo.

A interface interativa, semelhante a um chat, procura problemas comuns e orienta você a corrigi-los.

Captura de tela mostrando a janela interativa Verificação de integridade listando os problemas e sugestões de como corrigi-los.

Se isso não resolver o problema, consulte as seguintes etapas manuais de solução de problemas.

Verifique a chave de instrumentação

Verifique se você está usando a chave de instrumentação correta em seu aplicativo publicado. Normalmente, a chave de instrumentação é lida do arquivo ApplicationInsights.config . Verifique se o valor é o mesmo que a chave de instrumentação para o recurso do Application Insights que você vê no portal.

Nota

A 31 de março de 2025, o suporte da ingestão de chaves de instrumentação terminará. A ingestão de chaves de instrumentação continuará a funcionar, mas não forneceremos mais atualizações ou suporte para o recurso. Transição para cadeias de conexão para aproveitar os novos recursos.

Verifique as configurações do cliente TLS/SSL (ASP.NET)

Se você tiver um aplicativo ASP.NET hospedado no Serviço de Aplicativo do Azure ou no IIS em uma máquina virtual, seu aplicativo poderá falhar ao se conectar ao serviço Depurador de Instantâneo devido a um protocolo de segurança SSL ausente.

O ponto de extremidade do Depurador de Instantâneo requer o TLS versão 1.2. O conjunto de protocolos de segurança SSL é uma das peculiaridades habilitadas pelo httpRuntime targetFramework valor na system.web seção de web.config. Se o httpRuntime targetFramework for 4.5.2 ou inferior, o TLS 1.2 não está incluído por padrão.

Nota

O httpRuntime targetFramework valor é independente da estrutura de destino usada ao criar seu aplicativo.

Para verificar a configuração, abra o arquivo web.config e localize a seção system.web. Certifique-se de que o targetFramework for httpRuntime está definido como 4.6 ou superior.

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

Nota

Modificar o httpRuntime targetFramework valor altera as peculiaridades de tempo de execução aplicadas ao seu aplicativo e pode causar outras alterações sutis de comportamento. Certifique-se de testar seu aplicativo completamente depois de fazer essa alteração. Para obter uma lista completa das alterações de compatibilidade, consulte Redirecionar alterações.

Nota

Se o for 4.7 ou superior, o targetFramework Windows determina os protocolos disponíveis. No Serviço de Aplicativo do Azure, o TLS 1.2 está disponível. No entanto, se você estiver usando sua própria máquina virtual, talvez seja necessário habilitar o TLS 1.2 no sistema operacional.

Cenários de sobrecarga do Depurador de Instantâneo

O Depurador de Snapshot foi projetado para uso em ambientes de produção. As configurações padrão incluem limites de taxa para minimizar o impacto em seus aplicativos.

No entanto, você pode enfrentar uma pequena sobrecarga de CPU, memória e E/S associada ao Depurador de Instantâneo, como nos cenários a seguir.

Quando uma exceção é lançada em seu aplicativo:

  • Criar uma assinatura para o tipo de problema e decidir se deseja criar um instantâneo adiciona uma pequena sobrecarga de CPU e memória.

  • Se a desotimização estiver habilitada, haverá uma sobrecarga para re-JITting o método que lançou a exceção. Isso é incorrido na próxima vez que o método for executado. Dependendo do tamanho do método, pode ser entre 1 ms e 100 ms de tempo de CPU.

Se o manipulador de exceções decidir criar um instantâneo:

  • A criação do instantâneo do processo leva cerca de meio segundo (P50 = 0,3 s, P90 = 1,2 s, P95 = 1,9 s) durante o qual o thread que lançou a exceção é pausado. Outros tópicos não são bloqueados.

  • Converter o instantâneo do processo em um minidump e carregá-lo no Application Insights leva vários minutos.

    • Convert: P50 = 63 s, P90 = 187 s, P95 = 275 s.
    • Carregamento: P50 = 31 s, P90 = 75 s, P95 = 98 s.

    Isso é feito no Snapshot Uploader, que é executado em um processo separado. O processo do Snapshot Uploader é executado abaixo da prioridade normal da CPU e usa E/S de baixa prioridade.

    O minidump é gravado primeiro no disco e a quantidade de espaço em disco é aproximadamente a mesma que o conjunto de trabalho do processo original. Escrever o minidump pode induzir falhas de página à medida que a memória é lida.

    O minidump é compactado durante o upload, o que consome CPU e memória no processo do Snapshot Uploader. A CPU, a memória e a sobrecarga de disco são proporcionais ao tamanho do instantâneo do processo. O Snapshot Uploader processa instantâneos em série.

Quando TrackException é chamado:

O Depurador de Instantâneo verifica se a exceção é nova ou se um instantâneo foi criado para ela. Isso adiciona uma pequena sobrecarga de CPU.

Versões de visualização do .NET Core

Se você estiver usando uma versão de visualização do .NET Core ou se seu aplicativo fizer referência ao SDK do Application Insights, direta ou indiretamente por meio de um assembly dependente, siga as instruções para Habilitar o depurador de instantâneo para outros ambientes.

Verifique a página de status da extensão de site dos Serviços de Diagnóstico

Se o Depurador de Instantâneo foi habilitado por meio do painel Application Insights no portal, ele foi habilitado pela extensão de site dos Serviços de Diagnóstico.

Nota

A instalação sem código do Application Insights Snapshot Debugger segue a política de suporte do .NET Core. Para obter mais informações sobre tempos de execução suportados, consulte Política de suporte do .NET Core.

Você pode verificar a página de status desta extensão indo para o seguinte url: https://{site-name}.scm.azurewebsites.net/DiagnosticServices

Nota

O domínio do link Página de status varia dependendo da nuvem.

Este domínio é o mesmo que o site de gerenciamento Kudu para o Serviço de Aplicativo. A página de status mostra o estado de instalação dos agentes .NET Profiler e Snapshot Collector. Se houve um erro inesperado, ele mostra como corrigi-lo.

Você pode usar o site de gerenciamento Kudu para o Serviço de Aplicativo para obter a URL base desta Página de Status:

  1. Abra seu aplicativo do Serviço de Aplicativo no portal do Azure.
  2. Selecione Ferramentas Avançadas ou procure Kudu.
  3. Selecione Ir.
  4. Quando você estiver no site de gerenciamento Kudu, no URL, anexe o seguinte /DiagnosticServices e pressione enter. Termina assim: https://<kudu-url>/DiagnosticServices

Atualizar para a versão mais recente do pacote NuGet

Com base em como o Depurador de Instantâneo foi habilitado, consulte as seguintes opções:

  • Se o Depurador de Instantâneo foi habilitado por meio do painel Application Insights no portal, seu aplicativo já deve estar executando o pacote NuGet mais recente.

  • Se o Depurador de Instantâneo foi habilitado incluindo o pacote NuGet Microsoft.ApplicationInsights.SnapshotCollector, use o Gerenciador de Pacotes NuGet do Visual Studio para verificar se você está usando a versão mais recente do Microsoft.ApplicationInsights.SnapshotCollector.

Para obter as últimas atualizações e correções de bugs, consulte as notas de versão.

Verifique os registos do carregador

Depois que um instantâneo é criado, um arquivo minidump (.dmp) é criado no disco. Um processo de upload separado cria esse arquivo minidump e o carrega, juntamente com quaisquer PDBs associados, para o armazenamento do Application Insights Snapshot Debugger. Depois que o minidump for carregado com êxito, ele será excluído do disco. Os arquivos de log para o processo de upload são mantidos no disco. Em um ambiente do Serviço de Aplicativo, você pode encontrar esses logons.D:\Home\LogFiles Use o site de gerenciamento do Kudu para o Serviço de Aplicativo para localizar esses arquivos de log.

  1. Abra seu aplicativo do Serviço de Aplicativo no portal do Azure.
  2. Selecione Ferramentas Avançadas ou procure Kudu.
  3. Selecione Ir.
  4. Na lista suspensa Console de depuração, selecione CMD.
  5. Selecione LogFiles.

Você deve ver pelo menos um arquivo com um nome que começa com Uploader_ ou SnapshotUploader_ e uma .log extensão. Selecione o ícone apropriado para baixar todos os arquivos de log ou abri-los em um navegador. O nome do arquivo inclui um sufixo exclusivo que identifica a instância do Serviço de Aplicativo. Se sua instância do Serviço de Aplicativo estiver hospedada em mais de uma máquina, haverá arquivos de log separados para cada máquina. Quando o carregador deteta um novo arquivo minidump, ele é registrado no arquivo de log. Aqui está um exemplo de um instantâneo e upload bem-sucedidos:

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

Nota

O exemplo anterior é da versão 1.2.0 do Microsoft.ApplicationInsights.SnapshotCollector pacote NuGet. Em versões anteriores, o processo de upload é chamado MinidumpUploader.exe e o log é menos detalhado.

No exemplo anterior, a chave de instrumentação é c12a605e73c44346a984e00000000000. Esse valor deve corresponder à chave de instrumentação para seu aplicativo. O minidump está associado a um instantâneo com o ID 139e411a23934dc0b9ea08a626db16c5. Você pode usar essa ID posteriormente para localizar o registro de exceção associado no Application Insights Analytics.

O carregador procura novos PDB cerca de uma vez a cada 15 minutos. Eis um exemplo:

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

Para aplicativos que não estão hospedados no Serviço de Aplicativo, os logs do carregador estão na mesma pasta que os minidumps: %TEMP%\Dumps\<ikey> (onde <ikey> está sua chave de instrumentação).

Solução de problemas de serviços de nuvem

Nos Serviços de Nuvem, a pasta temporária padrão pode ser muito pequena para armazenar os arquivos minidump, levando à perda de instantâneos.

O espaço necessário depende do conjunto de trabalho total do seu aplicativo e do número de instantâneos simultâneos.

O conjunto de trabalho de uma função Web de ASP.NET de 32 bits normalmente está entre 200 MB e 500 MB. Permita pelo menos dois instantâneos simultâneos.

Por exemplo, se seu aplicativo usa 1 GB de conjunto de trabalho total, você deve certificar-se de que há pelo menos 2 GB de espaço em disco para armazenar instantâneos.

Siga estas etapas para configurar sua função de Serviço de Nuvem com um recurso local dedicado para instantâneos.

  1. Adicione um novo recurso local ao seu Serviço de Nuvem editando o arquivo de definição do Serviço de Nuvem (.csdef). O exemplo a seguir define um recurso chamado SnapshotStore com um tamanho de 5 GB.

    <LocalResources>
        <LocalStorage name="SnapshotStore" cleanOnRoleRecycle="false" sizeInMB="5120" />
    </LocalResources>
    
  2. Modifique o código de inicialização da sua função para adicionar uma variável de ambiente que aponte para o SnapshotStore recurso local. Para Funções de Trabalho, o código deve ser adicionado ao método da OnStart sua função:

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

    Para Funções Web (ASP.NET), o código deve ser adicionado ao método do Application_Start seu aplicativo Web:

    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. Atualize o arquivo ApplicationInsights.config da sua função para substituir o local da pasta temporária usado porSnapshotCollector

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

Substituindo a pasta Cópia de Sombra

Quando o Snapshot Collector é iniciado, ele tenta encontrar uma pasta no disco que seja adequada para executar o processo do Snapshot Uploader. A pasta escolhida é conhecida como a pasta Shadow Copy.

O Snapshot Collector verifica alguns locais conhecidos, certificando-se de que tem permissões para copiar os binários do Snapshot Uploader. As seguintes variáveis de ambiente são usadas:

  • Fabric_Folder_App_Temp
  • LOCALAPPDATA
  • APPDATA
  • TEMP

Se não for possível encontrar uma pasta adequada, o Snapshot Collector relatará um erro dizendo "Não foi possível encontrar uma pasta de cópia de sombra adequada".

Se a cópia falhar, o Snapshot Collector relatará um ShadowCopyFailed erro.

Se o carregador não puder ser iniciado, o Snapshot Collector reportará um UploaderCannotStartFromShadowCopy erro. O corpo da mensagem geralmente contém System.UnauthorizedAccessException. Este erro geralmente ocorre porque o aplicativo está sendo executado em uma conta com permissões reduzidas. A conta tem permissão para gravar na pasta de cópia de sombra, mas não tem permissão para executar código.

Como esses erros geralmente acontecem durante a inicialização, eles geralmente são seguidos por um ExceptionDuringConnect erro dizendo que o Uploader falhou ao iniciar.

Para contornar esses erros, você pode especificar a pasta de cópia de sombra manualmente através da ShadowCopyFolder opção de configuração. Por exemplo, usando 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>

Ou, se você estiver usando appsettings.json com um aplicativo .NET Core:

{
    "ApplicationInsights": {
        "InstrumentationKey": "<your instrumentation key>"
    },
    "SnapshotCollectorConfiguration": {
        "ShadowCopyFolder": "D:\\SnapshotUploader"
    }
}

Use a pesquisa do Application Insights para encontrar exceções com instantâneos

Quando um snapshot é criado, a exceção de lançamento é marcada com um ID de snapshot. Esse ID de instantâneo é incluído como uma propriedade personalizada quando a exceção é relatada ao Application Insights. Usando a Pesquisa no Application Insights, você pode encontrar todos os registros com a ai.snapshot.id propriedade personalizada.

  1. Navegue até o recurso do Application Insights no portal do Azure.
  2. Selecione Pesquisar.
  3. Digite ai.snapshot.id a caixa de texto Pesquisar e pressione Enter.

Captura de tela mostrando a pesquisa por telemetria com um ID de instantâneo no portal.

Se essa pesquisa não retornar resultados, nenhum instantâneo será relatado ao Application Insights no intervalo de tempo selecionado.

Para procurar um ID de instantâneo específico a partir dos logs do Uploader, digite esse ID na caixa Pesquisar. Se não conseguir encontrar registos para um instantâneo que sabe que foi carregado, siga estes passos:

  1. Verifique se você está olhando para o recurso correto do Application Insights verificando a chave de instrumentação.

  2. Usando o carimbo de data/hora do log do Uploader, ajuste o filtro Intervalo de tempo da pesquisa para cobrir esse intervalo de tempo.

Se você ainda não vir uma exceção com essa ID de instantâneo, o registro de exceção não foi relatado ao Application Insights. Essa situação pode acontecer se seu aplicativo falhou depois de tirar o instantâneo, mas antes de relatar o registro de exceção. Nesse caso, verifique os logs do Serviço de Aplicativo em Diagnose and solve problems para ver se houve reinicializações inesperadas ou exceções sem tratamento.

Editar proxy de rede ou regras de firewall

Se seu aplicativo se conectar à Internet por meio de um proxy ou firewall, talvez seja necessário atualizar as regras para se comunicar com o serviço Depurador de Instantâneo.

Os IPs usados pelo Depurador de Instantâneo do Application Insights estão incluídos na marca de serviço do Azure Monitor. Para obter mais informações, consulte a documentação de etiquetas de serviço.

Há algum custo de faturamento ao usar snapshots?

Não são faturados custos inerentes ao Snapshot Debugger na sua subscrição. Os ficheiros instantâneos recolhidos são armazenados separadamente da telemetria recolhida pelos SDKs do Application Insights e não existem custos para a ingestão ou armazenamento de instantâneos.