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:

Obter uma chave de instrumentação do Application Insights

  1. Inicie sessão no portal do Azure.

  2. No portal do Azure, crie um recurso do Application Insights. Defina o tipo de aplicação para aplicação Web em Java.

  3. Localize a chave de instrumentação do novo recurso. Terá de colar esta chave no seu projeto de código em breve.

    Captura de ecrã do painel Descrição Geral de um recurso do Application Insights no portal do Azure com a chave de instrumentação realçada.

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-autocomponentes , -webe -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.

Captura de ecrã que mostra os dados de exemplo de descrição geral.

Saiba mais sobre as métricas.

Clique em qualquer gráfico para ver métricas agregadas mais detalhadas.

Captura de ecrã que mostra um painel de falhas do Application Insights com gráficos.

Dados de instâncias

Clique num tipo de pedido específico para ver instâncias individuais.

Captura de ecrã que mostra a desagregação numa vista de exemplo específica.

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.

Captura de ecrã que mostra um exemplo do Log Analytics no portal do Azure.

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 e http.proxyPort.

  • Nos servidores do Windows, instale:

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.

Captura de ecrã que mostra o painel Métricas de um recurso do Application Insights no portal do Azure com bytes privados de processo selecionados.

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 de Attribute.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. Se categoryName for Process 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:

Enviar a sua própria telemetria

Agora que instalou o SDK, pode utilizar a API para enviar a sua própria telemetria:

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.+'

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 .

Captura de ecrã que mostra o painel Procurar um recurso do Application Insights no portal do Azure.

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 HttpClientde , OkHttpe java.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.
  • 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.

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

  1. 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.

  2. 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>"

  3. 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:

  1. Selecione Definições>Definições da Aplicação.

  2. 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.

  3. 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:

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.

Captura de ecrã que mostra o painel de descrição geral de um recurso do Application Insights no portal do Azure com a chave de instrumentação realçada.

Instalar recolhido e o plug-in

Nas máquinas do servidor Linux:

  1. Instale a versão recolhida 5.4.0 ou posterior.
  2. Transfira o plug-in de escritor recolhido do Application Insights. Repare no número da versão.
  3. Copie o jar de plug-in para /usr/share/collectd/java.
  4. 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 e write do disk 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.

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 :

Siga estes passos:

  1. 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>
    
    
  2. 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>

  3. 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 :

Siga estes passos:

  1. 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>
    
  2. 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>

  3. 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, HazelcastCachee JCache)
    • 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 :

Siga estes passos:

  1. 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>
    
  2. 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.

  3. 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");
          }
    
        }
    
    
  4. 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