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
Abaixo, você encontra cenários em que não há suporte para o Snapshot Collector:
Cenário | Efeitos colaterais | Recomendação |
---|---|---|
Quando você usar o SDK do Snapshot Collector no aplicativo diretamente (.csproj) e tiver habilitado a opção avançada "Interop". | O SDK do Application Insights local (incluindo a telemetria do Snapshot Collector) será perdido, portanto, nenhum instantâneo estará disponível. Seu aplicativo pode falhar na inicialização com System.ArgumentException: telemetryProcessorTypedoes not implement ITelemetryProcessor Para obter mais informações sobre o recurso "Interop" do Application Insights, consulte 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 da UX do portal do Azure) |
Verifique se você está usando o ponto de extremidade apropriado do Depurador de Instantâneos
Atualmente, as únicas regiões que exigem modificações do ponto de extremidade são o Azure Governamental e o Microsoft Azure operado pela 21Vianet.
Para os aplicativos e o Serviço de Aplicativo que usam o SDK do Application Insights, você precisa atualizar a cadeia de conexão usando as substituições compatíveis com o Depurador de Instantâneos conforme as definições abaixo:
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.
No Aplicativo de Funções, você precisa atualizar o host.json
usando as substituições compatíveis a seguir:
Propriedade | Nuvem do governo dos EUA | Nuvem da China |
---|---|---|
AgentEndpoint | https://snapshot.monitor.azure.us |
https://snapshot.monitor.azure.cn |
Veja a seguir um exemplo da atualização do host.json
com o ponto de extremidade do agente da Nuvem do Governo dos EUA:
{
"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.
A interface interativa, parecida com um bate-papo, procura problemas comuns e orienta você na correção deles.
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, o aplicativo poderá falhar ao se conectar ao serviço Depurador de Instantâneos 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. O targetFramework
para httpRuntime
deve estar 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 criar um instantâneo adiciona uma sobrecarga muito pequena à CPU e à memória.
- Se a desotimização estiver habilitada, haverá uma sobrecarga para transformar novamente em Just-In-Time o método que gerou a exceção. A sobrecarga será incorrida na próxima vez que esse método for executado. Dependendo do tamanho do método, a sobrecarga poderá variar entre 1 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,3s, P90 = 1,2s, P95 = 1,9s) período durante o qual o thread que lançou a exceção é pausado. Outros threads não são bloqueados.
Converter o instantâneo do processo em um minidump e carregá-lo no Application Insights leva vários minutos.
- Converter: P50 = 63s, P90 = 187s, P95 = 275s.
- Carregar: P50 = 31s, P90 = 75s, P95 = 98s.
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 de CPU, memória e disco gerada para isso está proporcional ao tamanho do instantâneo do processo. O Carregador de Instantâneos processa instantâneos serialmente.
Quando TrackException
é chamado:
O Depurador de Instantâneos verifica se a exceção é nova ou se um instantâneo foi criado para ela. Isso adiciona uma sobrecarga de CPU muito pequena.
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 será igual ao do Serviço de Aplicativo no site de gerenciamento do Kudu. Essa Página de Status mostra o estado de instalação dos agentes do Profiler e do Snapshot Collector. Se ocorrer um erro inesperado, ele será exibido, juntamente com sua correção.
É possível usar o site de gerenciamento do Kudu do Serviço de Aplicativo para ver a URL base desta Página de Status:
- Abra seu aplicativo de Serviço de Aplicativo no portal do Azure.
- Selecione Ferramentas Avançadas ou procure Kudu.
- Selecione Ir.
- Quando você estiver no site de gerenciamento do Kudu, na URL, acrescente o seguinte
/DiagnosticServices
e pressione Enter. Ele terá esta aparência: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, veja 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 êxito, ele será 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.
- Abra seu aplicativo de Serviço de Aplicativo no portal do Azure.
- Selecione Ferramentas Avançadas ou procure Kudu.
- Selecione Ir.
- Na lista suspensa Console de depuração, selecione CMD.
- 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 acima é da versão 1.2.0 do pacote NuGet Microsoft.ApplicationInsights.SnapshotCollector
. 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 o aplicativo usar 1 GB do conjunto de trabalho total, você deverá garantir pelo menos 2 GB de espaço em disco para armazenar os instantâneos.
Siga estas etapas para configurar a função Serviço de Nuvem com um recurso local dedicado para instantâneos.
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>
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étodoOnStart
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 } } }
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 erro ExceptionDuringConnect
indicando que houve "Falha ao iniciar o carregador".
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
.
- Navegue até o recurso do Application Insights no portal do Azure.
- Selecione Pesquisar.
- Digite
ai.snapshot.id
na caixa de texto de pesquisa e pressione Enter.
Se essa pesquisa não apresentar resultados, nenhum instantâneo 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:
Verifique que você está olhando o recurso do Application Insights à direita, verificando a chave de instrumentação.
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.