Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Atenção
Este artigo se aplica ao Application Insights Java 2.x, que não é mais recomendado.
A documentação para a versão mais recente pode ser encontrada em Application Insights Java 3.x.
Neste artigo, você aprenderá a usar o Application Insights Java 2.x. Este artigo mostra-lhe como:
- Comece e saiba como instrumentar solicitações, controlar dependências, coletar contadores de desempenho, diagnosticar problemas e exceções de desempenho e escrever código para acompanhar o que os usuários fazem com seu aplicativo.
- Envie logs de rastreamento para o Application Insights e explore-os usando o portal do Application Insights.
- Monitore dependências, exceções detetadas e tempos de execução de métodos em aplicativos Web Java.
- Filtre a telemetria em seu aplicativo Web Java.
- Explore as métricas de desempenho do sistema Linux no Application Insights usando
collectd. - Meça métricas para código de aplicativo baseado em Java virtual machine (JVM). Exporte os dados para seus sistemas de monitoramento favoritos usando o monitoramento de aplicativos Micrometer.
Observação
Em 31 de março de 2025, o suporte para a 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.
Introdução ao Application Insights em um projeto Web Java
Nesta seção, você usa o SDK do Application Insights para instrumentar solicitações, controlar dependências, coletar contadores de desempenho, diagnosticar problemas e exceções de desempenho e escrever código para controlar o que os usuários fazem com seu aplicativo.
O Application Insights é um serviço de análise extensível para desenvolvedores da Web que ajuda você a entender o desempenho e o uso do seu aplicativo ao vivo. O Application Insights suporta aplicativos Java executados em Linux, Unix ou Windows.
Pré-requisitos
Precisas:
- Uma conta do Azure com uma assinatura ativa. Você pode criar uma conta gratuitamente.
- Uma aplicação Java funcional.
Obter uma chave de instrumentação do Application Insights
Inicie sessão no portal Azure.
No portal do Azure, crie um recurso do Application Insights. Defina o tipo de aplicativo como aplicativo Web Java.
Encontre a chave de instrumentação do novo recurso. Você precisará colar essa chave em seu projeto de código em breve.
Adicione o SDK do Application Insights para Java ao seu projeto
Escolha o seu tipo de projeto.
Se o seu projeto já estiver configurado para usar o Maven para compilação, mescle o código a seguir ao seu arquivo pom.xml . Em seguida, atualize as dependências do projeto para baixar os binários.
<dependencies>
<dependency>
<groupId>com.microsoft.azure</groupId>
<artifactId>applicationinsights-web-auto</artifactId>
<!-- or applicationinsights-web for manual web filter registration -->
<!-- or applicationinsights-core for bare API -->
<version>2.6.4</version>
</dependency>
</dependencies>
Perguntas frequentes
Qual é a relação entre o
-web-auto,-webe-coreos componentes?-
applicationinsights-web-autofornece métricas que controlam as contagens de solicitações de servlet HTTP e os tempos de resposta registrando automaticamente o filtro de servlet do Application Insights em tempo de execução. -
applicationinsights-webtambém fornece métricas que rastreiam contagens de solicitações de servlet HTTP e tempos de resposta. Mas o registro manual do filtro de servlet do Application Insights em seu aplicativo é necessário. -
applicationinsights-corefornece a API básica, por exemplo, se a sua aplicação não for baseada em servlet.
-
Como devo atualizar o SDK para a versão mais recente?
- A partir de novembro de 2020, para monitorar aplicativos Java, recomendamos o uso do Application Insights Java 3.x. Para obter mais informações sobre como começar, consulte Application Insights Java 3.x.
Adicionar um ficheiro ApplicationInsights.xml
Adicione ApplicationInsights.xml à pasta de recursos em seu projeto ou certifique-se de que ele foi adicionado ao caminho da classe de implantação do projeto. Copie o seguinte XML para dentro.
Substitua a chave de instrumentação pela que você obteve do portal do Azure.
<?xml version="1.0" encoding="utf-8"?>
<ApplicationInsights xmlns="http://schemas.microsoft.com/ApplicationInsights/2013/Settings" schemaVersion="2014-05-30">
<!-- The key from the portal: -->
<InstrumentationKey>** Your instrumentation key **</InstrumentationKey>
<!-- HTTP request component (not required for bare API) -->
<TelemetryModules>
<Add type="com.microsoft.applicationinsights.web.extensibility.modules.WebRequestTrackingTelemetryModule"/>
<Add type="com.microsoft.applicationinsights.web.extensibility.modules.WebSessionTrackingTelemetryModule"/>
<Add type="com.microsoft.applicationinsights.web.extensibility.modules.WebUserTrackingTelemetryModule"/>
</TelemetryModules>
<!-- Events correlation (not required for bare API) -->
<!-- These initializers add context data to each event -->
<TelemetryInitializers>
<Add type="com.microsoft.applicationinsights.web.extensibility.initializers.WebOperationIdTelemetryInitializer"/>
<Add type="com.microsoft.applicationinsights.web.extensibility.initializers.WebOperationNameTelemetryInitializer"/>
<Add type="com.microsoft.applicationinsights.web.extensibility.initializers.WebSessionTelemetryInitializer"/>
<Add type="com.microsoft.applicationinsights.web.extensibility.initializers.WebUserTelemetryInitializer"/>
<Add type="com.microsoft.applicationinsights.web.extensibility.initializers.WebUserAgentTelemetryInitializer"/>
</TelemetryInitializers>
</ApplicationInsights>
Opcionalmente, o arquivo de configuração pode estar em qualquer local acessível ao seu aplicativo. A propriedade -Dapplicationinsights.configurationDirectory system especifica o diretório que contém ApplicationInsights.xml. Por exemplo, um arquivo de configuração localizado em E:\myconfigs\appinsights\ApplicationInsights.xml seria configurado com a propriedade -Dapplicationinsights.configurationDirectory="E:\myconfigs\appinsights".
- A chave de instrumentação é enviada junto com cada item de telemetria e instrui o Application Insights a exibi-la no seu recurso.
- O componente Solicitação HTTP é opcional. Ele envia automaticamente telemetria sobre solicitações e tempos de resposta para o portal.
- A correlação de eventos é uma adição ao componente de solicitação HTTP. Ele atribui um identificador a cada solicitação recebida pelo servidor. Em seguida, ele adiciona esse identificador como uma propriedade a cada item de telemetria como a propriedade
Operation.Id. Ele permite correlacionar a telemetria associada a cada solicitação definindo um filtro na Pesquisa de diagnóstico.
Formas alternativas de definir a chave de instrumentação
O SDK do Application Insights procura a chave nesta ordem:
- Propriedade do sistema: -DAPPINSIGHTS_INSTRUMENTATIONKEY=your_ikey
- Variável de ambiente: APPINSIGHTS_INSTRUMENTATIONKEY
- Arquivo de configuração: ApplicationInsights.xml
Você também pode defini-lo em código:
String instrumentationKey = "00000000-0000-0000-0000-000000000000";
if (instrumentationKey != null)
{
TelemetryConfiguration.getActive().setInstrumentationKey(instrumentationKey);
}
Adicionar agente
Instale o agente Java para capturar chamadas HTTP de saída, consultas JDBC, registro em log de aplicativos e melhor nomenclatura de operações.
Execute seu aplicativo
Execute-o no modo de depuração em sua máquina de desenvolvimento ou publique-o em seu servidor.
Visualizar a sua telemetria no Application Insights
Retorne ao seu recurso do Application Insights no portal do Azure.
Os dados de solicitações HTTP aparecem no painel de visão geral. Se não estiver lá, aguarde alguns segundos e selecione Atualizar.
Saiba mais sobre métricas.
Clique em qualquer gráfico para ver métricas agregadas mais detalhadas.
Dados da instância
Clique em um tipo de solicitação específico para ver instâncias individuais.
Log Analytics: Linguagem de consulta poderosa
À medida que acumula mais dados, você pode executar consultas para agregar dados e localizar instâncias individuais. O Log Analytics é uma ferramenta poderosa para entender o desempenho e o uso, e para fins de diagnóstico.
Instale seu aplicativo no servidor
Agora publique seu aplicativo no servidor, permita que as pessoas o usem e veja a telemetria aparecer no portal.
Verifique se o firewall permite que seu aplicativo envie telemetria para estas portas:
- dc.services.visualstudio.com:443
- f5.services.visualstudio.com:443
Se o tráfego de saída tiver de ser encaminhado através de uma firewall, defina as propriedades
http.proxyHostdo sistema ehttp.proxyPort.Em servidores Windows, instale:
Microsoft Visual C++ Redistribuível
Este componente habilita contadores de desempenho.
Serviço de Aplicativo do Azure, Serviço Kubernetes do Azure, configuração de VMs
A melhor e mais fácil abordagem para monitorar seus aplicativos em execução em qualquer provedor de recursos do Azure é usar o Application Insights Java 3.x.
Exceções e falhas de solicitação
Exceções não tratadas e falhas de solicitação são coletadas automaticamente pelo filtro da Web do Application Insights.
Para coletar dados sobre outras exceções, você pode inserir chamadas para trackException() em seu código.
Monitorar chamadas de método e dependências externas
Instale o agente Java para registrar métodos internos especificados e chamadas feitas por meio do JDBC, com dados de temporização e para nomeação automática de operações.
Rastreio distribuído W3C
O SDK Java do Application Insights agora suporta rastreamento distribuído W3C.
A configuração do SDK de entrada é explicada mais detalhadamente em Correlação de telemetria no Application Insights.
A configuração do SDK de saída é definida no arquivo AI-Agent.xml .
Contadores de desempenho
Selecione Investigar>métricas para ver uma variedade de contadores de desempenho.
Personalizar a coleção do contador de desempenho
Para desativar a coleção do conjunto padrão de contadores de desempenho, adicione o seguinte código sob o nó raiz do arquivo ApplicationInsights.xml :
<PerformanceCounters>
<UseBuiltIn>False</UseBuiltIn>
</PerformanceCounters>
Colete mais contadores de desempenho
Você pode especificar mais contadores de desempenho a serem coletados.
Contadores JMX (expostos pela máquina virtual Java)
<PerformanceCounters>
<Jmx>
<Add objectName="java.lang:type=ClassLoading" attribute="TotalLoadedClassCount" displayName="Loaded Class Count"/>
<Add objectName="java.lang:type=Memory" attribute="HeapMemoryUsage.used" displayName="Heap Memory Usage-used" type="composite"/>
</Jmx>
</PerformanceCounters>
-
displayName: O nome exibido no portal do Application Insights. -
objectName: O nome do objeto JMX. -
attribute: O atributo do nome do objeto JMX a ser buscado. -
type(opcional): O tipo de atributo do objeto JMX:- Padrão: um tipo simples, como int ou long.
-
composite: Os dados do contador perf estão no formato deAttribute.Data. -
tabular: Os dados do contador perf estão no formato de uma linha de tabela.
Contadores de desempenho do Windows
Cada contador de desempenho do Windows é membro de uma categoria (da mesma forma que um campo é membro de uma classe). As categorias podem ser globais ou ter instâncias numeradas ou nomeadas.
<PerformanceCounters>
<Windows>
<Add displayName="Process User Time" categoryName="Process" counterName="%User Time" instanceName="__SELF__" />
<Add displayName="Bytes Printed per Second" categoryName="Print Queue" counterName="Bytes Printed/sec" instanceName="Fax" />
</Windows>
</PerformanceCounters>
-
displayName: O nome exibido no portal do Application Insights. -
categoryName: A categoria do contador de desempenho (objeto de desempenho) à qual esse contador de desempenho está associado. -
counterName: O nome do contador de desempenho. -
instanceName: O nome da instância de categoria do contador de desempenho ou uma cadeia de caracteres vazia (""), se a categoria contiver uma única instância. SecategoryNameforProcesse o contador de desempenho que você deseja coletar for do processo JVM atual no qual seu aplicativo está sendo executado, especifique"__SELF__".
Contadores de desempenho Unix
Instale o collectd com o plug-in Application Insights para obter uma ampla variedade de dados do sistema e da rede.
Obter dados de usuário e sessão
Agora você está enviando telemetria do seu servidor Web. Para obter a visão completa de 360 graus do seu aplicativo, você pode adicionar mais monitoramento:
- Adicione telemetria às suas páginas da Web para monitorar visualizações de página e métricas do usuário.
- Configure testes da Web para garantir que seu aplicativo permaneça ativo e responsivo.
Envie a sua própria telemetria
Agora que você instalou o SDK, pode usar a API para enviar sua própria telemetria:
- Acompanhe eventos e métricas personalizados para saber o que os usuários estão fazendo com seu aplicativo.
- Pesquise eventos e logs para ajudar a diagnosticar problemas.
Testes da Web de disponibilidade
O Application Insights pode testar seu site em intervalos regulares para verificar se ele está ativo e respondendo bem.
Saiba mais sobre como configurar testes da Web de disponibilidade.
Solução de problemas
Consulte o artigo dedicado à resolução de problemas.
Testar a conectividade entre o host do aplicativo e o serviço de ingestão
SDKs e agentes do Application Insights enviam telemetria, que é processada como chamadas REST para os nossos endpoints de ingestão. Pode testar a conectividade entre o seu servidor web ou a máquina anfitriã da aplicação e os pontos de extremidade do serviço de ingestão, utilizando clientes REST de baixo nível através de comandos PowerShell ou curl. Consulte Resolução de problemas de telemetria de aplicações ausentes no Azure Monitor Application Insights.
Explore os logs de rastreamento Java no Application Insights
Se você estiver usando Logback ou Log4J (v1.2 ou v2.0) para rastreamento, poderá ter seus logs de rastreamento enviados automaticamente para o Application Insights, onde poderá explorá-los e pesquisá-los.
Sugestão
Você precisa definir sua chave de instrumentação do Application Insights apenas uma vez para seu aplicativo. Se você estiver usando uma estrutura como o Java Spring, talvez já tenha registrado a chave em outro lugar na configuração do seu aplicativo.
Usar o agente Java do Application Insights
Por padrão, o agente Java do Application Insights captura automaticamente os eventos de log realizados no nível WARN e acima.
Você pode alterar o limite de registro em log capturado usando o arquivo AI-Agent.xml :
<?xml version="1.0" encoding="utf-8"?>
<ApplicationInsightsAgent>
<Instrumentation>
<BuiltIn>
<Logging threshold="info"/>
</BuiltIn>
</Instrumentation>
</ApplicationInsightsAgent>
Você pode desativar a captura de log do agente Java usando o arquivo AI-Agent.xml :
<?xml version="1.0" encoding="utf-8"?>
<ApplicationInsightsAgent>
<Instrumentation>
<BuiltIn>
<Logging enabled="false"/>
</BuiltIn>
</Instrumentation>
</ApplicationInsightsAgent>
Alternatives
Em vez de usar o agente Java, você pode seguir estas instruções.
Instalar o Java SDK
Siga as instruções para instalar o SDK do Application Insights para Java, se ainda não tiver feito isso.
Adicionar bibliotecas de log ao seu projeto
Escolha a forma adequada para o seu projeto.
Maven
Se o seu projeto já estiver configurado para usar o Maven para compilação, mescle um dos seguintes trechos de código em seu arquivo pom.xml . Em seguida, atualize as dependências do projeto para baixar os binários.
Registo
<dependencies>
<dependency>
<groupId>com.microsoft.azure</groupId>
<artifactId>applicationinsights-logging-logback</artifactId>
<version>[2.0,)</version>
</dependency>
</dependencies>
Log4J v2.0
<dependencies>
<dependency>
<groupId>com.microsoft.azure</groupId>
<artifactId>applicationinsights-logging-log4j2</artifactId>
<version>[2.0,)</version>
</dependency>
</dependencies>
Log4J v1.2
<dependencies>
<dependency>
<groupId>com.microsoft.azure</groupId>
<artifactId>applicationinsights-logging-log4j1_2</artifactId>
<version>[2.0,)</version>
</dependency>
</dependencies>
Gradle
Se o seu projeto já estiver configurado para usar o dependencies Gradle para compilação, adicione uma das seguintes linhas ao grupo no arquivo build.gradle . Em seguida, atualize as dependências do projeto para baixar os binários.
Registo
compile group: 'com.microsoft.azure', name: 'applicationinsights-logging-logback', version: '2.0.+'
Log4J v2.0
compile group: 'com.microsoft.azure', name: 'applicationinsights-logging-log4j2', version: '2.0.+'
Log4J v1.2
compile group: 'com.microsoft.azure', name: 'applicationinsights-logging-log4j1_2', version: '2.0.+'
Utilize o link do jar
Siga as diretrizes para instalar manualmente o SDK Java do Application Insights e fazer o download do jar. Na página Maven Central, selecione o jar link na seção de download para o apêndice apropriado. Adicione o jar do apêndice baixado ao projeto.
| Logger | Baixar | Biblioteca |
|---|---|---|
| Registo | Appender Jar do Logback | applicationinsights-logging-logback |
| Log4J v2.0 | Log4J v2 appender Jar | applicationinsights-logging-log4j2 |
| Log4j v1.2 | Log4J v1.2 appender Jar | applicationinsights-logging-log4j1_2 |
Adicionar o appender ao seu framework de log
Para começar a obter rastreamentos, mescle o trecho de código relevante no arquivo de configuração Logback ou Log4J.
Registo
<appender name="aiAppender"
class="com.microsoft.applicationinsights.logback.ApplicationInsightsAppender">
<instrumentationKey>[APPLICATION_INSIGHTS_KEY]</instrumentationKey>
</appender>
<root level="trace">
<appender-ref ref="aiAppender" />
</root>
Log4J v2.0
<Configuration packages="com.microsoft.applicationinsights.log4j.v2">
<Appenders>
<ApplicationInsightsAppender name="aiAppender" instrumentationKey="[APPLICATION_INSIGHTS_KEY]" />
</Appenders>
<Loggers>
<Root level="trace">
<AppenderRef ref="aiAppender"/>
</Root>
</Loggers>
</Configuration>
Log4J v1.2
<appender name="aiAppender"
class="com.microsoft.applicationinsights.log4j.v1_2.ApplicationInsightsAppender">
<param name="instrumentationKey" value="[APPLICATION_INSIGHTS_KEY]" />
</appender>
<root>
<priority value ="trace" />
<appender-ref ref="aiAppender" />
</root>
Os apêndices do Application Insights podem ser referenciados por qualquer logger configurado e não necessariamente pelo registrador raiz, como mostrado nos exemplos de código anteriores.
Explore as suas traces no portal de Application Insights
Agora que você configurou seu projeto para enviar rastreamentos para o Application Insights, você pode exibir e pesquisar esses rastreamentos no portal do Application Insights no painel Pesquisar .
As exceções enviadas via registradores serão exibidas no portal como telemetria de exceção .
Monitore dependências, exceções detetadas e tempos de execução de métodos em aplicativos Web Java
Se você instrumentou seu aplicativo Web Java com o SDK do Application Insights, pode usar o agente Java para obter insights mais profundos, sem alterações de código:
Dependências: dados sobre chamadas que seu aplicativo faz para outros componentes, incluindo:
-
Chamadas HTTP de saída: chamadas feitas via
Apache HttpClient,OkHttpejava.net.HttpURLConnectionsão capturadas. - Chamadas Redis: As chamadas feitas via o cliente Jedis são capturadas.
- Consultas JDBC: Para MySQL e PostgreSQL, se a chamada demorar mais de 10 segundos, o agente relata o plano de consulta.
-
Chamadas HTTP de saída: chamadas feitas via
Logging de Aplicações: capture e correlacione os seus logs de aplicações com pedidos HTTP e outra telemetria:
- Log4j 1,2
- Log4j2
- Registo
Melhor nomenclatura da operação: Usado para agregação de solicitações no portal.
-
Primavera: baseado em
@RequestMapping. -
JAX-RS: Baseado em
@Path.
-
Primavera: baseado em
Para usar o agente Java, instale-o no servidor. Seus aplicativos Web devem ser instrumentados com o SDK Java do Application Insights.
Instalar o agente do Application Insights para Java
Na máquina que executa o servidor Java, faça o download do agente 2.x. Verifique se a versão do agente Java 2.x que você usa corresponde à versão do SDK Java do Application Insights 2.x que você usa.
Edite o script de inicialização do servidor de aplicativos e adicione o seguinte argumento JVM:
-javaagent:<full path to the agent JAR file>Por exemplo, no Tomcat em uma máquina Linux:
export JAVA_OPTS="$JAVA_OPTS -javaagent:<full path to agent JAR file>"Reinicie o servidor de aplicativos.
Configurar o agente
Crie um arquivo chamado AI-Agent.xml e coloque-o na mesma pasta que o arquivo jar do agente.
Defina o conteúdo do arquivo XML. Edite o exemplo a seguir para incluir ou omitir os recursos desejados.
<?xml version="1.0" encoding="utf-8"?>
<ApplicationInsightsAgent>
<Instrumentation>
<BuiltIn enabled="true">
<!-- capture logging via Log4j 1.2, Log4j2, and Logback, default is true -->
<Logging enabled="true" />
<!-- capture outgoing HTTP calls performed through Apache HttpClient, OkHttp,
and java.net.HttpURLConnection, default is true -->
<HTTP enabled="true" />
<!-- capture JDBC queries, default is true -->
<JDBC enabled="true" />
<!-- capture Redis calls, default is true -->
<Jedis enabled="true" />
<!-- capture query plans for JDBC queries that exceed this value (MySQL, PostgreSQL),
default is 10000 milliseconds -->
<MaxStatementQueryLimitInMS>1000</MaxStatementQueryLimitInMS>
</BuiltIn>
</Instrumentation>
</ApplicationInsightsAgent>
Mais configurações (Spring Boot)
java -javaagent:/path/to/agent.jar -jar path/to/TestApp.jar
Para o Serviço de Aplicativo do Azure, siga estas etapas:
Selecione Configurações>Configurações do aplicativo.
Em Configurações do aplicativo, adicione um novo par de valores de chave:
-
Chave:
JAVA_OPTS -
Valor:
-javaagent:D:/home/site/wwwroot/applicationinsights-agent-2.6.4.jar
O agente deve ser empacotado como um recurso em seu projeto para que ele acabe no diretório D:/home/site/wwwroot/ . Para confirmar se o seu agente está no diretório correto do Serviço de Aplicativo, vá para Ferramentas de Desenvolvimento> Ferramentas Avançadas>Console de Depuração e examine o conteúdo do diretório do site.
-
Chave:
Salve as configurações e reinicie seu aplicativo. Estes passos aplicam-se apenas aos serviços de aplicações em execução no Windows.
Observação
AI-Agent.xml e o arquivo JAR do agente devem estar na mesma pasta. Eles geralmente são colocados juntos na pasta /resources do projeto.
Ativar o rastreamento distribuído do W3C
Adicione o seguinte trecho ao AI-Agent.xml:
<Instrumentation>
<BuiltIn enabled="true">
<HTTP enabled="true" W3C="true" enableW3CBackCompat="true"/>
</BuiltIn>
</Instrumentation>
Observação
O modo de compatibilidade com versões anteriores está ativado por padrão. O enableW3CBackCompat parâmetro é opcional e deve ser usado apenas quando você quiser desativá-lo.
Idealmente, este seria o caso quando todos os seus serviços foram atualizados para versões mais recentes de SDKs que suportam o protocolo W3C. Recomendamos que você mude para versões mais recentes de SDKs com suporte a W3C o mais rápido possível.
Certifique-se de que as configurações de entrada e saída (agente) são exatamente as mesmas.
Ver os dados
No recurso Application Insights, a dependência remota agregada e os tempos de execução do método aparecem no bloco Desempenho.
Para pesquisar instâncias individuais de relatórios de dependência, exceção e método, abra Pesquisar.
Saiba mais sobre como diagnosticar problemas de dependência.
Dúvidas ou problemas?
Use os seguintes recursos:
- Sem dados? Defina exceções de firewall.
- Solucione problemas de Java.
Filtrar telemetria em seu aplicativo Web Java
Os filtros fornecem uma maneira de selecionar a telemetria que seu aplicativo Web Java envia para o Application Insights. Existem alguns filtros prontos para uso que você pode usar. Você também pode escrever seus próprios filtros personalizados.
Os filtros prontos para uso incluem:
- Nível de severidade do rastreio.
- URLs específicos, palavras-chave ou códigos de resposta.
- Respostas rápidas. Em outras palavras, solicitações às quais seu aplicativo respondeu rapidamente.
- Nomes de eventos específicos.
Observação
Os filtros distorcem as métricas do seu aplicativo. Por exemplo, você pode decidir que, para diagnosticar respostas lentas, você definirá um filtro para descartar tempos de resposta rápidos. Mas você deve estar ciente de que os tempos médios de resposta relatados pelo Application Insights serão mais lentos do que a velocidade real. Além disso, a contagem de solicitações será menor do que a contagem real.
Se isso for um problema, use Amostragem .
Definir filtros
No ApplicationInsights.xml, adicione uma TelemetryProcessors seção como este exemplo:
<ApplicationInsights>
<TelemetryProcessors>
<BuiltInProcessors>
<Processor type="TraceTelemetryFilter">
<Add name="FromSeverityLevel" value="ERROR"/>
</Processor>
<Processor type="RequestTelemetryFilter">
<Add name="MinimumDurationInMS" value="100"/>
<Add name="NotNeededResponseCodes" value="200-400"/>
</Processor>
<Processor type="PageViewTelemetryFilter">
<Add name="DurationThresholdInMS" value="100"/>
<Add name="NotNeededNames" value="home,index"/>
<Add name="NotNeededUrls" value=".jpg,.css"/>
</Processor>
<Processor type="TelemetryEventFilter">
<!-- Names of events we don't want to see -->
<Add name="NotNeededNames" value="Start,Stop,Pause"/>
</Processor>
<!-- Exclude telemetry from availability tests and bots -->
<Processor type="SyntheticSourceFilter">
<!-- Optional: specify which synthetic sources,
comma-separated
- default is all synthetics -->
<Add name="NotNeededSources" value="Application Insights Availability Monitoring,BingPreview"
</Processor>
</BuiltInProcessors>
<CustomProcessors>
<Processor type="com.fabrikam.MyFilter">
<Add name="Successful" value="false"/>
</Processor>
</CustomProcessors>
</TelemetryProcessors>
</ApplicationInsights>
Inspecione o conjunto completo de processadores integrados.
Filtros incorporados
Esta seção discute os filtros internos disponíveis.
Filtro de Telemetria Métrica
<Processor type="MetricTelemetryFilter">
<Add name="NotNeeded" value="metric1,metric2"/>
</Processor>
-
NotNeeded: Lista separada por vírgulas de nomes de métricas personalizadas
Filtro de Telemetria de Visualização de Página
<Processor type="PageViewTelemetryFilter">
<Add name="DurationThresholdInMS" value="500"/>
<Add name="NotNeededNames" value="page1,page2"/>
<Add name="NotNeededUrls" value="url1,url2"/>
</Processor>
-
DurationThresholdInMS: Duração refere-se ao tempo necessário para carregar a página. Se esse parâmetro for definido, as páginas carregadas mais rápido do que esse tempo não serão relatadas. -
NotNeededNames: Lista de nomes de página separados por vírgula. -
NotNeededUrls: Lista separada por vírgulas de fragmentos de URL. Por exemplo,"home"filtra todas as páginas que têm "home" no URL.
Solicitar filtro de Telemetria
<Processor type="RequestTelemetryFilter">
<Add name="MinimumDurationInMS" value="500"/>
<Add name="NotNeededResponseCodes" value="page1,page2"/>
<Add name="NotNeededUrls" value="url1,url2"/>
</Processor>
Filtro de fonte sintética
Filtra toda a telemetria que tenha valores na propriedade SyntheticSource. Solicitações de bots, spiders e testes de disponibilidade estão incluídas.
Filtra a telemetria para todas as solicitações sintéticas:
<Processor type="SyntheticSourceFilter" />
Filtra a telemetria para fontes sintéticas específicas:
<Processor type="SyntheticSourceFilter" >
<Add name="NotNeeded" value="source1,source2"/>
</Processor>
-
NotNeeded: Lista separada por vírgulas de nomes de fontes sintéticas
Filtro de Eventos de Telemetria
Filtra eventos personalizados que foram registrados usando TrackEvent():
<Processor type="TelemetryEventFilter" >
<Add name="NotNeededNames" value="event1, event2"/>
</Processor>
-
NotNeededNames: Lista de nomes de eventos separados por vírgulas
Filtro de Telemetria de Rastreio
Filtra rastreamentos de log registrados usando TrackTrace() ou um coletor de estrutura de log:
<Processor type="TraceTelemetryFilter">
<Add name="FromSeverityLevel" value="ERROR"/>
</Processor>
Os
FromSeverityLevelvalores válidos são:- OFF: Filtra todos os vestígios.
- TRACE: Sem filtragem. É igual ao nível TRACE.
- INFO: Filtra o nível TRACE.
- AVISO: Exclui TRACE e INFO.
- ERRO: Filtra WARN (AVISO), INFO (INFORMAÇÃO) e TRACE (RASTREIO).
- CRITICAL: Filtra tudo, exceto CRITICAL.
Filtros personalizados
As seções a seguir mostram as etapas para criar seus próprios filtros personalizados.
Codifique o seu filtro
Em seu código, crie uma classe que implemente TelemetryProcessor:
package com.fabrikam.MyFilter;
import com.microsoft.applicationinsights.extensibility.TelemetryProcessor;
import com.microsoft.applicationinsights.telemetry.Telemetry;
public class SuccessFilter implements TelemetryProcessor {
/* Any parameters that are required to support the filter.*/
private final String successful;
/* Initializers for the parameters, named "setParameterName" */
public void setNotNeeded(String successful)
{
this.successful = successful;
}
/* This method is called for each item of telemetry to be sent.
Return false to discard it.
Return true to allow other processors to inspect it. */
@Override
public boolean process(Telemetry telemetry) {
if (telemetry == null) { return true; }
if (telemetry instanceof RequestTelemetry)
{
RequestTelemetry requestTelemetry = (RequestTelemetry) telemetry;
return request.getSuccess() == successful;
}
return true;
}
}
Invoque seu filtro no arquivo de configuração
Agora, em ApplicationInsights.xml:
<ApplicationInsights>
<TelemetryProcessors>
<CustomProcessors>
<Processor type="com.fabrikam.SuccessFilter">
<Add name="Successful" value="false"/>
</Processor>
</CustomProcessors>
</TelemetryProcessors>
</ApplicationInsights>
Invoque seu filtro (Java Spring)
Para aplicativos baseados na estrutura Spring, os processadores de telemetria personalizados devem ser registrados em sua classe de aplicativo principal como um bean. Eles serão conectados automaticamente quando o aplicativo for iniciado.
@Bean
public TelemetryProcessor successFilter() {
return new SuccessFilter();
}
Você cria seus próprios parâmetros de filtro no application.properties. Em seguida, você usa a estrutura de configuração externalizada do Spring Boot para passar esses parâmetros para seu filtro personalizado.
Solução de problemas
Esta seção oferece uma dica de solução de problemas.
O meu filtro não está a funcionar
Verifique se você forneceu valores de parâmetros válidos. Por exemplo, as durações devem ser inteiras. Valores inválidos farão com que o filtro seja ignorado. Se o filtro personalizado lançar uma exceção de um construtor ou método definido, ele será ignorado.
collectd: métricas de desempenho do Linux no Application Insights (descontinuado)
Para explorar as métricas de desempenho do sistema Linux no Application Insights, instale o collectd junto com o seu plug-in para o Application Insights. Esta solução de código aberto reúne várias estatísticas do sistema e da rede.
Normalmente, você usará collectd se já tiver instrumentado seu serviço Web Java com o Application Insights. Ele fornece mais dados para ajudá-lo a melhorar o desempenho do seu aplicativo ou diagnosticar problemas.
Obtenha a sua chave de instrumentação
No portal do Azure, abra o recurso do Application Insights onde você deseja que os dados apareçam. Ou, você pode criar um novo recurso.
Faça uma cópia da Chave de Instrumentação, que identifica o recurso.
Instalação coletada e o plug-in
Em suas máquinas de servidor Linux:
- Instale collectd versão 5.4.0 ou posterior.
- Baixe o plug-in do gravador coletado do Application Insights. Anote o número da versão.
- Copie o ficheiro JAR do plug-in para
/usr/share/collectd/java. - Editar
/etc/collectd/collectd.conf:Certifique-se de que o plug-in Java está ativado.
Atualize o JVMArg para o
java.class.path, incluindo o seguinte arquivo jar. Atualize o número da versão para corresponder ao que você baixou:/usr/share/collectd/java/applicationinsights-collectd-1.0.5.jar
Adicione este trecho usando a chave de instrumentação do seu recurso:
LoadPlugin "com.microsoft.applicationinsights.collectd.ApplicationInsightsWriter" <Plugin ApplicationInsightsWriter> InstrumentationKey "Your key" </Plugin>Aqui está parte de um arquivo de configuração de exemplo:
... # collectd plugins LoadPlugin cpu LoadPlugin disk LoadPlugin load ... # Enable Java Plugin LoadPlugin "java" # Configure Java Plugin <Plugin "java"> JVMArg "-verbose:jni" JVMArg "-Djava.class.path=/usr/share/collectd/java/applicationinsights-collectd-1.0.5.jar:/usr/share/collectd/java/collectd-api.jar" # Enabling Application Insights plugin LoadPlugin "com.microsoft.applicationinsights.collectd.ApplicationInsightsWriter" # Configuring Application Insights plugin <Plugin ApplicationInsightsWriter> InstrumentationKey "12345678-1234-1234-1234-123456781234" </Plugin> # Other plugin configurations ... ... </Plugin> ...
Configure outros plug-ins do collectd, que podem recolher vários dados de diferentes fontes.
Reinicie collectd de acordo com o manual.
Exibir os dados no Application Insights
No recurso do Application Insights, abra Métricas e adicione gráficos. Selecione as métricas que deseja ver na categoria Personalizado .
Por padrão, as métricas são agregadas em todas as máquinas host das quais as métricas foram coletadas. Para exibir as métricas por host, no painel Detalhes do gráfico , ative Agrupamento e escolha agrupar por CollectD-Host.
Excluir o carregamento de estatísticas específicas
Por padrão, o plug-in do Application Insights envia todos os dados coletados por todos os plug-ins habilitados collectd read .
Para excluir dados de plug-ins ou fontes de dados específicos:
Edite o arquivo de configuração.
No
<Plugin ApplicationInsightsWriter>, adicione linhas de diretiva como as da tabela a seguir:Diretiva Efeito Exclude diskExclua todos os dados recolhidos pelo plug-in disk.Exclude disk:read,writeExclua as fontes nomeadas readewritedodiskplug-in.
Separe as diretivas com uma nova linha.
Problemas?
Esta seção oferece dicas de solução de problemas.
Não vejo dados no portal
Experimente estas opções:
- Abra a Pesquisa para verificar se os eventos brutos chegaram. Às vezes, eles levam mais tempo para aparecer no explorador de métricas.
- Talvez seja necessário definir exceções de firewall para dados de saída.
- Habilite a monitorização no plug-in do Application Insights. Adicione esta linha dentro de
<Plugin ApplicationInsightsWriter>:SDKLogger true
- Abra um terminal e execute
collectdno modo detalhado para ver todos os problemas relatados.sudo collectd -f
Problema conhecido
O plug-in de escrita do Application Insights é incompatível com certos plug-ins de leitura. Alguns plug-ins às vezes enviam NaN, mas o plug-in do Application Insights espera um número em ponto flutuante.
-
Sintoma: O
collectdlog mostra erros que incluem "AI: ... SyntaxError: Token N inesperado." - Solução alternativa: exclua os dados coletados pelos plug-ins de gravação com problema.
Usar o micrômetro com o SDK Java do Application Insights (não recomendado)
O monitoramento de aplicativos Micrometer mede métricas para o código de aplicativo baseado em JVM e permite exportar os dados para seus sistemas de monitoramento favoritos. Esta seção ensina como usar o Micrometer com o Application Insights para aplicativos Spring Boot e não Spring Boot.
Use Spring Boot 1.5x
Adicione as seguintes dependências ao seu arquivo pom.xml ou ao seu arquivo build.gradle:
- Application Insights spring-boot-starter 2.5.0 ou posterior.
- Micrômetro Azure Registry 1.1.0 ou superior.
- Micrometer Spring Legacy 1.1.0 ou superior. Ele retroporta o código de configuração automática no framework Spring.
- Recurso ApplicationInsights.
Siga estes passos:
Atualize o arquivo depom.xml do seu aplicativo Spring Boot e adicione as seguintes dependências nele:
<dependency> <groupId>com.microsoft.azure</groupId> <artifactId>applicationinsights-spring-boot-starter</artifactId> <version>2.5.0</version> </dependency> <dependency> <groupId>io.micrometer</groupId> <artifactId>micrometer-spring-legacy</artifactId> <version>1.1.0</version> </dependency> <dependency> <groupId>io.micrometer</groupId> <artifactId>micrometer-registry-azure-monitor</artifactId> <version>1.1.0</version> </dependency>Atualize o arquivo application.properties ou YML com a chave de instrumentação do Application Insights usando a seguinte propriedade:
azure.application-insights.instrumentation-key=<your-instrumentation-key-here>Crie seu aplicativo e execute-o.
As etapas anteriores devem colocá-lo em funcionamento com métricas pré-agregadas coletadas automaticamente no Azure Monitor.
Use Spring 2.x
Adicione as seguintes dependências ao seu arquivo pom.xml ou ao seu arquivo build.gradle:
- Application Insights Spring-Boot-Starter 2.1.2 ou superior
- Azure-spring-boot-metrics-starters 2.0.7 ou posterior
- Recurso do Application Insights
Siga estes passos:
Atualize o arquivo pom.xml do seu aplicativo Spring Boot e adicione a seguinte dependência nele:
<dependency> <groupId>com.microsoft.azure</groupId> <artifactId>azure-spring-boot-metrics-starter</artifactId> <version>2.0.7</version> </dependency>Atualize o arquivo application.properties ou YML com a chave de instrumentação do Application Insights usando a seguinte propriedade:
azure.application-insights.instrumentation-key=<your-instrumentation-key-here>Crie seu aplicativo e execute-o.
As etapas anteriores devem ajudá-lo a começar, com métricas previamente agregadas e automaticamente recolhidas no Azure Monitor. Para obter mais informações sobre como ajustar o Application Insights Spring Boot starter, consulte o readme no GitHub.
Métricas padrão:
- Métricas configuradas automaticamente para Tomcat, JVM, Logback Metrics, Log4J Metrics, Uptime Metrics, Processor Metrics e FileDescriptorMetrics.
- Por exemplo, se o Netflix Hystrix estiver presente no caminho da classe, também obteremos essas métricas.
- As seguintes métricas podem estar disponíveis ao adicionar os respetivos JavaBeans:
-
CacheMetrics(CaffeineCache,EhCache2,GuavaCache,HazelcastCache, eJCache) DataBaseTableMetricsHibernateMetricsJettyMetrics-
OkHttp3Métricas -
KafkaMétricas
-
Desative a coleta automática de métricas:
- Métricas da JVM:
management.metrics.binders.jvm.enabled=false
- Métricas de Logback:
management.metrics.binders.logback.enabled=false
- Métricas de Uptime:
management.metrics.binders.uptime.enabled=false
- Métricas do processador:
management.metrics.binders.processor.enabled=false
- FileDescriptorMetrics:
management.metrics.binders.files.enabled=false
- Hystrix Metrics se biblioteca em
classpath:management.metrics.binders.hystrix.enabled=false
- Metrics do AspectJ se a biblioteca estiver em
classpath:spring.aop.enabled=false
Observação
Especifique as propriedades anteriores no arquivo application.properties ou application.yml do seu aplicativo Spring Boot.
Use o micrômetro com aplicativos da Web que não sejam do Spring Boot
Adicione as seguintes dependências ao seu arquivo pom.xml ou ao seu arquivo build.gradle:
- Application Insights Web Auto 2.5.0 ou posterior
- Micrometer Azure Registry 1.1.0 ou superior
- Recurso do Application Insights
Siga estes passos:
Adicione as seguintes dependências no seu arquivo pom.xml ou build.gradle:
<dependency> <groupId>io.micrometer</groupId> <artifactId>micrometer-registry-azure-monitor</artifactId> <version>1.1.0</version> </dependency> <dependency> <groupId>com.microsoft.azure</groupId> <artifactId>applicationinsights-web-auto</artifactId> <version>2.5.0</version> </dependency>Se ainda não o fez, adicione o ficheiro ApplicationInsights.xml na pasta de recursos. Para obter mais informações, consulte Adicionar um arquivo ApplicationInsights.xml.
Classe de servlet de amostra (emite uma métrica de temporizador):
@WebServlet("/hello") public class TimedDemo extends HttpServlet { private static final long serialVersionUID = -4751096228274971485L; @Override @Timed(value = "hello.world") protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.getWriter().println("Hello World!"); MeterRegistry registry = (MeterRegistry) getServletContext().getAttribute("AzureMonitorMeterRegistry"); //create new Timer metric Timer sampleTimer = registry.timer("timer"); Stream<Integer> infiniteStream = Stream.iterate(0, i -> i+1); infiniteStream.limit(10).forEach(integer -> { try { Thread.sleep(1000); sampleTimer.record(integer, TimeUnit.MILLISECONDS); } catch (Exception e) {} }); } @Override public void init() throws ServletException { System.out.println("Servlet " + this.getServletName() + " has started"); } @Override public void destroy() { System.out.println("Servlet " + this.getServletName() + " has stopped"); } }Exemplo de classe de configuração:
@WebListener public class MeterRegistryConfiguration implements ServletContextListener { @Override public void contextInitialized(ServletContextEvent servletContextEvent) { // Create AzureMonitorMeterRegistry private final AzureMonitorConfig config = new AzureMonitorConfig() { @Override public String get(String key) { return null; } @Override public Duration step() { return Duration.ofSeconds(60);} @Override public boolean enabled() { return false; } }; MeterRegistry azureMeterRegistry = AzureMonitorMeterRegistry.builder(config); //set the config to be used elsewhere servletContextEvent.getServletContext().setAttribute("AzureMonitorMeterRegistry", azureMeterRegistry); } @Override public void contextDestroyed(ServletContextEvent servletContextEvent) { } }
Para saber mais sobre métricas, consulte a documentação do micrômetro.
Outros exemplos de código sobre como criar diferentes tipos de métricas podem ser encontrados no repositório oficial do Micrometer GitHub.
Vincular mais coleta de métricas
As seções a seguir mostram como coletar mais métricas.
SpringBoot/Spring
Crie um bean da respetiva categoria métrica. Por exemplo, digamos que você precise de métricas do Guava Cache:
@Bean
GuavaCacheMetrics guavaCacheMetrics() {
Return new GuavaCacheMetrics();
}
Várias métricas não são habilitadas por padrão, mas podem ser vinculadas da maneira anterior. Para obter uma lista completa, consulte o repositório GitHub do micrômetro.
Aplicativos que não são do Spring
Adicione o seguinte código de vinculação ao arquivo de configuração:
New GuavaCacheMetrics().bind(registry);
API principal para eventos e métricas personalizados
Insira algumas linhas de código em seu aplicativo para descobrir o que os usuários estão fazendo com ele ou para ajudar a diagnosticar problemas. Você pode enviar telemetria de aplicativos de dispositivo e desktop, clientes da Web e servidores da Web. Use a API de telemetria principal do Application Insights para enviar eventos e métricas personalizados e suas próprias versões de telemetria padrão. Essa API é a mesma que os coletores de dados padrão do Application Insights usam.
Resumo da API
A API principal é uniforme em todas as plataformas, com exceção de algumas variações, como GetMetric (somente .NET).
| Método | Usado para |
|---|---|
TrackPageView |
Páginas, telas, painéis ou formulários. |
TrackEvent |
Ações do usuário e outros eventos. Usado para rastrear o comportamento do usuário ou para monitorar o desempenho. |
TrackMetric |
Medições de desempenho, como comprimentos de fila não relacionados a eventos específicos. |
TrackException |
Registro de exceções para diagnóstico. Examine onde ocorrem em relação a outros eventos e examine os stack traces. |
TrackRequest |
Registro da frequência e duração das solicitações do servidor para análise de desempenho. |
TrackTrace |
Mensagens de log de diagnóstico de recursos. Você também pode capturar logs de terceiros. |
TrackDependency |
Registrar a duração e a frequência das chamadas para componentes externos dos quais seu aplicativo depende. |
Você pode anexar propriedades e métricas à maioria dessas chamadas de telemetria.
Pré-requisitos
Se ainda não tiveres uma referência ao SDK do Application Insights:
Adicione o SDK do Application Insights ao seu projeto.
No seu dispositivo ou código do servidor Web, inclua:
import com.microsoft.applicationinsights.TelemetryClient;
Obter uma instância de TelemetryClient
Obtenha uma instância de TelemetryClient:
private TelemetryClient telemetry = new TelemetryClient();
TelemetryClient é seguro para threads.
Observação
Se você usa o Azure Functions v2+ ou o Azure WebJobs v3+, consulte Monitorar o Azure Functions.
Talvez queiras criar mais instâncias de TelemetryClient para outros módulos da tua aplicação. Por exemplo, você pode ter uma TelemetryClient instância em sua classe middleware para relatar eventos de lógica de negócios. Você pode definir propriedades como UserId e DeviceId para identificar a máquina. Essas informações são anexadas a todos os eventos enviados pela instância.
telemetry.getContext().getUser().setId("...");
telemetry.getContext().getDevice().setId("...");
TrackEvent
No Application Insights, um evento personalizado é um ponto de dados que você pode exibir no Metrics Explorer como uma contagem agregada e na Pesquisa de Diagnóstico como ocorrências individuais. (Não está relacionado com MVC ou outros "eventos" de estrutura.)
Insira TrackEvent chamadas no seu código para contar vários eventos. Por exemplo, talvez você queira acompanhar a frequência com que os usuários escolhem um recurso específico. Ou você pode querer saber com que frequência eles atingem certos objetivos ou cometem tipos específicos de erros.
Por exemplo, em um aplicativo de jogo, envie um evento sempre que um usuário ganhar o jogo:
telemetry.trackEvent("WinGame");
Eventos personalizados no Log Analytics
A telemetria customEvents está disponível na tabela na guia de Logs do Application Insights ou na experiência de utilização. Os eventos podem vir de trackEvent(..) ou do plug-in de coleta automática de cliques Click Analytics.
Se a amostragem estiver em operação, a propriedade mostrará itemCount um valor maior que 1. Por exemplo, itemCount==10 significa que de 10 chamadas para trackEvent(), o processo de amostragem transmitiu apenas uma delas. Para obter uma contagem correta de eventos personalizados, use um código como customEvents | summarize sum(itemCount).
Observação
itemCount tem um valor mínimo de um; o próprio registo representa uma entrada.
TrackMetric
O Application Insights pode traçar métricas que não estão anexadas a eventos específicos. Por exemplo, você pode monitorar o comprimento de uma fila em intervalos regulares. Com métricas, as medições individuais são de menor interesse do que as variações e tendências, e por isso os gráficos estatísticos são úteis.
Para enviar métricas para o Application Insights, você pode usar a TrackMetric(..) API. Há duas maneiras de enviar uma métrica:
Valor único. Toda vez que você executa uma medição em seu aplicativo, envia o valor correspondente para o Application Insights.
Por exemplo, suponha que você tenha uma métrica que descreva o número de itens em um contêiner. Durante um período de tempo específico, você primeiro coloca três itens no contêiner e, em seguida, remove dois itens. Assim, você ligaria
TrackMetricduas vezes. Primeiro, você passaria o valor3e, em seguida, passaria o valor-2. O Application Insights armazena ambos os valores para você.Agregação. Quando você trabalha com métricas, cada medição raramente é de interesse. Em vez disso, é importante um resumo do que aconteceu durante um determinado período de tempo. Esse resumo é chamado agregação.
No exemplo anterior, a soma métrica agregada para esse período de tempo é
1e a contagem dos valores métricos é2. Ao usar a abordagem de agregação, você invocaTrackMetricapenas uma vez por período de tempo e envia os valores agregados. Recomendamos essa abordagem porque ela pode reduzir significativamente a sobrecarga de custo e desempenho enviando menos pontos de dados para o Application Insights, enquanto ainda coleta todas as informações relevantes.
Exemplos de valor único
Para enviar um único valor de métrica:
telemetry.trackMetric("queueLength", 42.0);
Métricas personalizadas no Log Analytics
A telemetria customMetrics está disponível na tabela em Application Insights Analytics. Cada linha representa uma chamada para trackMetric(..) no seu aplicativo.
-
valueSum: A soma das medidas. Para obter o valor médio, divida porvalueCount. -
valueCount: O número de medições que foram agregadas nestatrackMetric(..)chamada.
Observação
valueCount tem um valor mínimo de um; o próprio registo representa uma entrada.
Visualizações de página
Em um dispositivo ou aplicativo de página da Web, a telemetria de exibição de página é enviada por padrão quando cada tela ou página é carregada. Mas você pode alterar o padrão para controlar visualizações de página em momentos mais ou diferentes. Por exemplo, em um aplicativo que exibe guias ou painéis, talvez você queira acompanhar uma página sempre que o usuário abrir um novo painel.
Os dados do usuário e da sessão são enviados como propriedades junto com as visualizações de página, para que os gráficos de usuário e sessão ganhem vida quando houver telemetria de exibição de página.
Visualizações de página personalizadas
telemetry.trackPageView("GameReviewPage");
Telemetria de página no Log Analytics
No Log Analytics, duas tabelas mostram dados de operações do navegador:
-
pageViews: Contém dados sobre o URL e o título da página. -
browserTimings: Contém dados sobre o desempenho do cliente, como o tempo necessário para processar os dados de entrada.
Para saber quanto tempo o navegador demora a processar páginas diferentes:
browserTimings
| summarize avg(networkDuration), avg(processingDuration), avg(totalDuration) by name
Para descobrir a popularidade de diferentes navegadores:
pageViews
| summarize count() by client_Browser
Para associar visualizações de página a chamadas AJAX, combine com dependências:
pageViews
| join (dependencies) on operation_Id
TrackRequest
O SDK do servidor usa TrackRequest para registrar solicitações HTTP.
Você também pode chamá-lo você mesmo se quiser simular solicitações em um contexto em que não tenha o módulo de serviço Web em execução.
A maneira recomendada de enviar telemetria de solicitação é quando a solicitação atua como um contexto de operação.
Contexto da operação
Você pode correlacionar itens de telemetria associando-os ao contexto da operação. O módulo de controle de solicitações padrão faz isso para exceções e outros eventos que são enviados enquanto uma solicitação HTTP está sendo processada. No Search and Analytics, você pode encontrar facilmente quaisquer eventos associados à solicitação usando seu ID de operação.
Os itens de telemetria reportados dentro de um escopo de operação tornam-se filhos de tal operação. Os contextos de operação podem ser aninhados.
Em Pesquisar, o contexto da operação é usado para criar a lista Itens Relacionados .
Solicitações no Log Analytics
No Application Insights Analytics, as solicitações aparecem na requests tabela.
Se a amostragem estiver em operação, a propriedade mostrará itemCount um valor maior que 1. Por exemplo, itemCount==10 significa que de 10 chamadas para trackRequest(), o processo de amostragem transmitiu apenas uma delas. Para obter uma contagem correta de solicitações e duração média segmentada por nomes de solicitação, use códigos como:
requests
| summarize count = sum(itemCount), avgduration = avg(duration) by name
TrackException
Envie exceções para o Application Insights:
- Para contá-los como indicação da frequência de um problema.
- Examinar ocorrências individuais.
Os relatórios incluem stack traces.
try {
...
} catch (Exception ex) {
telemetry.trackException(ex);
}
As exceções são detetadas automaticamente, portanto, você nem sempre precisa ligar TrackException explicitamente.
Exceções no Log Analytics
No Application Insights Analytics, as exceções aparecem na exceptions tabela.
Se a amostragem estiver em operação, a propriedade mostrará itemCount um valor maior que 1. Por exemplo, itemCount==10 significa que de 10 chamadas para trackException(), o processo de amostragem transmitiu apenas uma delas. Para obter uma contagem correta de exceções segmentadas por tipo de exceção, use códigos como:
exceptions
| summarize sum(itemCount) by type
A maioria das informações importantes da pilha já é extraída em variáveis separadas, mas você pode separar a details estrutura para obter mais. Como essa estrutura é dinâmica, você deve converter o resultado para o tipo esperado. Por exemplo:
exceptions
| extend method2 = tostring(details[0].parsedStack[1].method)
Para associar exceções às solicitações relacionadas, use uma associação:
exceptions
| join (requests) on operation_Id
Rastreio
Use TrackTrace para ajudar a diagnosticar problemas enviando uma "trilha de navegação" para o Application Insights. Você pode enviar partes de dados de diagnóstico e inspecioná-los na Pesquisa de diagnóstico.
Observação
Em Java, o agente Java do Application Insights coleta automaticamente e envia logs para o portal.
telemetry.trackTrace(message, SeverityLevel.Warning, properties);
Registe um evento de diagnóstico, como a entrada ou saída de um método.
| Parâmetro | Description |
|---|---|
message |
Dados de diagnóstico. Pode ser muito mais longo do que um nome. |
properties |
Mapa de string para string. Mais dados são usados para filtrar exceções no portal. O padrão é vazio. |
severityLevel |
Valores suportados: SeverityLevel.ts. |
Você pode pesquisar no conteúdo da mensagem, mas, ao contrário dos valores de propriedade, não pode filtrá-lo.
O limite de tamanho de message é muito maior do que o limite de propriedades. Uma vantagem de TrackTrace é que se podem colocar dados relativamente longos na mensagem. Por exemplo, você pode codificar dados POST lá.
Você também pode adicionar um nível de gravidade à sua mensagem. E, como outras telemetrias, é possível adicionar valores de propriedade para ajudar a filtrar ou pesquisar diferentes conjuntos de rastreamentos. Por exemplo:
Map<String, Integer> properties = new HashMap<>();
properties.put("Database", db.ID);
telemetry.trackTrace("Slow Database response", SeverityLevel.Warning, properties);
Na Pesquisa, você pode filtrar facilmente todas as mensagens de um determinado nível de gravidade relacionadas a um determinado banco de dados.
Rastreamentos no Log Analytics
No Application Insights Analytics, as chamadas para TrackTrace aparecem na tabela traces.
Se a amostragem estiver em operação, a propriedade mostrará itemCount um valor maior que 1. Por exemplo, itemCount==10 significa que de 10 chamadas para trackTrace(), o processo de amostragem transmitiu apenas uma delas. Para obter uma contagem correta de chamadas de rastreamento, use um código como traces | summarize sum(itemCount).
TrackDependency
Utilize a chamada TrackDependency para monitorizar os tempos de resposta e as taxas de sucesso das chamadas para um bloco de código externo. Os resultados aparecem nos gráficos de dependência no portal. O trecho de código a seguir deve ser adicionado sempre que uma chamada de dependência for feita.
boolean success = false;
Instant startTime = Instant.now();
try {
success = dependency.call();
}
finally {
Instant endTime = Instant.now();
Duration delta = Duration.between(startTime, endTime);
RemoteDependencyTelemetry dependencyTelemetry = new RemoteDependencyTelemetry("My Dependency", "myCall", delta, success);
dependencyTelemetry.setTimeStamp(startTime);
telemetry.trackDependency(dependencyTelemetry);
}
Observação
Em Java, muitas chamadas de dependência podem ser rastreadas automaticamente usando o agente Java do Application Insights.
Você usa essa chamada se quiser rastrear chamadas que o rastreamento automatizado não deteta.
Dependências no Log Analytics
No Application Insights Analytics, trackDependency as chamadas aparecem na dependencies tabela.
Se a amostragem estiver em operação, a itemCount propriedade mostra um valor maior que 1. Por exemplo, itemCount==10 significa que de 10 chamadas para trackDependency(), o processo de amostragem transmitiu apenas uma delas. Para obter uma contagem correta de dependências segmentadas por componente de destino, use um código como:
dependencies
| summarize sum(itemCount) by target
Para associar dependências às solicitações relacionadas, use uma associação:
dependencies
| join (requests) on operation_Id
Limpeza de dados
Normalmente, o SDK envia dados em intervalos fixos, normalmente 30 segundos, ou sempre que o buffer está cheio, o que normalmente é de 500 itens. Em alguns casos, poderás querer esvaziar o buffer. Um exemplo é se você estiver usando o SDK em um aplicativo que é desligado.
telemetry.flush();
//Allow some time for flushing before shutting down
Thread.sleep(5000);
Observação
O Java SDK elimina automaticamente os dados em buffer no encerramento da aplicação.
Usuários autenticados
Numa aplicação Web, os utilizadores são identificados por cookies por predefinição. Um utilizador pode ser contado mais do que uma vez se aceder à sua aplicação a partir de uma máquina ou navegador diferente, ou se eliminar cookies.
Se os utilizadores iniciarem sessão na sua aplicação, pode obter uma contagem mais precisa definindo o ID de utilizador autenticado no código do browser. Não é necessário usar o nome de login real do usuário. Só tem de ser um ID que seja exclusivo para esse utilizador. Não deve incluir espaços ou qualquer um dos caracteres ,;=|.
O ID de utilizador também é definido num cookie de sessão e enviado para o servidor. Se o SDK do servidor estiver instalado, o ID do usuário autenticado será enviado como parte das propriedades de contexto da telemetria do cliente e do servidor. Você pode então filtrar e pesquisar nele.
Se o seu aplicativo agrupar usuários em contas, você também poderá passar um identificador para a conta. Aplicam-se as mesmas restrições de caracteres.
No Metrics Explorer, pode criar um gráfico que conte os Utilizadores, Autenticados e as Contas de Utilizador.
Você também pode pesquisar pontos de dados do cliente com nomes de usuário e contas específicos.
Filtrar, pesquisar e segmentar seus dados usando propriedades
Você pode anexar propriedades e medidas aos seus eventos, métricas, visualizações de página, exceções e outros dados de telemetria.
As propriedades são valores de cadeia de caracteres que você pode usar para filtrar sua telemetria nos relatórios de uso. Por exemplo, se a sua aplicação fornecer vários jogos, pode anexar o nome do jogo a cada evento para ver quais os jogos mais populares.
Há um limite de 8.192 no comprimento da corda. Se você quiser enviar grandes blocos de dados, use o parâmetro message de TrackTrace.
As métricas são valores numéricos que podem ser apresentados graficamente. Por exemplo, você pode querer ver se há um aumento gradual nas pontuações que seus jogadores alcançam. Os gráficos podem ser segmentados pelas propriedades que são enviadas com o evento para que você possa obter gráficos separados ou empilhados para jogos diferentes.
Os valores métricos devem ser maiores ou iguais a 0 para serem exibidos corretamente.
Há alguns limites no número de propriedades, valores de propriedade e métricas que você pode usar.
Map<String, String> properties = new HashMap<String, String>();
properties.put("game", currentGame.getName());
properties.put("difficulty", currentGame.getDifficulty());
Map<String, Double> metrics = new HashMap<String, Double>();
metrics.put("Score", currentGame.getScore());
metrics.put("Opponents", currentGame.getOpponentCount());
telemetry.trackEvent("WinGame", properties, metrics);
Importante
Certifique-se de que não regista informações de identificação pessoal nas propriedades.
Advertência
Não reutilize a mesma instância de item de telemetria (event neste exemplo) para chamar Track*() várias vezes. Essa prática pode fazer com que a telemetria seja enviada com configuração incorreta.
Medidas e propriedades personalizadas no Log Analytics
No Log Analytics, métricas e propriedades personalizadas são exibidas nos atributos customMeasurements e customDimensions de cada registro de telemetria.
Por exemplo, se você adicionar uma propriedade chamada "jogo" à telemetria de solicitação, essa consulta contará as ocorrências de diferentes valores de "jogo" e mostrará a média da métrica personalizada "score":
requests
| summarize sum(itemCount), avg(todouble(customMeasurements.score)) by tostring(customDimensions.game)
Observe que:
- Quando você extrai um valor do
customDimensionsoucustomMeasurementsJSON, ele tem tipo dinâmico, então você deve convertê-lotostringoutodouble. - Para ter em conta a possibilidade de amostragem, utilizar
sum(itemCount)e nãocount().
Eventos de cronometragem
Às vezes, você quer mapear quanto tempo leva para executar uma ação. Por exemplo, você pode querer saber quanto tempo os usuários levam para considerar as escolhas em um jogo. Para obter essas informações, use o parâmetro de medição.
long startTime = System.currentTimeMillis();
// Perform timed action
long endTime = System.currentTimeMillis();
Map<String, Double> metrics = new HashMap<>();
metrics.put("ProcessingTime", (double)endTime-startTime);
// Setup some properties
Map<String, String> properties = new HashMap<>();
properties.put("signalSource", currentSignalSource.getName());
// Send the event
telemetry.trackEvent("SignalProcessed", properties, metrics);
Propriedades padrão para telemetria personalizada
Se você quiser definir valores de propriedade padrão para alguns dos eventos personalizados que você escreve, defina-os em uma TelemetryClient instância. Eles são anexados a cada item de telemetria enviado por esse cliente.
import com.microsoft.applicationinsights.TelemetryClient;
import com.microsoft.applicationinsights.TelemetryContext;
...
TelemetryClient gameTelemetry = new TelemetryClient();
TelemetryContext context = gameTelemetry.getContext();
context.getProperties().put("Game", currentGame.Name);
gameTelemetry.TrackEvent("WinGame");
Chamadas de telemetria individuais podem substituir os valores padrão em seus dicionários de propriedade.
Desativar telemetria
Para parar e iniciar dinamicamente a recolha e transmissão de telemetria:
telemetry.getConfiguration().setTrackingDisabled(true);
Cadeia de conexão dinâmica
Para evitar misturar telemetria de ambientes de desenvolvimento, teste e produção, você pode criar recursos separados do Application Insights e alterar suas cadeias de conexão, dependendo do ambiente.
Em vez de obter a cadeia de conexão do arquivo de configuração, você pode defini-la no método de inicialização do seu código:
// Initialize once, e.g., at startup
TelemetryClient telemetry = new TelemetryClient();
// Prefer env var; falls back to hard-coded for illustration
String cs = System.getenv("APPLICATIONINSIGHTS_CONNECTION_STRING");
if (cs != null && !cs.isEmpty()) {
telemetry.getContext().setConnectionString(cs);
}
Contexto de Telemetria
TelemetryClient tem uma propriedade Context, que contém valores que são enviados junto com todos os dados de telemetria. Eles são normalmente definidos pelos módulos de telemetria padrão, mas você também pode defini-los por conta própria. Por exemplo:
telemetry.Context.Operation.Name = "MyOperationName";
Se você mesmo definir qualquer um desses valores, considere remover a linha relevante do ApplicationInsights.config para que seus valores e os valores padrão não fiquem confusos.
- Componente: O aplicativo e sua versão.
- Dispositivo: dados sobre o dispositivo em que o aplicativo está sendo executado. Em aplicativos Web, é do servidor ou dispositivo cliente que a telemetria é enviada.
- InstrumentationKey: O recurso do Application Insights no Azure onde a telemetria aparece.
- Localização: A localização geográfica do dispositivo.
-
Operação: Em aplicativos Web, a solicitação HTTP atual. Em outros tipos de aplicativo, você pode definir esse valor para agrupar eventos.
- ID: um valor gerado que correlaciona eventos diferentes para que, ao inspecionar qualquer evento na Pesquisa de Diagnóstico, você possa encontrar itens relacionados.
- Nome: um identificador, geralmente a URL da solicitação HTTP.
- SyntheticSource: Se não for nulo ou vazio, uma cadeia de caracteres que indica que a origem da solicitação foi identificada como um robô ou teste da Web. Por padrão, ele é excluído dos cálculos no Metrics Explorer.
- Sessão: A sessão do usuário. O ID é definido como um valor gerado, que é alterado quando o usuário não está ativo há algum tempo.
- Usuário: Informações do usuário.
Limits
Existem alguns limites no número de métricas e eventos por aplicativo, ou seja, por chave de instrumentação. Os limites dependem do plano de preços que escolher.
| Resource | Limite predefinido | Limite máximo | Observações |
|---|---|---|---|
| Total de dados por dia | 100 GB | Contacte o suporte. | Você pode definir um limite para reduzir os dados. Se precisar de mais dados, pode aumentar o limite no portal, até 1.000 GB. Para capacidades superiores a 1.000 GB, envie um e-mail para AIDataCap@microsoft.com. |
| Throttling | 32.000 eventos/segundo | Contacte o suporte. | O limite é medido durante um minuto. |
| Registos de retenção de dados | 30 a 730 dias | 730 dias | Este recurso é para Logs. |
| Métricas de retenção de dados | 90 dias | 90 dias | Este recurso é para o Metrics Explorer. |
| Disponibilidade, teste em várias etapas, retenção detalhada de resultados | 90 dias | 90 dias | Este recurso fornece resultados detalhados de cada passo. |
| Tamanho máximo do item de telemetria | 64 KB | 64 KB | |
| Máximo de itens de telemetria por lote | 64,000 | 64,000 | |
| Comprimento dos nomes de propriedade e métrica | 150 | 150 | Consulte esquemas de tipo. |
| Comprimento da cadeia de valor da propriedade | 8,192 | 8,192 | Consulte esquemas de tipo. |
| Comprimento da mensagem de rastreio e exceção | 32,768 | 32,768 | Consulte esquemas de tipo. |
| Contagem de testes de disponibilidade por recurso do Application Insights | 100 | 100 | |
| Contagem de testes de disponibilidade por grupo de recursos | 800 | 800 | Consulte Azure Resource Manager |
| Testes de disponibilidade: redirecionamentos máximos por teste | 10 | 10 | |
| Frequência mínima para testes de disponibilidade | 300 segundos | Frequências de teste personalizadas ou frequências inferiores a 5 minutos requerem implementações personalizadas de TrackAvailability . | |
| Retenção de dados do .NET Profiler e do Depurador de Instantâneos | Duas semanas | Contacte o suporte. O limite máximo de retenção é de seis meses. | |
| Dados do .NET Profiler enviados por dia | Sem limite | Sem limite. | |
| Depurador de Instantâneos dados enviados por dia | 30 instantâneos por dia por aplicativo monitorado | Sem limite. | O número de snapshots coletados por aplicativo pode ser modificado por meio da configuração. |
Para obter mais informações sobre preços e cotas, consulte Faturamento do Application Insights.
Para evitar atingir o limite de taxa de transferência de dados, use a amostragem.
Para determinar por quanto tempo os dados são mantidos, consulte Retenção de dados e privacidade.
Próximos passos
- Adicione monitoramento às suas páginas da Web para monitorar os tempos de carregamento da página, chamadas AJAX e exceções do navegador.
- Escreva telemetria personalizada para controlar o uso no navegador ou no servidor.
- Utilize o Log Analytics para consultas poderosas de telemetria da sua aplicação.
- Use Pesquisa diagnóstica.
- Considere a amostragem como uma alternativa à filtragem que não distorce suas métricas.
- Para saber mais sobre o Micrômetro, consulte a documentação do Micrômetro.
- Para saber mais sobre o Spring on Azure, consulte a documentação do Spring on Azure.
- Para obter mais informações, consulte Azure para desenvolvedores Java.