Controle de dependência no Application Insights
Nota
A documentação a seguir depende da API clássica do Application Insights. O plano de longo prazo para o Application Insights é coletar dados usando OpenTelemetry. Para obter mais informações, consulte Habilitar o Azure Monitor OpenTelemetry para aplicativos .NET, Node.js, Python e Java e nosso OpenTelemetry Roadmap. As diretrizes de migração estão disponíveis para .NET, Node.js e Python.
Uma dependência é um componente chamado pelo seu aplicativo. Normalmente, é 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 e se ela está falhando 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 rastreadas automaticamente
Os SDKs do Application Insights para .NET e .NET Core são fornecidos com DependencyTrackingTelemetryModule
o , que é um módulo de telemetria que coleta automaticamente dependências. Essa coleta de dependência é habilitada automaticamente para aplicativos ASP.NET e ASP.NET Core quando configurada de acordo com os documentos oficiais vinculados. O módulo DependencyTrackingTelemetryModule
é fornecido como o pacote NuGet Microsoft.ApplicationInsights.DependencyCollector. Ele é trazido automaticamente quando você usa o Microsoft.ApplicationInsights.Web
pacote NuGet ou o Microsoft.ApplicationInsights.AspNetCore
pacote NuGet.
Atualmente, DependencyTrackingTelemetryModule
rastreia as seguintes dependências automaticamente:
Dependências | Detalhes |
---|---|
HTTP/HTTPS | Chamadas HTTP/HTTPS locais ou remotas. |
Chamadas WCF | Somente rastreado automaticamente se forem usadas ligações baseadas em HTTP. |
SQL | Chamadas feitas com SqlClient . Consulte a seção Acompanhamento SQL avançado para obter consulta SQL completa para capturar consultas SQL. |
Armazenamento de Blobs do Azure, Armazenamento de Tabela ou Armazenamento de Filas | Chamadas feitas com o cliente de Armazenamento do 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 Azure Service Bus | Use o pacote mais recente: https://nuget.org/packages/Azure.Messaging.ServiceBus. |
BD do Cosmos para o Azure | Rastreado automaticamente se HTTP/HTTPS for usado. O rastreamento de operações no modo direto com TCP também será capturado automaticamente usando o pacote >de visualização = 3.33.0-preview. Para mais detalhes, visite a documentação. |
Se você estiver faltando uma dependência ou usando um SDK diferente, verifique se ela está na lista de dependências coletadas automaticamente. Se a dependência não for coletada automaticamente, você poderá rastreá-la manualmente com uma chamada de dependência de rastreamento.
Configurar o controlo automático de dependências em aplicações de consola
Para controlar automaticamente as dependências dos aplicativos de console .NET, instale o pacote Microsoft.ApplicationInsights.DependencyCollector
NuGet e inicialize DependencyTrackingTelemetryModule
:
DependencyTrackingTelemetryModule depModule = new DependencyTrackingTelemetryModule();
depModule.Initialize(TelemetryConfiguration.Active);
Para aplicativos de console .NET Core, TelemetryConfiguration.Active
está obsoleto. Consulte as orientações na documentação de serviço do Worker 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 instrumentação de código de byte em torno de métodos selecionados. Use
InstrumentationEngine
a partir de ou uma extensão de Aplicativos Web do Serviço deStatusMonitor
Aplicativo do Azure. EventSource
retornos de chamada.DiagnosticSource
retornos de chamada nos SDKs .NET ou .NET Core mais recentes.
Rastreando dependências manualmente
Os seguintes exemplos de dependências, que não são coletadas automaticamente, exigem rastreamento manual:
- O Azure Cosmos DB é rastreado automaticamente somente se HTTP/HTTPS for usado. O modo TCP não será capturado automaticamente pelo Application Insights para versões do SDK anteriores ao
2.22.0-Beta1
. - Redis
Para essas dependências não coletadas automaticamente pelo SDK, você pode rastreá-las manualmente usando a API TrackDependency usada pelos módulos de coleta automática padrão.
Exemplo
Se você criar seu código com um assembly que você mesmo não escreveu, você pode cronometrar todas as chamadas para ele. Este cenário permitir-lhe-ia descobrir qual a sua contribuição para os seus tempos 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, fornece os métodos StartOperation
de extensão e StopOperation
, que podem ser usados para controlar manualmente as dependências, TelemetryClient
conforme mostrado em Rastreamento de dependências de saída.
Se você quiser desativar o módulo de controle de dependência padrão, remova a referência a DependencyTrackingTelemetryModule
em ApplicationInsights.config para ASP.NET aplicativos. Para aplicativos ASP.NET Core, siga as instruções em Application Insights for ASP.NET Core applications.
Rastreie 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 SQL avançado para obter consulta SQL completa
Nota
O Azure Functions requer configurações separadas para habilitar a coleção de texto SQL. Para obter mais informações, consulte 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 arquivo DependencyTelemetry
. Outro campo, chamado dados, pode conter o texto completo da consulta SQL.
Para aplicativos ASP.NET Core, agora é necessário optar pela coleção SQL Text 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 usando o pacote NuGet Microsoft.Data.SqlClient em vez da biblioteca System.Data.SqlClient. As etapas específicas da plataforma para habilitar a coleção completa de Consultas SQL são descritas na tabela a seguir.
Plataforma | Etapas necessárias para obter uma consulta SQL completa |
---|---|
Aplicativos Web no Serviço de Aplicativo do Azure | No painel de controle do aplicativo Web, abra o painel Application Insights e habilite os Comandos SQL em .NET. |
Servidor IIS (Máquinas Virtuais do Azure, no local e assim por diante) | Use o pacote NuGet Microsoft.Data.SqlClient ou use o Application Insights Agent PowerShell Module para instalar o mecanismo de instrumentação e reiniciar o IIS. |
Serviços Cloud do Azure | Adicione 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 específicas da plataforma anteriores, você também deve optar explicitamente por habilitar a coleta de comandos SQL modificando o applicationInsights.config
arquivo com o seguinte código:
<TelemetryModules>
<Add Type="Microsoft.ApplicationInsights.DependencyCollector.DependencyTrackingTelemetryModule, Microsoft.AI.DependencyCollector">
<EnableSqlCommandTextInstrumentation>true</EnableSqlCommandTextInstrumentation>
</Add>
Nos casos anteriores, a maneira correta de validar que o mecanismo de instrumentação está instalado corretamente é validando que a versão SDK do coletado DependencyTelemetry
é rddp
. O uso de ou rddf
indica que as dependências são coletadas via DiagnosticSource
ou EventSource
retornos de rdddsd
chamada, 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 vizinhos.
- O Diagnóstico de Transação mostra dados de servidor unificados e correlacionados.
- A guia Navegadores mostra chamadas AJAX dos navegadores dos usuários.
- Selecione entre solicitações lentas ou com falha para verificar suas chamadas de dependência.
- O Google Analytics pode ser usado para consultar dados de dependência.
Diagnosticar solicitações lentas
Cada evento de solicitação é associado às chamadas de dependência, exceções e outros eventos rastreados durante o processamento da solicitação. Então, se algumas solicitações estão indo mal, você pode descobrir se é por causa de respostas lentas de uma dependência.
Rastreio de solicitações para dependências
Selecione a guia Desempenho à esquerda e selecione a guia Dependências na parte superior.
Selecione um Nome da dependência em Geral. Depois de selecionar uma dependência, um gráfico da distribuição de durações dessa dependência aparece à direita.
Selecione o botão Amostras no canto inferior direito. Em seguida, selecione um exemplo para ver os detalhes da transação de ponta a ponta.
Crie o perfil do seu site ao vivo
O criador de perfil do Application Insights rastreia chamadas HTTP para seu site ativo e mostra as funções em seu código que levaram mais tempo.
Pedidos com falhas
Solicitações com falha também podem estar associadas a chamadas com falha para dependências.
Selecione a guia Falhas à esquerda e, em seguida, selecione a guia Dependências na parte superior.
Aqui você verá a contagem de dependência 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 no canto inferior direito para ver os detalhes da transação de ponta a ponta.
Logs (Analytics)
Você pode rastrear dependências na linguagem de consulta Kusto. Seguem-se alguns exemplos.
Encontre quaisquer chamadas de dependência com falha:
dependencies | where success != "True" | take 10
Encontre chamadas AJAX:
dependencies | where client_Type == "Browser" | take 10
Encontre 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
Encontre chamadas AJAX associadas a visualizações de página:
dependencies | where timestamp > ago(1d) and client_Type == "Browser" | join (browserTimings | where timestamp > ago(1d)) on operation_Id
Perguntas mais frequentes
Esta secção fornece respostas a perguntas comuns.
Como o coletor automático de dependência relata chamadas com falha para dependências?
As chamadas de dependência com falha terão o success
campo definido como False. O módulo DependencyTrackingTelemetryModule
não relata ExceptionTelemetry
. O modelo de dados completo para dependência é descrito em Modelo de dados de telemetria do Application Insights.
Como calculo a latência de ingestão para a minha telemetria de dependência?
Use este código:
dependencies
| extend E2EIngestionLatency = ingestion_time() - timestamp
| extend TimeIngested = ingestion_time()
Como determino a hora em que a chamada de dependência foi iniciada?
Na visualização de consulta do Log Analytics, timestamp
representa o momento em que a chamada TrackDependency() foi iniciada, que ocorre imediatamente após a resposta da chamada de dependência ser recebida. Para calcular a hora em que a chamada de dependência começou, você pegaria e subtrairia timestamp
o registro duration
da chamada de dependência.
O rastreamento de dependência no Application Insights inclui o registro de corpos de resposta?
O controle de dependência no Application Insights não inclui o registro de corpos de resposta, pois geraria muita telemetria para a maioria dos aplicativos.
SDK de código aberto
Como todo SDK do Application Insights, o módulo de coleta de dependência também é de código aberto. Leia e contribua para o código ou relate problemas no repositório oficial do GitHub.
Recolha automática de dependências
Abaixo está a lista atualmente suportada de chamadas de dependência que são detetadas automaticamente como dependências sem exigir qualquer modificação adicional no código do seu aplicativo. Essas dependências são visualizadas nas visualizações Application Insights Application map e Transaction diagnostics . Se sua dependência não estiver na lista abaixo, você ainda poderá rastreá-la manualmente com uma chamada de dependência de rastreamento.
.NET
Estruturas de aplicativos | Versões |
---|---|
ASP.NET Webforms | 4.5+ |
ASP.NET MVC | 4+ |
ASP.NET WebAPI | 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 - última versão estável. (Ver nota abaixo.) |
SDK do Cliente de Hubs de Eventos | 1.1.0 |
SDK do cliente ServiceBus | 7.0.0 |
Clientes de armazenamento | |
ADO.NET | 4.5+ |
Nota
Há um problema conhecido com versões mais antigas do Microsoft.Data.SqlClient. Recomendamos o uso da versão 1.1.0 ou posterior para atenuar esse problema. O Entity Framework Core não é necessariamente fornecido com a versão estável mais recente do Microsoft.Data.SqlClient, portanto, recomendamos confirmar que você está em pelo menos 1.1.0 para evitar esse problema.
Java
Consulte a lista de dependências coletadas automaticamente do Java do Application Insights.
Node.js
Uma lista dos últimos módulos atualmente suportados é mantida aqui.
JavaScript
Bibliotecas de comunicação | Versões |
---|---|
XMLHttpRequest | Todos |
Próximos passos
- Exceções
- Dados do utilizador e da página
- Disponibilidade
- Configure o acompanhamento de dependência personalizado para Java.
- Configure o rastreamento de dependência personalizado para o OpenCensus Python.
- Escrever telemetria de dependência personalizada
- Consulte modelo de dados para tipos e modelo de dados do Application Insights.
- Confira as plataformas suportadas pelo Application Insights.