Application Insights para Java 2.x
Atenção
Este artigo aplica-se ao Application Insights Java 2.x, que já não é recomendado.
Pode encontrar documentação para a versão mais recente em Application Insights Java 3.x.
Neste artigo, irá aprender a utilizar o Application Insights Java 2.x. Este artigo mostra-lhe como:
- Comece e saiba como instrumentar pedidos, controlar dependências, recolher contadores de desempenho, diagnosticar problemas de desempenho e exceções e escrever código para controlar o que os utilizadores fazem com a sua aplicação.
- Envie registos de rastreio para o Application Insights e explore-os com o portal do Application Insights.
- Monitorizar dependências, exceções detetadas e tempos de execução de métodos em aplicações Web Java.
- Filtre a telemetria na sua aplicação Web Java.
- Explore as métricas de desempenho do sistema Linux no Application Insights com
collectd
. - Medir métricas para código de aplicação baseado em máquinas virtuais Java (JVM). Exporte os dados para os seus sistemas de monitorização favoritos com a monitorização de aplicações de Micrometer.
Nota
A 31 de março de 2025, o suporte da ingestão de chaves de instrumentação terminará. A ingestão de chaves de instrumentação continuará a funcionar, mas deixaremos de fornecer atualizações ou suporte para a funcionalidade. Transição para cadeias de ligação para tirar partido das novas capacidades.
Introdução ao Application Insights num projeto Web em Java
Nesta secção, vai utilizar o SDK do Application Insights para instrumentar pedidos, controlar dependências, recolher contadores de desempenho, diagnosticar problemas de desempenho e exceções e escrever código para controlar o que os utilizadores fazem com a sua aplicação.
O Application Insights é um serviço de análise extensível para programadores Web que os ajudam a compreender o desempenho e a utilização da aplicação em direto. O Application Insights suporta aplicações em Java em execução no Linux, Unix ou Windows.
Pré-requisitos
É necessário:
- Uma conta do Azure com uma subscrição ativa. Pode criar uma conta gratuitamente.
- Uma aplicação Java funcional.
Obter uma chave de instrumentação do Application Insights
Inicie sessão no portal do Azure.
No portal do Azure, crie um recurso do Application Insights. Defina o tipo de aplicação para aplicação Web em Java.
Localize a chave de instrumentação do novo recurso. Terá de colar esta chave no seu projeto de código em breve.
Adicionar o Application Insights SDK para Java ao projeto
Escolha o seu tipo de projeto.
Se o projeto já estiver configurado para utilizar o Maven para compilação, intercale o seguinte código no ficheiro pom.xml . Em seguida, atualize as dependências do projeto para obter os binários transferidos.
<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 mais frequentes
Qual é a relação entre os
-web-auto
componentes ,-web
e-core
?-
applicationinsights-web-auto
fornece-lhe métricas que controlam as contagens de pedidos de servlet HTTP e os tempos de resposta ao registar automaticamente o filtro de servlet do Application Insights no runtime. -
applicationinsights-web
também lhe fornece métricas que controlam as contagens de pedidos de servlet HTTP e os tempos de resposta. Mas é necessário o registo manual do filtro de servlet do Application Insights na sua aplicação. -
applicationinsights-core
dá-lhe a API simples, por exemplo, se a sua aplicação não for baseada em servlets.
-
Como posso atualizar o SDK para a versão mais recente?
- A partir de novembro de 2020, para monitorizar aplicações Java, recomendamos a utilização do Application Insights Java 3.x. Para obter mais informações sobre como começar, veja Application Insights Java 3.x.
Adicionar um ficheiro ApplicationInsights.xml
Adicione ApplicationInsights.xml à pasta de recursos no seu projeto ou certifique-se de que é adicionado ao caminho da classe de implementação do projeto. Copie o seguinte XML para a mesma.
Substitua a chave de instrumentação pela chave que obteve da 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 ficheiro de configuração pode estar em qualquer localização acessível à sua aplicação. A propriedade -Dapplicationinsights.configurationDirectory
do sistema especifica o diretório que contém ApplicationInsights.xml. Por exemplo, um ficheiro 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 juntamente com todos os itens de telemetria e diz ao Application Insights para apresentá-la no seu recurso.
- O componente de Pedido HTTP é opcional. Envia automaticamente telemetria sobre pedidos e tempos de resposta para o portal.
- A correlação de eventos é uma adição ao componente de pedidos HTTP. Atribui um identificador a cada pedido recebido pelo servidor. Em seguida, adiciona este identificador como uma propriedade a cada item de telemetria como a propriedade
Operation.Id
. Permite-lhe correlacionar a telemetria associada a cada pedido ao definir um filtro na Pesquisa de diagnóstico.
Maneiras alternativas de definir a chave de instrumentação
O SDK do Application Insights procura a chave pela seguinte ordem:
- Propriedade do sistema: -DAPPINSIGHTS_INSTRUMENTATIONKEY=your_ikey
- Variável de ambiente: APPINSIGHTS_INSTRUMENTATIONKEY
- Ficheiro de configuração: ApplicationInsights.xml
Também pode defini-lo no 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 efetuadas, consultas JDBC, registo de aplicações e melhor nomenclatura de operações.
Executar a aplicação
Execute-o no modo de depuração no seu computador de desenvolvimento ou publique-o no servidor.
Ver a telemetria no Application Insights
Regresse ao recurso do Application Insights no portal do Azure.
Os dados de pedidos HTTP são apresentados no painel de descrição geral. Se não estiver lá, aguarde alguns segundos e, em seguida, selecione Atualizar.
Saiba mais sobre as métricas.
Clique em qualquer gráfico para ver métricas agregadas mais detalhadas.
Dados de instâncias
Clique num tipo de pedido específico para ver instâncias individuais.
Log Analytics: linguagem de consulta avançada
À medida que acumula mais dados, pode executar consultas para agregar dados e encontrar instâncias individuais. O Log Analytics é uma ferramenta avançada para compreender o desempenho e a utilização e para fins de diagnóstico.
Instalar a aplicação no servidor
Agora, publique a sua aplicação no servidor, permita que as pessoas a utilizem e veja a telemetria aparecer no portal.
Certifique-se que a firewall permite à aplicação enviar 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.proxyHost
do sistema ehttp.proxyPort
.Nos servidores do Windows, instale:
Microsoft Visual C++ Redistributable
Este componente permite contadores de desempenho.
Serviço de Aplicações do Azure, Azure Kubernetes Service, configuração de VMs
A melhor e mais fácil abordagem para monitorizar as aplicações em execução em qualquer fornecedor de recursos do Azure é utilizar o Application Insights Java 3.x.
Exceções e falhas de pedido
As exceções não processadas e as falhas de pedidos são recolhidas automaticamente pelo filtro Web do Application Insights.
Para recolher dados noutras exceções, pode inserir chamadas para controlarException() no seu código.
Monitorizar chamadas de método e dependências externas
Instale o agente Java para registar métodos internos e chamadas efetuadas através de JDBC, com dados de temporização e para nomenclatura de operações automáticas.
Rastreio distribuído do W3C
O SDK Java do Application Insights suporta agora o rastreio distribuído por W3C.
A configuração do SDK recebido é explicada na correlação de Telemetria no Application Insights.
A configuração do SDK de saída é definida no ficheiro AI-Agent.xml .
Contadores de desempenho
Selecione Investigar>Métricas para ver um intervalo de contadores de desempenho.
Personalizar a recolha do contador de desempenho
Para desativar a recolha do conjunto padrão de contadores de desempenho, adicione o seguinte código no nó raiz do ficheiro deApplicationInsights.xml :
<PerformanceCounters>
<UseBuiltIn>False</UseBuiltIn>
</PerformanceCounters>
Recolher mais contadores de desempenho
Pode especificar mais contadores de desempenho a recolher.
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 apresentado no portal do Application Insights. -
objectName
: o nome do objeto JMX. -
attribute
: o atributo do nome do objeto JMX a obter. -
type
(opcional): o tipo de atributo do objeto JMX:- Predefinição: um tipo simples, como int ou long.
-
composite
: Os dados do contador de desempenho estão no formato deAttribute.Data
. -
tabular
: Os dados do contador de desempenho 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 apresentado no portal do Application Insights. -
categoryName
: a categoria do contador de desempenho (objeto de desempenho) com a qual este contador de desempenho está associado. -
counterName
: o nome do contador de desempenho. -
instanceName
: o nome da instância da categoria do contador de desempenho ou uma cadeia vazia (""), se a categoria contiver uma única instância. SecategoryName
forProcess
e o contador de desempenho que pretende recolher for do processo JVM atual no qual a sua aplicação está em execução, especifique"__SELF__"
.
Contadores de desempenho Unix
Instale recolhido com o plug-in do Application Insights para obter uma grande variedade de dados de sistema e de rede.
Obter dados de utilizador e de sessão
Agora está a enviar telemetria a partir do servidor Web. Para obter a vista completa de 360 graus da sua aplicação, pode adicionar mais monitorização:
- Adicione a telemetria às suas páginas Web para monitorizar vistas de página e métricas de utilizador.
- Configure testes Web para certificar-se de que a aplicação permanece em direto e reativa.
Enviar a sua própria telemetria
Agora que instalou o SDK, pode utilizar a API para enviar a sua própria telemetria:
- Controle eventos personalizados e métricas para saber o que os utilizadores estão a fazer com a sua aplicação.
- Pesquise eventos e registos para ajudar a diagnosticar problemas.
Testes Web de disponibilidade
O Application Insights pode testar o seu site em intervalos regulares para verificar se está a funcionar e a responder bem.
Saiba mais sobre como configurar testes Web de disponibilidade.
Resolução de problemas
Veja o artigo de resolução de problemas dedicado.
Testar a conectividade entre o anfitrião da aplicação e o serviço de ingestão
Os SDKs e os agentes do Application Insights enviam telemetria para serem ingeridos como chamadas REST para os nossos pontos finais de ingestão. Pode testar a conectividade do servidor Web ou do computador anfitrião da aplicação para os pontos finais do serviço de ingestão com clientes REST não processados do PowerShell ou comandos curl. Veja Resolver problemas de telemetria de aplicações em falta no Azure Monitor Application Insights.
Explorar registos de rastreio java no Application Insights
Se estiver a utilizar o Logback ou o Log4J (v1.2 ou v2.0) para rastreio, pode enviar os registos de rastreio automaticamente para o Application Insights, onde pode explorar e procurar nos mesmos.
Dica
Só tem de definir a chave de instrumentação do Application Insights uma vez para a sua aplicação. Se estiver a utilizar uma arquitetura como o Java Spring, poderá já ter registado a chave noutro local na configuração da sua aplicação.
Utilizar o agente Java do Application Insights
Por predefinição, o agente Java do Application Insights captura automaticamente o registo efetuado ao WARN
nível e acima.
Pode alterar o limiar de registo capturado com o ficheiro deAI-Agent.xml :
<?xml version="1.0" encoding="utf-8"?>
<ApplicationInsightsAgent>
<Instrumentation>
<BuiltIn>
<Logging threshold="info"/>
</BuiltIn>
</Instrumentation>
</ApplicationInsightsAgent>
Pode desativar a captura de registo do agente Java com o ficheiro AI-Agent.xml :
<?xml version="1.0" encoding="utf-8"?>
<ApplicationInsightsAgent>
<Instrumentation>
<BuiltIn>
<Logging enabled="false"/>
</BuiltIn>
</Instrumentation>
</ApplicationInsightsAgent>
Alternativas
Em vez de utilizar o agente Java, pode seguir estas instruções.
Instalar o SDK Java
Siga as instruções para instalar o SDK do Application Insights para Java, caso ainda não o tenha feito.
Adicionar bibliotecas de registo ao seu projeto
Escolha a forma adequada para o seu projeto.
Maven
Se o projeto já estiver configurado para utilizar o Maven para compilação, intercale um dos seguintes fragmentos de código no ficheiro depom.xml . Em seguida, atualize as dependências do projeto para obter os binários transferidos.
Logback
<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 projeto já estiver configurado para utilizar o Gradle para compilação, adicione uma das seguintes linhas ao dependencies
grupo no ficheiro build.gradle . Em seguida, atualize as dependências do projeto para obter os binários transferidos.
Logback
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.+'
Utilizar a ligação jar
Siga as diretrizes para instalar manualmente o SDK Java do Application Insights e transferir o jar. Na página Maven Central, selecione a jar
ligação na secção de transferência do appender adequado. Adicione o jar appender transferido ao projeto.
Logger | Download | Biblioteca |
---|---|---|
Logback | Logback appender Jar | 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 à sua arquitetura de registo
Para começar a obter rastreios, intercale o fragmento de código relevante para o ficheiro de configuração Logback ou Log4J.
Logback
<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 aplicadores do Application Insights podem ser referenciados por qualquer logger configurado e não necessariamente pelo logger de raiz, conforme mostrado nos exemplos de código anteriores.
Explorar os seus rastreios no portal do Application Insights
Agora que configurou o projeto para enviar rastreios para o Application Insights, pode ver e procurar estes rastreios no portal do Application Insights no painel Pesquisa .
As exceções submetidas através de loggers serão apresentadas no portal como Telemetria de exceção .
Monitorizar dependências, exceções detetadas e tempos de execução de métodos em aplicações Web Java
Se instrumentou a sua aplicação Web Java com o SDK do Application Insights, pode utilizar o agente Java para obter informações mais aprofundadas, sem alterações de código:
Dependências: dados sobre chamadas que a sua aplicação efetua a outros componentes, incluindo:
-
Chamadas HTTP a enviar: chamadas efetuadas através
Apache HttpClient
de ,OkHttp
ejava.net.HttpURLConnection
são capturadas. - Chamadas redis: as chamadas efetuadas através do cliente Jedis são capturadas.
- Consultas JDBC: para MySQL e PostgreSQL, se a chamada demorar mais de 10 segundos, o agente comunica o plano de consulta.
-
Chamadas HTTP a enviar: chamadas efetuadas através
Registo de aplicações: capture e correlacione os registos da aplicação com pedidos HTTP e outras telemetrias:
- Log4j 1.2
- Log4j2
- Logback
Melhor nomenclatura da operação: utilizado para agregação de pedidos no portal.
-
Spring: Baseado em
@RequestMapping
. -
JAX-RS: baseado em
@Path
.
-
Spring: Baseado em
Para utilizar o agente Java, instale-o no servidor. As suas aplicações Web têm de ser instrumentadas com o SDK Java do Application Insights.
Instalar o agente do Application Insights para Java
No computador que executa o servidor Java, transfira o agente 2.x. Certifique-se de que a versão do agente Java 2.x que utiliza corresponde à versão do SDK Java do Application Insights 2.x que utiliza.
Edite o script de arranque do servidor de aplicações e adicione o seguinte argumento JVM:
-javaagent:<full path to the agent JAR file>
Por exemplo, no Tomcat num computador Linux:
export JAVA_OPTS="$JAVA_OPTS -javaagent:<full path to agent JAR file>"
Reinicie o servidor da aplicação.
Configurar o agente
Crie um ficheiro com o nome AI-Agent.xml e coloque-o na mesma pasta que o ficheiro jar do agente.
Defina o conteúdo do ficheiro XML. Edite o exemplo seguinte para incluir ou omitir as funcionalidades que pretende.
<?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ção (Spring Boot)
java -javaagent:/path/to/agent.jar -jar path/to/TestApp.jar
Para Serviço de Aplicações do Azure, siga estes passos:
Selecione Definições>Definições da Aplicação.
Em Definições da Aplicação, 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 tem de ser empacotado como um recurso no seu projeto para que fique no diretório D:/home/site/wwwroot /. Para confirmar que o agente está no diretório Serviço de Aplicações correto, aceda a Ferramentas de Desenvolvimento Ferramentas>Avançadas>Depurar Consola de Depuração e examine os conteúdos do diretório do site.
-
Chave:
Guarde as definições e reinicie a aplicação. Estes passos aplicam-se apenas aos serviços de aplicações em execução no Windows.
Nota
AI-Agent.xml e o ficheiro jar do agente devem estar na mesma pasta. São muitas vezes colocados em conjunto na pasta /resources do projeto.
Ativar o rastreio distribuído do W3C
Adicione o fragmento seguinte ao AI-Agent.xml:
<Instrumentation>
<BuiltIn enabled="true">
<HTTP enabled="true" W3C="true" enableW3CBackCompat="true"/>
</BuiltIn>
</Instrumentation>
Nota
O modo de retrocompatibilidade está ativado por predefinição. O enableW3CBackCompat
parâmetro é opcional e deve ser utilizado apenas quando quiser desativá-lo.
Idealmente, este seria o caso quando todos os seus serviços tiverem sido atualizados para versões mais recentes de SDKs que suportam o protocolo W3C. Recomendamos que mude para versões mais recentes de SDKs com suporte W3C o mais rapidamente 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 do Application Insights, as dependências remotas agregadas e os tempos de execução do método são apresentados no mosaico Desempenho.
Para procurar instâncias individuais de relatórios de dependência, exceção e método, abra a Pesquisa.
Saiba mais sobre como diagnosticar problemas de dependência.
Perguntas ou problemas?
Utilize os seguintes recursos:
- Não existem dados? Defina exceções de firewall.
- Resolver problemas de Java.
Filtrar telemetria na sua aplicação Web Java
Os filtros fornecem uma forma de selecionar a telemetria que a sua aplicação Web Java envia para o Application Insights. Existem alguns filtros fora da caixa que pode utilizar. Também pode escrever os seus próprios filtros personalizados.
Os filtros fora da caixa incluem:
- Nível de gravidade do rastreio.
- URLs específicos, palavras-chave ou códigos de resposta.
- Respostas rápidas. Por outras palavras, os pedidos aos quais a sua aplicação respondeu rapidamente.
- Nomes de eventos específicos.
Nota
Os filtros distorcem as métricas da sua aplicação. Por exemplo, pode decidir que, para diagnosticar respostas lentas, irá definir um filtro para eliminar tempos de resposta rápidos. Mas tem de estar ciente de que os tempos médios de resposta comunicados pelo Application Insights serão mais lentos do que a velocidade verdadeira. Além disso, a contagem de pedidos será menor do que a contagem real.
Se for uma preocupação, utilize a Amostragem .
Definir filtros
No ApplicationInsights.xml, adicione uma TelemetryProcessors
secçã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 incorporados.
Filtros incorporados
Esta secção aborda os filtros incorporados que estão disponíveis.
Filtro de Telemetria de Métricas
<Processor type="MetricTelemetryFilter">
<Add name="NotNeeded" value="metric1,metric2"/>
</Processor>
-
NotNeeded
: Lista separada por vírgulas de nomes de métricas personalizados
Filtro de Telemetria da Vista 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 este parâmetro estiver definido, as páginas carregadas mais rapidamente do que desta vez não serão comunicadas. -
NotNeededNames
: lista separada por vírgulas de nomes de página. -
NotNeededUrls
: lista separada por vírgulas de fragmentos de URL. Por exemplo,"home"
filtra todas as páginas que têm "home" no URL.
Pedir 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 Origem Sintética
Filtra toda a telemetria que tem valores na SyntheticSource
propriedade. Estão incluídos pedidos de bots, aranhas e testes de disponibilidade.
Filtra a telemetria para todos os pedidos sintéticos:
<Processor type="SyntheticSourceFilter" />
Filtra a telemetria para origens sintéticas específicas:
<Processor type="SyntheticSourceFilter" >
<Add name="NotNeeded" value="source1,source2"/>
</Processor>
-
NotNeeded
: Lista separada por vírgulas de nomes de origem sintética
Filtro de Evento de Telemetria
Filtra eventos personalizados que foram registados com o TrackEvent():
<Processor type="TelemetryEventFilter" >
<Add name="NotNeededNames" value="event1, event2"/>
</Processor>
-
NotNeededNames
: Lista separada por vírgulas de nomes de eventos
Filtro de Telemetria de Rastreio
Filtra os rastreios de registo registados com o TrackTrace() ou um recoletor de arquitetura de registo:
<Processor type="TraceTelemetryFilter">
<Add name="FromSeverityLevel" value="ERROR"/>
</Processor>
Os
FromSeverityLevel
valores válidos são:- DESATIVADO: filtra todos os rastreios.
- TRACE: sem filtragem. É igual ao nível trace.
- INFORMAÇÕES: filtra o nível DE RASTREIO.
- AVISO: filtra RASTREIO e INFORMAÇÕES.
- ERRO: filtra AVISO, INFORMAÇÕES e RASTREIO.
- CRÍTICO: filtra tudo menos CRÍTICO.
Filtros personalizados
As secções seguintes mostram-lhe os passos para criar os seus próprios filtros personalizados.
Codificar o filtro
No 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;
}
}
Invocar o filtro no ficheiro de configuração
Agora, em ApplicationInsights.xml:
<ApplicationInsights>
<TelemetryProcessors>
<CustomProcessors>
<Processor type="com.fabrikam.SuccessFilter">
<Add name="Successful" value="false"/>
</Processor>
</CustomProcessors>
</TelemetryProcessors>
</ApplicationInsights>
Invocar o filtro (Java Spring)
Para aplicações baseadas na arquitetura Spring, os processadores de telemetria personalizados têm de ser registados na sua classe de aplicação principal como um bean. Em seguida, serão ligados automaticamente quando a aplicação for iniciada.
@Bean
public TelemetryProcessor successFilter() {
return new SuccessFilter();
}
Pode criar os seus próprios parâmetros de filtro no application.properties
. Em seguida, utilize a arquitetura de configuração externa do Spring Boot para transmitir esses parâmetros para o filtro personalizado.
Resolução de problemas
Esta secção oferece uma sugestão de resolução de problemas.
O meu filtro não está a funcionar
Verifique se forneceu valores de parâmetro válidos. Por exemplo, as durações devem ser números inteiros. Os 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, será ignorado.
recolhido: métricas de desempenho do Linux no Application Insights (preterido)
Para explorar as métricas de desempenho do sistema Linux no Application Insights, instale recolhido juntamente com o plug-in do Application Insights. Esta solução open source reúne várias estatísticas de sistema e de rede.
Normalmente, irá utilizar collectd
se já tiver instrumentado o seu serviço Web Java com o Application Insights. Fornece-lhe mais dados para o ajudar a melhorar o desempenho ou diagnosticar problemas da sua aplicação.
Obter a chave de instrumentação
No portal do Azure, abra o recurso do Application Insights onde pretende que os dados sejam apresentados. Em alternativa, pode criar um novo recurso.
Tire uma cópia da Chave de Instrumentação, que identifica o recurso.
Instalar recolhido e o plug-in
Nas máquinas do servidor Linux:
- Instale a versão recolhida 5.4.0 ou posterior.
- Transfira o plug-in de escritor recolhido do Application Insights. Repare no número da versão.
- Copie o jar de 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 incluir
java.class.path
o seguinte jar. Atualize o número da versão para corresponder ao que transferiu:/usr/share/collectd/java/applicationinsights-collectd-1.0.5.jar
Adicione este fragmento com a chave de instrumentação do recurso:
LoadPlugin "com.microsoft.applicationinsights.collectd.ApplicationInsightsWriter" <Plugin ApplicationInsightsWriter> InstrumentationKey "Your key" </Plugin>
Eis uma parte de um ficheiro 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 recolhidos, que podem recolher vários dados de diferentes origens.
Reinicie collectd
de acordo com o manual.
Ver os dados no Application Insights
No recurso do Application Insights, abra Métricas e adicione gráficos. Selecione as métricas que pretende ver na categoria Personalizado .
Por predefinição, as métricas são agregadas em todos os computadores anfitriões a partir dos quais as métricas foram recolhidas. Para ver as métricas por anfitrião, no painel Detalhes do gráfico , ative Agrupamento e, em seguida, escolha agrupar por CollectD-Host.
Excluir o carregamento de estatísticas específicas
Por predefinição, o plug-in do Application Insights envia todos os dados recolhidos por todos os plug-ins ativados collectd read
.
Para excluir dados de plug-ins ou origens de dados específicas:
Edite o ficheiro de configuração.
No
<Plugin ApplicationInsightsWriter>
, adicione linhas de diretiva como as da tabela seguinte:Diretiva Efeito Exclude disk
Exclua todos os dados recolhidos disk
pelo plug-in.Exclude disk:read,write
Exclua as origens nomeadas read
ewrite
dodisk
plug-in.
Separar diretivas com uma nova linha.
Problemas?
Esta secção oferece sugestões de resolução de problemas.
Não vejo dados no portal
Experimente estas opções:
- Abra a Pesquisa para ver se os eventos não processados chegaram. Por vezes, demoram mais tempo a aparecer no explorador de métricas.
- Poderá ter de definir exceções de firewall para dados de saída.
- Ative o rastreio no plug-in do Application Insights. Adicione esta linha em
<Plugin ApplicationInsightsWriter>
:SDKLogger true
- Abra um terminal e comece
collectd
no modo verboso para ver os problemas que está a comunicar:sudo collectd -f
Problema conhecido
O plug-in de escrita do Application Insights é incompatível com determinados plug-ins de leitura. Por vezes, alguns plug-ins enviam NaN
, mas o plug-in do Application Insights espera um número de vírgula flutuante.
-
Sintoma: O
collectd
registo mostra erros que incluem "IA: ... SintaxeErro: Token inesperado N." - Solução: exclua os dados recolhidos pelos plug-ins de escrita de problemas.
Utilizar o Micrometrómetro com o SDK Java do Application Insights (não recomendado)
A monitorização de aplicações de micrometrómetro mede as métricas do código de aplicação baseado em JVM e permite-lhe exportar os dados para os seus sistemas de monitorização favoritos. Esta secção ensina-o a utilizar o Micrometer com o Application Insights para aplicações Spring Boot e não Spring Boot.
Utilizar o Spring Boot 1.5x
Adicione as seguintes dependências ao ficheiro pom.xml ou build.gradle :
- Application Insights spring-boot-starter 2.5.0 ou posterior.
- Micrometer Azure Registry 1.1.0 ou superior.
- Micrometer Spring Legacy 1.1.0 ou superior. Devolve o código de configuração automática na estrutura spring.
- Recurso ApplicationInsights.
Siga estes passos:
Atualize o ficheiro pom.xml da sua aplicação Spring Boot e adicione as seguintes dependências:
<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 ficheiro application.properties ou YML com a chave de instrumentação do Application Insights com a seguinte propriedade:
azure.application-insights.instrumentation-key=<your-instrumentation-key-here>
Crie a sua aplicação e execute-a.
Os passos anteriores devem pôr-no a funcionar com métricas pré-agregadas recolhidas automaticamente no Azure Monitor.
Utilizar o Spring 2.x
Adicione as seguintes dependências ao ficheiro pom.xml ou 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 ficheiro pom.xml da aplicação Spring Boot e adicione a seguinte dependência:
<dependency> <groupId>com.microsoft.azure</groupId> <artifactId>azure-spring-boot-metrics-starter</artifactId> <version>2.0.7</version> </dependency>
Atualize o ficheiro application.properties ou YML com a chave de instrumentação do Application Insights com a seguinte propriedade:
azure.application-insights.instrumentation-key=<your-instrumentation-key-here>
Crie a sua aplicação e execute-a.
Os passos anteriores devem fazê-lo executar com métricas pré-agregadas recolhidas automaticamente no Azure Monitor. Para obter mais informações sobre como otimizar o arranque do Spring Boot do Application Insights, veja o readme no GitHub.
Métricas predefinidas:
- Métricas configuradas automaticamente para Tomcat, JVM, Métricas de Logback, Métricas log4J, Métricas de Tempo de Atividade, Métricas do Processador e FileDescriptorMetrics.
- Por exemplo, se a 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 feijões:
-
CacheMetrics
(CaffeineCache
,EhCache2
,GuavaCache
,HazelcastCache
eJCache
) DataBaseTableMetrics
HibernateMetrics
JettyMetrics
- Métricas do
OkHttp3
- Métricas do
Kafka
-
Desative a coleção automática de métricas:
- Métricas JVM:
management.metrics.binders.jvm.enabled=false
- Métricas de Logback:
management.metrics.binders.logback.enabled=false
- Métricas de Tempo de Atividade:
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 if library on
classpath
:management.metrics.binders.hystrix.enabled=false
- Métricas do AspectJ se biblioteca em
classpath
:spring.aop.enabled=false
Nota
Especifique as propriedades anteriores no ficheiro application.properties ou application.yml da sua aplicação Spring Boot.
Utilizar o Micrometer com aplicações Web não Spring Boot
Adicione as seguintes dependências ao ficheiro pom.xml ou 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 ficheiro 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, veja Adicionar um ficheiro ApplicationInsights.xml.
Classe Servlet de exemplo (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"); } }
Classe de configuração de exemplo:
@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 as métricas, veja a documentação do Micrometer.
Pode encontrar outro código de exemplo sobre como criar diferentes tipos de métricas no repositório oficial do GitHub do Micrometer.
Vincular mais coleção de métricas
As secções seguintes mostram-lhe como recolher mais métricas.
SpringBoot/Spring
Crie um feijão da respetiva categoria de métricas. Por exemplo, digamos que precisa de métricas da Cache guava:
@Bean
GuavaCacheMetrics guavaCacheMetrics() {
Return new GuavaCacheMetrics();
}
Por predefinição, várias métricas não estão ativadas, mas podem ser vinculadas da forma anterior. Para obter uma lista completa, veja o repositório do GitHub do Micrometer.
Aplicações não Spring
Adicione o seguinte código de enlace ao ficheiro de configuração:
New GuavaCacheMetrics().bind(registry);
Passos seguintes
- Adicione monitorização às suas páginas Web para monitorizar os tempos de carregamento das páginas, as chamadas AJAX e as exceções do browser.
- Escreva telemetria personalizada para controlar a utilização no browser ou no servidor.
- Utilize o Log Analytics para consultas avançadas através de telemetria a partir da sua aplicação.
- Utilize a Pesquisa de diagnóstico.
- Considere a amostragem como uma alternativa à filtragem que não distorce as suas métricas.
- Para saber mais sobre o Micrometrómetro, veja a documentação do Micrometer.
- Para saber mais sobre o Spring no Azure, veja a documentação do Spring on Azure.
- Para obter mais informações, veja Azure for Java developers (Programadores do Azure para Java).