Acompanhamento de dependências no Application Insights
Cuidado
Recomendamos a Distribuição do OpenTelemetry do Azure Monitor para novos aplicativos ou clientes para impulsionar o Application Insights do Azure Monitor. A Distribuição do OpenTelemetry do Azure Monitor oferece funcionalidade e experiência semelhantes às do SDK do Application Insights. É possível migrar do SDK do Application Insights usando os guias de migração para .NET, Node.js e Python, mas ainda estamos trabalhando para adicionar mais alguns recursos que garantam compatibilidade com versões anteriores.
Uma dependência é um componente chamado pelo seu aplicativo. Normalmente, ele é um serviço chamado usando HTTP, um banco de dados ou um sistema de arquivos. O Application Insights mede a duração das chamadas de dependência, independentemente de ocorrer falha ou não, juntamente com informações, como o nome da dependência. Você pode investigar chamadas de dependência específicas e correlacioná-las a solicitações e exceções.
Dependências acompanhadas automaticamente
Os SDKs do Application Insights para .NET e .NET Core enviados com DependencyTrackingTelemetryModule
, que é um módulo de telemetria que coleta dependências automaticamente. Essa coleção de dependências é habilitada automaticamente para aplicativos do ASP.NET e ASP.NET Core quando configurados de acordo com os documentos oficiais vinculados. O módulo DependencyTrackingTelemetryModule
é enviado como o pacote NuGet Microsoft.ApplicationInsights.DependencyCollector e trazido automaticamente quando você usa o pacote NuGet Microsoft.ApplicationInsights.Web
ou o pacote NuGet Microsoft.ApplicationInsights.AspNetCore
.
No momento, DependencyTrackingTelemetryModule
acompanha as seguintes dependências automaticamente:
Dependências | Detalhes |
---|---|
HTTP/HTTPS | Chamadas HTTP/HTTPS locais ou remotas. |
Chamadas WCF | Somente acompanhadas automaticamente se associações baseadas em HTTP forem usadas. |
SQL | Chamadas feitas com SqlClient . Consulte a seção Acompanhamento avançado do SQL para obter a consulta SQL completa para capturar consultas do SQL. |
Armazenamento de Blobs do Azure, Armazenamento de Tabelas ou Armazenamento de Filas | Chamadas feitas com o cliente do Armazenamento do Microsoft Azure. |
SDK do cliente dos Hubs de Eventos do Azure | Use o pacote mais recente: https://nuget.org/packages/Azure.Messaging.EventHubs. |
SDK do cliente do Barramento de Serviço do Azure | Use o pacote mais recente: https://nuget.org/packages/Azure.Messaging.ServiceBus. |
Azure Cosmos DB | Acompanhado automaticamente se HTTP/HTTPS é usado. O rastreamento de operações no modo direto com TCP é capturado automaticamente usando o pacote de versão prévia >= 3.33.0-preview. Para obter mais detalhes, acesse a documentação. |
Se estiver faltando uma dependência ou você estiver usando um SDK diferente, verifique se ele está na lista de dependências coletadas automaticamente. Se a dependência não for coletada automaticamente, você poderá acompanhá-la manualmente com um comando acompanhar chamada de dependência.
Configurar o acompanhamento automático de dependência em aplicativos de console
Para acompanhar automaticamente as dependências de aplicativos de console do .NET, instale o pacote NuGet Microsoft.ApplicationInsights.DependencyCollector
e inicialize DependencyTrackingTelemetryModule
:
DependencyTrackingTelemetryModule depModule = new DependencyTrackingTelemetryModule();
depModule.Initialize(TelemetryConfiguration.Active);
TelemetryConfiguration.Active
está obsoleto para aplicativos de console do .NET Core. Consulte as diretrizes na Documentação do serviço de trabalho e na Documentação de monitoramento do ASP.NET Core.
Como funciona o monitoramento automático de dependência?
As dependências são coletadas automaticamente usando uma das seguintes técnicas:
- Usando a instrumentação de código de byte em volta dos métodos select. Use
InstrumentationEngine
deStatusMonitor
ou uma extensão de Aplicativos Web do Serviço de Aplicativo do Azure. EventSource
retornos de chamada.DiagnosticSource
retornos de chamada nos SDKs mais recentes do .NET ou do .NET Core.
Como acompanhar dependências manualmente
Veja a seguir exemplos de dependências que não são coletadas automaticamente e exigem acompanhamento manual:
- O Azure Cosmos DB é acompanhado automaticamente somente se HTTP/HTTPS é usado. O modo TCP não será capturado automaticamente pelo Application Insights para versões do SDK anteriores a
2.22.0-Beta1
. - Redis
Para essas dependências não coletadas automaticamente pelo SDK, você pode acompanhá-las manualmente usando a API TrackDependency que é usada pelos módulos de coleção automática padrão.
Exemplo
Se você criar seu código com um assembly que não programou, você pode cronometrar todas as chamadas para ele. Esse cenário permitiria que você descobrisse qual a contribuição dele para o seu tempo de resposta.
Para que esses dados sejam exibidos nos gráficos de dependência no Application Insights, envie-os usando TrackDependency
:
var startTime = DateTime.UtcNow;
var timer = System.Diagnostics.Stopwatch.StartNew();
try
{
// making dependency call
success = dependency.Call();
}
finally
{
timer.Stop();
telemetryClient.TrackDependency("myDependencyType", "myDependencyCall", "myDependencyData", startTime, timer.Elapsed, success);
}
Como alternativa, TelemetryClient
fornece os métodos de extensão StartOperation
e StopOperation
, que podem ser usados para acompanhar manualmente as dependências, conforme mostrado em Rastreamento de dependências de saída.
Se desejar desativar o módulo padrão de acompanhamento de dependência, remova a referência DependencyTrackingTelemetryModule
em ApplicationInsights.config para aplicativos ASP.NET. Para aplicativos ASP.NET Core, siga as instruções no Application Insights para aplicativos ASP.NET Core.
Acompanhar chamadas AJAX de páginas da Web
Para páginas da Web, o SDK JavaScript do Application Insights coleta automaticamente chamadas AJAX como dependências.
Acompanhamento de SQL avançado para obter a consulta SQL completa
Observação
O Azure Functions requer configurações separadas para habilitar a coleta de texto do SQL. Para obter mais informações, confira Habilitar a coleta de consultas SQL.
Para chamadas SQL, o nome do servidor e do banco de dados é sempre coletado e armazenado como o nome do DependencyTelemetry
coletado. Outro campo, chamado dados, pode conter o texto completo da consulta SQL.
Para aplicativos ASP.NET Core, agora é necessário aceitar a coleta de texto SQL usando:
services.ConfigureTelemetryModule<DependencyTrackingTelemetryModule>((module, o) => { module. EnableSqlCommandTextInstrumentation = true; });
Para aplicativos ASP.NET, o texto completo da consulta SQL é coletado com a ajuda da instrumentação de código de byte, que requer o uso do mecanismo de instrumentação ou do pacote NuGet Microsoft.Data.SqlClient em vez da biblioteca System.Data.SqlClient. As etapas específicas da plataforma para habilitar a coleta completa da consulta SQL são descritas na tabela a seguir.
Plataforma | Etapas necessárias para obter a consulta SQL completa |
---|---|
Aplicativos Web no Serviço de Aplicativo do Azure | No painel de controle do aplicativo Web, abra o painel do Application Insights e habilite os Comandos SQL no .NET. |
Servidor IIS (Máquinas Virtuais do Azure, local e assim por diante) | Use o pacote NuGet Microsoft.Data.SqlClient ou o módulo Monitor do PowerShell para o Application Insights Agent para instalar o mecanismo de instrumentação e reiniciar o IIS. |
Serviços de nuvem do Azure | Adicionar uma tarefa de inicialização para instalar o StatusMonitor. Seu aplicativo deve ser integrado ao SDK do ApplicationInsights no momento da compilação instalando pacotes NuGet para aplicativos ASP.NET ou ASP.NET Core. |
IIS Express | Use o pacote NuGet Microsoft.Data.SqlClient. |
WebJobs no Serviço de Aplicativo do Azure | Use o pacote NuGet Microsoft.Data.SqlClient. |
Além das etapas anteriores específicas da plataforma, você também precisa optar explicitamente por habilitar a coleção de comandos SQL modificando o arquivo applicationInsights.config
com o seguinte código:
<TelemetryModules>
<Add Type="Microsoft.ApplicationInsights.DependencyCollector.DependencyTrackingTelemetryModule, Microsoft.AI.DependencyCollector">
<EnableSqlCommandTextInstrumentation>true</EnableSqlCommandTextInstrumentation>
</Add>
Nos casos anteriores, a maneira adequada de confirmar que o mecanismo de instrumentação está instalado corretamente é validando que a versão do SDK do DependencyTelemetry
coletado é rddp
. O uso de rdddsd
ou rddf
indica que as dependências são coletadas por meio de DiagnosticSource
ou retornos de chamada EventSource
, portanto, a consulta SQL completa não será capturada.
Onde encontrar dados de dependência
- O Mapa do Aplicativo visualiza as dependências entre seu aplicativo e os componentes de vizinhança.
- O Diagnóstico de Transação mostra dados de servidor unificados correlacionados.
- A guia Navegadores mostra chamadas AJAX dos navegadores dos seus usuários.
- Selecione dentre as solicitações com falha ou lentas para verificar as chamadas de dependência delas.
- O Analytics pode ser usado para consultar dados de dependência.
Diagnosticar solicitações lentas
Cada evento de solicitação está associado às chamadas de dependência, exceções e outros eventos que são acompanhados durante o processamento da solicitação. Então, se algumas solicitações estão com baixo desempenho, você pode descobrir se é devido à lentidão nas respostas de uma dependência.
Rastreamento de solicitações de dependências
Selecione a guia Desempenho do lado esquerdo e selecione a guia Dependências na parte superior.
Selecione um Nome de Dependência em Geral. Após você selecionar uma dependência, ela mostrará um grafo da distribuição de durações dessa dependência.
Selecione o botão Amostras na parte inferior direita. Em seguida, selecione uma amostra para ver os detalhes da transação de ponta a ponta.
Perfil de seu site ativo
O .NET Profiler rastreia chamadas HTTP para seu site ativo e mostra as funções mais demoradas no seu código.
Solicitações com falha
As solicitações com falha também podem ser associadas a chamadas com falha para as dependências.
Selecione a guia Falhas do lado esquerdo e, a seguir, selecione a guia Dependências na parte superior.
Aqui você verá o número de dependências com falha. Para obter mais informações sobre uma ocorrência com falha, selecione um Nome de Dependência na tabela inferior. Selecione o botão Dependências na parte inferior direita para visualizar os detalhes da transação de ponta a ponta.
Logs (Análise)
Você pode rastrear dependências na linguagem de consulta Kusto. Veja alguns exemplos.
Localize todas as chamadas com falha de dependência:
dependencies | where success != "True" | take 10
Localize as chamadas AJAX:
dependencies | where client_Type == "Browser" | take 10
Localize as chamadas de dependência associadas a solicitações:
dependencies | where timestamp > ago(1d) and client_Type != "Browser" | join (requests | where timestamp > ago(1d)) on operation_Id
Localize as chamadas do AJAX associadas a exibições de página:
dependencies | where timestamp > ago(1d) and client_Type == "Browser" | join (browserTimings | where timestamp > ago(1d)) on operation_Id
Perguntas frequentes
Esta seção fornece respostas para perguntas comuns.
Como o coletor de dependências automáticas reporta chamadas com falha para as dependências?
O campo success
das chamadas de dependência com falha aparece definido como False. O módulo DependencyTrackingTelemetryModule
não relata ExceptionTelemetry
. O modelo de dados completo para dependência é descrito no modelo de dados de telemetria do Application Insights.
Como fazer para calcular a latência de ingestão para minha telemetria de dependência?
Use este código:
dependencies
| extend E2EIngestionLatency = ingestion_time() - timestamp
| extend TimeIngested = ingestion_time()
Como fazer para determinar a hora em que a chamada de dependência foi iniciada?
No modo de exibição da consulta do Log Analytics, timestamp
representa o momento em que a chamada TrackDependency() foi iniciada, o que ocorre imediatamente após o recebimento da resposta da chamada de dependência. Para calcular a hora em que a chamada de dependência começou, você pegaria timestamp
e subtrairia o duration
registrado da chamada de dependência.
O acompanhamento de dependência no Application Insights inclui corpos de resposta de registro em log?
O acompanhamento de dependências no Application Insights não inclui corpos de resposta de registro em log, porque isso geraria um excesso de telemetria para a maioria dos aplicativos.
SDK do código-fonte aberto
Assim como cada SDK do Application Insights, o módulo de coleta de dependência também é de código aberto. Leia e contribua com o código ou relate problemas no repositório oficial do GitHub.
Coleta automática de dependências
Veja abaixo a lista atualmente com suporte de chamadas de dependência que são detectadas automaticamente como dependências sem a necessidade de qualquer modificação adicional no código do aplicativo. Essas dependências são visualizadas nas exibições Mapa do aplicativo e Diagnóstico de transação do Application Insights. Se sua dependência não estiver na lista, você ainda poderá acompanhá-la manualmente com um comando acompanhar chamada de dependência.
.NET
Estruturas do aplicativo | Versões |
---|---|
Web Forms do ASP.NET | 4.5+ |
ASP.NET MVC | 4+ |
ASP.NET Web API | 4.5+ |
ASP.NET Core | 1.1+ |
Bibliotecas de comunicação | |
HttpClient | 4.5+, .NET Core 1.1+ |
SqlClient | .NET Core 1.0+, NuGet 4.3.0 |
Microsoft.Data.SqlClient | 1.1.0 – versão estável mais recente. (Veja a observação a seguir.) |
SDK do Cliente dos Hubs de Eventos | 1.1.0 |
SDK do Cliente do Barramento de Serviço | 7.0.0 |
Clientes de armazenamento | |
ADO.NET | 4.5+ |
Observação
Existe um problema conhecido com versões anteriores do Microsoft.Data.SqlClient. É recomendável usar a 1.1.0 ou posterior para atenuar esse problema. O Entity Framework Core não vêm necessariamente com a versão estável mais recente do Microsoft.Data.SqlClient, portanto, recomendamos confirmar que você tem no mínimo a 1.1.0 para evitar esse problema.
Java
Confira a lista de dependências coletadas automaticamente do Java do Application Insights.
Node.js
Uma lista dos módulos mais recentes com suporte atualmente é mantida aqui.
JavaScript
Bibliotecas de comunicação | Versões |
---|---|
XMLHttpRequest | Tudo |
Próximas etapas
- Exceções
- Dados do usuário e da página
- Disponibilidade
- Configurar o acompanhamento de dependência personalizado para Java.
- Configure o acompanhamento de dependência personalizado para o Python OpenCensus.
- Escrever telemetria de dependência personalizada
- Consulte modelo de dados para modelo de dados e tipos do Application Insights.
- Confira as plataformas com suporte do Application Insights.