Compartilhar via


Solucionar problemas ao habilitar o Depurador de Instantâneos do Application Insights ou ao exibir instantâneos

Se você tiver habilitado o Depurador de Instantâneos do Application Insights no aplicativo, mas não estiver vendo instantâneos em exceções, poderá usar estas instruções para solucionar problemas.

Pode haver vários motivos diferentes para não gerar instantâneos. Você pode começar executando a verificação de integridade do instantâneo para identificar algumas das possíveis causas comuns.

Cenários sem suporte

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

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

Certifique-se de que você está usando o ponto de extremidade do Depurador de Instantâneos do Visual Studio apropriado

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

Para o Serviço de Aplicativo do Azure e aplicativos que usam o Application Insights SDK, você precisa atualizar a Cadeia de conexão usando as substituições suportadas pelo Depurador de Instantâneos do Visual Studio:

Propriedade Cadeia de Conexão Nuvem do governo dos EUA Nuvem da China
SnapshotEndpoint https://snapshot.monitor.azure.us https://snapshot.monitor.azure.cn

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

Para o aplicativo de função, você precisa atualizar o host.json usando as substituições suportadas:

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

Exemplo do host.json atualizado com o ponto de extremidade do agente do US Government Cloud:

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

Use a verificação de integridade do instantâneo

Vários problemas comuns resultam na não exibição do Abrir Instantâneo de Depuração. Usando um Coletor de Instantâneo desatualizado, por exemplo; alcançando o limite de carregamento diário; ou talvez o instantâneo está simplesmente demorando muito para carregar. Use a Verificação de Integridade de Instantâneo para solucionar problemas comuns.

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

Captura de tela mostrando como inserir a verificação de integridade do Snapshot.

A interface interativa, parecida com um bate-papo, procura problemas comuns e orienta você na correção deles.

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

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

Verificar a chave de instrumentação

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

Observação

Em 31 de março de 31, 2025, o suporte à ingestão de chave de instrumentação será encerrado. A ingestão de chave de instrumentação continuará funcionando, mas não forneceremos mais atualizações ou suporte para o recurso. Faça a transição para cadeias de conexão para aproveitar as novas funcionalidades.

Verificar 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âneos do Visual Studio devido à ausência de um protocolo de segurança SSL.

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

Observação

O valor de httpRuntime targetFramework é independente da estrutura de destino usada na criação do aplicativo.

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

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

Observação

A modificação do valor de httpRuntime targetFramework altera as peculiaridades do runtime aplicadas ao aplicativo e pode causar outras alterações sutis de comportamento. Teste o aplicativo cuidadosamente depois de fazer essa alteração. Para obter a lista completa de alterações de compatibilidade, veja Alterações de redirecionamento.

Observação

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

Cenários de sobrecarga do Depurador de Instantâneos

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

No entanto, você poderá experimentar uma pequena sobrecarga de CPU, memória e E/S associada ao Depurador de Instantâneos, como ocorre 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 deve criar um instantâneo adiciona uma pequena sobrecarga de CPU e memória.

  • Se a desotimização estiver habilitada, haverá uma sobrecarga para refazer o JIT do método que gerou a exceção. Isso ocorrerá na próxima vez que o método for executado. Dependendo do tamanho do método, pode levar entre 1 ms e 100 ms de tempo de CPU.

Se o manipulador de exceção 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 gerou 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.

    • Conversão: P50 = 63 s, P90 = 187 s, P95 = 275 s.
    • Envio: P50 = 31 s, P90 = 75 s, P95 = 98 s.

    Isso é feito no Carregador de Instantâneos, que é executado em um processo separado. O processo do Carregador de Instantâneo é executado abaixo da prioridade normal da CPU e usa E/S de baixa prioridade.

    O minidump é gravado primeiro em disco, sendo que a quantidade de espaço de disco utilizada é aproximadamente a mesma do conjunto de trabalho do processo original. Gravar 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 Carregador de Instantâneos. A sobrecarga da CPU, da memória e do disco são proporcionais ao tamanho do instantâneo do processo. O Carregador de Instantâneos processa instantâneos serialmente.

Quando TrackException é chamado:

O Depurador de Instantâneos do Visual Studio verifica se a exceção é nova ou se um snapshot foi criado para ela. Isso adiciona uma pequena sobrecarga à CPU.

Versões preliminares do .NET Core

Se você estiver usando uma versão preliminar do .NET Core ou o 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âneos em outros ambientes.

Verificar a Página de Status da extensão de site dos Serviços de Diagnóstico

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

Observação

A instalação sem código do Depurador de Instantâneos do Application Insights segue a política de suporte do .NET Core. Para mais informações sobre tempos de execução com suporte, consulte a política de suporte do .NET Core.

É possível verificar a Página de Status dessa extensão na URL a seguir: https://{site-name}.scm.azurewebsites.net/DiagnosticServices

Observação

O domínio do link da Página de Status pode variar dependendo da nuvem.

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

É possível usar o site de gerenciamento do Kudu do Serviço de Aplicativo para ver a URL base desta Página de Status:

  1. Abra seu aplicativo de 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 do Kudu, na URL, acrescente o seguinte /DiagnosticServices e pressione Enter. Termina assim: https://<kudu-url>/DiagnosticServices

Atualize para a versão mais recente do pacote NuGet

Com base em como o Depurador de Instantâneos foi habilitado, veja as opções a seguir:

  • Se o Depurador de Instantâneos tiver sido habilitado por meio do painel do Application Insights no portal, o aplicativo já deverá estar executando o pacote NuGet mais recente.

  • Se o Depurador de Instantâneos tiver sido habilitado incluindo o pacote NuGet Microsoft.ApplicationInsights.SnapshotCollector, use o Gerenciador de Pacotes NuGet do Visual Studio para verificar se você está usando a última versão do Microsoft.ApplicationInsights.SnapshotCollector.

Para obter as atualizações e as correções de bugs mais recentes, confira as notas sobre a versão.

Verificar os logs de carregador

Depois que um instantâneo é criado, um arquivo de minidespejo (.dmp) é criado no disco. Um processo separado do carregador cria esse arquivo de minidespejo e o carrega, com quaisquer PDBs associados, para o armazenamento do Depurador de Instantâneos do Application Insights. Após o minidespejo ser carregado com sucesso, ele é excluído do disco. Os arquivos de log do processo de carregador são mantidos em disco. Em um ambiente de Serviço de Aplicativo, você pode encontrar esses logs em 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 de 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ê deverá ver pelo menos um arquivo com um nome que começa com Uploader_ ou SnapshotUploader_ e uma extensão .log. Selecione o ícone apropriado para baixar os arquivos de log ou abri-los em um navegador. O nome do arquivo inclui um sufixo exclusivo que identifica a instância de serviço de aplicativo. Se a instância do Serviço de Aplicativo é hospedada em mais de uma máquina, há arquivos de log separados para cada máquina. Quando o carregador detectar um novo arquivo de minidespejo, ele será registrado no arquivo de log. Aqui está um exemplo de um instantâneo e upload bem-sucedido:

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

Observação

O exemplo anterior é da versão 1.2.0 do Microsoft.ApplicationInsights.SnapshotCollector pacote NuGet. Em versões anteriores, o processo de carregador é 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 minidespejo é associado a um instantâneo com a ID 139e411a23934dc0b9ea08a626db16c5. É possível essa ID mais tarde para localizar o registro de exceção associado na análise do Application Insights.

O carregador examina novos PDBs cerca de uma vez a cada 15 minutos. Veja 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 de carregador estão na mesma pasta que o minidespejo: %TEMP%\Dumps\<ikey> (em que <ikey> é sua chave de instrumentação).

Solucionando problemas dos Serviços de Nuvem

Nos Serviços de Nuvem, a pasta temporária padrão pode ser muito pequena para conter os arquivos de minidespejo, causando a perda de instantâneos.

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

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

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

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

  1. Adicione um novo recurso de local para seu Serviço de Nuvem ao editar o arquivo de definição (.csdef) do Serviço de Nuvem. 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. Modificar o código de inicialização da função para adicionar uma variável de ambiente que aponta para o recurso local SnapshotStore. Para Funções de Trabalho, o código deve ser adicionado ao método OnStart da sua função:

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

    Para Funções da Web (ASP.NET), o código deve ser adicionado ao método Application_Start do 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. Atualizar o arquivo ApplicationInsights.config da função para substituir o local da pasta temporária usada pelo 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>
    

Substituição da pasta de cópia de sombra

Quando é iniciado, o Snapshot Collector tenta encontrar uma pasta no disco que seja adequada para executar o processo do Carregador de instantâneo. A pasta escolhida é conhecida como a pasta de cópia de sombra.

O Snapshot Collector verifica alguns locais bem conhecidos, certificando-se de ter as permissões para copiar os binários do carregador de instantâneos. As variáveis de ambiente a seguir 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 indicando que “Não foi possível localizar uma pasta de cópia de sombra adequada” .

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

Se o carregador não puder ser iniciado, o Snapshot Collector relatará um erro de UploaderCannotStartFromShadowCopy. O corpo da mensagem frequentemente contém System.UnauthorizedAccessException. Esse 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 o código.

Como esses erros geralmente ocorrem durante a inicialização, eles geralmente são seguidos por um ExceptionDuringConnect erro dizendo O carregador falhou ao iniciar.

Para solucionar esses erros, você pode especificar a pasta de cópia de sombra manualmente por meio da opção de configuração ShadowCopyFolder. Por exemplo, usando o 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 estiver usando o appsettings.json com um aplicativo .NET Core:

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

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

Quando um instantâneo é criado, a exceção lançada é marcada com uma ID de instantâneo. A ID do instantâneo é incluída como uma propriedade personalizada quando a exceção é relatada ao Application Insights. Usando a Pesquisa no Application Insights, é possível localizar todos os registros com a propriedade personalizada ai.snapshot.id.

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

Captura de tela mostrando a procura de telemetria com uma ID de instantâneo no portal.

Se essa pesquisa não retornar resultados, nenhum snapshot foi relatado ao Application Insights no intervalo de tempo selecionado.

Para pesquisar uma ID de instantâneo específico dos logs do carregador, digite o ID na caixa de pesquisa. Se você não conseguir localizar registros para um instantâneo que você sabe que foi carregado, siga estas etapas:

  1. Verifique que você está olhando o recurso do Application Insights à direita, verificando a chave de instrumentação.

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

Se você 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 poderá ocorrer se o aplicativo tiver falhado após executar o instantâneo, mas antes de relatar o registro de exceção. Nesse caso, verifique os logs de Serviço de Aplicativo em Diagnose and solve problems para ver se houve reinicializações inesperadas ou exceções sem tratamento.

Editar regras de firewall ou proxy de rede

Se o aplicativo se conectar à Internet por meio de um proxy ou firewall, poderá ser necessário atualizar as regras para permitir a comunicação com o serviço do Depurador de Instantâneos.

Os IPs usados pelo Depurador de Instantâneos do Application Insights estão inclusos na marca de serviço do Azure Monitor. Para saber mais, veja a documentação das Marcas de serviço.

Há custos de cobrança ao usar instantâneos?

Não há encargos em relação à sua assinatura específicos para o Depurador de Instantâneos. Os arquivos de instantâneo coletados são armazenados separadamente da telemetria coletada pelos SDKs do Application Insights e não há encargos para ingestão ou armazenamento de instantâneo.