Condividi tramite


Application Insights per Java 2.x

Attenzione

Questo articolo si applica a Application Insights Java 2.x, che non è più consigliato.

La documentazione per la versione più recente è disponibile in Application Insights Java 3.x.

In questo articolo si apprenderà come usare Application Insights Java 2.x. Questo articolo illustra come:

  • Introduzione e informazioni su come instrumentare le richieste, tenere traccia delle dipendenze, raccogliere contatori delle prestazioni, diagnosticare i problemi di prestazioni e le eccezioni e scrivere codice per tenere traccia delle operazioni eseguite dagli utenti con l'app.
  • Inviare i log di traccia a Application Insights ed esplorarli usando il portale di Application Insights.
  • Monitorare le dipendenze, le eccezioni rilevate e i tempi di esecuzione dei metodi nelle app Web Java.
  • Filtrare i dati di telemetria nell'app Web Java.
  • Esplorare le metriche delle prestazioni del sistema Linux in Application Insights usando collectd.
  • Misurare le metriche per il codice dell'applicazione basato su JVM (Java Virtual Machine). Esportare i dati nei sistemi di monitoraggio preferiti usando il monitoraggio dell'applicazione Micrometer.

Nota

Il 31 marzo 2025, il supporto per l'inserimento delle chiavi di strumentazione terminerà. L'inserimento delle chiavi di strumentazione continuerà a funzionare, ma non verranno più forniti aggiornamenti o supporto per la funzionalità. Passare alle stringhe di connessione per sfruttare le nuove funzionalità.

Introduzione ad Application Insights in un progetto Web Java

In questa sezione si usa Application Insights SDK per instrumentare le richieste, tenere traccia delle dipendenze, raccogliere contatori delle prestazioni, diagnosticare i problemi di prestazioni e le eccezioni e scrivere codice per tenere traccia delle operazioni eseguite dagli utenti con l'app.

Application Insights è un servizio di analisi estendibile per gli sviluppatori Web che semplifica la comprensione delle prestazioni e dell'uso dell'applicazione live. Application Insights supporta le app Java in esecuzione in Linux, Unix o Windows.

Prerequisiti

È necessario:

Ottenere una chiave di strumentazione di Application Insights

  1. Accedere al portale di Azure.

  2. Nel portale di Azurecreare una risorsa di Application Insights. Impostare il tipo di applicazione nell'applicazione Web Java.

  3. Ottenere la chiave di strumentazione della nuova risorsa. Questa chiave dovrà a breve essere incollata nel progetto di codice.

    Screenshot del riquadro Panoramica per una risorsa di Application Insights nella portale di Azure con la chiave di strumentazione evidenziata.

Aggiungere SDK per Java di Application Insights al progetto

Scegliere il tipo di progetto.

Se il progetto è già configurato per usare Maven per la compilazione, unire il codice seguente al file pom.xml . Aggiornare quindi le dipendenze progetto per fare in modo che i file binari vengano scaricati.

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

Domande frequenti

  • Qual è la relazione tra , -web-auto-webe -core componenti?

    • applicationinsights-web-auto offre metriche che tengono traccia dei conteggi delle richieste e dei tempi di risposta HTTP registrando automaticamente il filtro servlet di Application Insights in fase di esecuzione.
    • applicationinsights-web fornisce anche metriche che tengono traccia dei conteggi delle richieste e dei tempi di risposta HTTP. È tuttavia necessaria la registrazione manuale del filtro servlet di Application Insights nell'applicazione.
    • applicationinsights-core fornisce l'API bare, ad esempio, se l'applicazione non è basata su servlet.
  • Come si esegue l'aggiornamento alla versione più recente dell'SDK?

    • A partire da novembre 2020, per il monitoraggio delle applicazioni Java, è consigliabile usare Application Insights Java 3.x. Per altre informazioni su come iniziare, vedere Application Insights Java 3.x.

Aggiungere un file ApplicationInsights.xml

Aggiungere ApplicationInsights.xml alla cartella risorse nel progetto oppure assicurarsi che venga aggiunto al percorso della classe di distribuzione del progetto. Copiarvi il seguente file XML.

Sostituire la chiave di strumentazione con quella ottenuta dalla portale di 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>

Facoltativamente, il file di configurazione può trovarsi in qualsiasi posizione accessibile all'applicazione. La proprietà -Dapplicationinsights.configurationDirectory di sistema specifica la directory contenente ApplicationInsights.xml. Ad esempio, un file di configurazione che si trova in E:\myconfigs\appinsights\ApplicationInsights.xml verrebbe configurato con la proprietà -Dapplicationinsights.configurationDirectory="E:\myconfigs\appinsights".

  • La chiave di strumentazione viene inviata insieme a tutti gli elementi di dati di telemetria e indica ad Application Insights di visualizzarla nella risorsa.
  • Il componente delle richieste HTTP è facoltativo. Invia automaticamente i dati di telemetria sulle richieste e tempi di risposta al portale.
  • La correlazione di eventi è un'aggiunta al componente delle richieste HTTP. Assegna un identificatore a ogni richiesta ricevuta dal server. Aggiunge quindi questo identificatore come proprietà a ogni elemento di telemetria come proprietà Operation.Id. Consente di correlare i dati di telemetria associati a ogni richiesta impostando un filtro nella ricerca diagnostica.

Modi alternativi per impostare la chiave di strumentazione

Application Insights SDK cerca la chiave nell'ordine seguente.

  • Proprietà di sistema: -DAPPINSIGHTS_INSTRUMENTATIONKEY=your_ikey
  • Variabile di ambiente: APPINSIGHTS_INSTRUMENTATIONKEY
  • File di configurazione: ApplicationInsights.xml

È anche possibile eseguirne l' impostazione nel codice:

    String instrumentationKey = "00000000-0000-0000-0000-000000000000";

    if (instrumentationKey != null)
    {
        TelemetryConfiguration.getActive().setInstrumentationKey(instrumentationKey);
    }

Aggiungere l'agente

Installare l'agente Java per acquisire chiamate HTTP in uscita, query JDBC, registrazione dell'applicazione e denominazione dell'operazione migliore.

Eseguire l'applicazione

Eseguirlo in modalità di debug nel computer di sviluppo o pubblicarlo nel server.

Visualizzare i dati di telemetria in Application Insights

Tornare alla risorsa di Application Insights nel portale di Azure.

I dati delle richieste HTTP sono visualizzati nel riquadro di panoramica. Se non è presente, attendere alcuni secondi e quindi selezionare Aggiorna.

Screenshot che mostra i dati di esempio di panoramica.

Altre informazioni sulle metriche.

Fare clic su qualsiasi grafico per visualizzare metriche aggregate più dettagliate.

Screenshot che mostra un riquadro errori di Application Insights con grafici.

Dati dell'istanza

Fare clic su un tipo di richiesta specifico per visualizzare le singole istanze.

Screenshot che mostra il drill-in una visualizzazione di esempio specifica.

Log Analytics: linguaggio di query avanzato

Quando si accumulano più dati, è possibile eseguire query per aggregare i dati e trovare singole istanze. Log Analytics è uno strumento potente per comprendere le prestazioni e l'utilizzo e per scopi di diagnostica.

Screenshot che mostra un esempio di Log Analytics nell'portale di Azure.

Installare l'applicazione nel server

Pubblicare ora l'app nel server, consentire agli utenti di usarla e guardare i dati di telemetria visualizzati nel portale.

  • Verificare che il firewall consenta all'applicazione di inviare i dati di telemetria a queste porte:

    • dc.services.visualstudio.com:443
    • f5.services.visualstudio.com:443
  • Se il traffico in uscita deve essere instradato tramite un firewall, definire le proprietà http.proxyHost di sistema e http.proxyPort.

  • Nei server Windows installare:

Servizio app di Azure, servizio Azure Kubernetes, configurazione delle macchine virtuali

L'approccio migliore e più semplice per monitorare le applicazioni in esecuzione in qualsiasi provider di risorse di Azure consiste nell'usare Application Insights Java 3.x.

Eccezioni e richieste non eseguite

Le eccezioni e gli errori delle richieste non gestiti vengono raccolti automaticamente dal filtro Web di Application Insights.

Per raccogliere dati in altre eccezioni, è possibile inserire chiamate a trackException() nel codice.

Monitorare le chiamate al metodo e le dipendenze esterne

Installare l'agente Java per registrare i metodi interni e le chiamate specificati tramite JDBC, con i dati di temporizzazione e per la denominazione automatica delle operazioni.

Analisi distribuita W3C

L'SDK di Java di Application Insights adesso supporta l'analisi distribuita W3C.

La configurazione dell'SDK in ingresso viene illustrata ulteriormente nella correlazione dei dati di telemetria in Application Insights.

La configurazione dell'SDK in uscita è definita nel file AI-Agent.xml.

Contatori delle prestazioni

Selezionare Analizza> metriche per visualizzare un intervallo dicontatori delle prestazioni.

Screenshot che mostra il riquadro Metriche per una risorsa di Application Insights nella portale di Azure con byte privati elaborati selezionati.

Personalizzare la raccolta del contatore delle prestazioni

Per disabilitare la raccolta del set standard di contatori delle prestazioni, aggiungere il codice seguente nel nodo radice del file ApplicationInsights.xml :

    <PerformanceCounters>
       <UseBuiltIn>False</UseBuiltIn>
    </PerformanceCounters>

Raccogliere più contatori delle prestazioni

È possibile specificare più contatori delle prestazioni da raccogliere.

Contatori JMX (esposti dalla macchina virtuale 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: nome visualizzato nel portale di Application Insights.
  • objectName: nome dell'oggetto JMX.
  • attribute: attributo del nome dell'oggetto JMX da recuperare.
  • type (facoltativo): tipo di attributo dell'oggetto JMX:
    • Impostazione predefinita: tipo semplice, ad esempio int o long.
    • composite: i dati del contatore perf sono in formato Attribute.Data.
    • tabular: i dati del contatore perf sono in formato di una riga di tabella.
Contatori delle prestazioni di Windows

Ogni contatore delle prestazioni Windows è un membro di una categoria (nello stesso modo in cui un campo è un membro di una classe). Le categorie possono essere globali o hanno istanze numerate o denominate.

    <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: nome visualizzato nel portale di Application Insights.
  • categoryName: categoria del contatore delle prestazioni (oggetto prestazioni) con cui è associato questo contatore delle prestazioni.
  • counterName: nome del contatore delle prestazioni.
  • instanceName: nome dell'istanza di categoria del contatore delle prestazioni o stringa vuota (""), se la categoria contiene una singola istanza. Se categoryName è e il contatore delle prestazioni che si vuole raccogliere è Process dal processo JVM corrente in cui è in esecuzione l'app, specificare "__SELF__".

Contatori delle prestazioni Unix

Installare raccolto con il plug-in di Application Insights per ottenere un'ampia gamma di dati di sistema e di rete.

Ottenere i dati relativi a utenti e sessioni

A questo momento si inviano dati di telemetria dal server Web. Per ottenere la visualizzazione completa a 360 gradi dell'applicazione, è possibile aggiungere altro monitoraggio:

Inviare i propri dati di telemetria

Dopo aver installato l'SDK, è possibile usare l'API per inviare dati di telemetria personalizzati:

Test Web di disponibilità

Application Insights può testare il sito Web a intervalli regolari per verificare che funzioni e risponda correttamente.

Altre informazioni su come configurare i test Web di disponibilità.

Risoluzione dei problemi

Vedere l'articolo dedicato sulla risoluzione dei problemi.

Testare la connettività tra l'host dell'applicazione e il servizio di inserimento

Gli SDK e gli agenti di Application Insights inviano dati di telemetria per l'inserimento come chiamate REST agli endpoint di inserimento. È possibile testare la connettività dal server Web o dal computer host dell'applicazione agli endpoint del servizio di inserimento usando client REST non elaborati da PowerShell o comandi curl. Vedere Risolvere i problemi relativi ai dati di telemetria delle applicazioni mancanti in Application Insights di Monitoraggio di Azure.

Esplorare i log di traccia Java in Application Insights

Se si usa Logback o Log4J (v1.2 o v2.0) per la traccia, è possibile inviare automaticamente i log di traccia ad Application Insights dove è possibile esplorarli e eseguirvi ricerche.

Suggerimento

È necessario impostare la chiave di strumentazione di Application Insights una sola volta per l'applicazione. Se si usa un framework come Java Spring, potrebbe essere già stata registrata la chiave altrove nella configurazione dell'app.

Usare l'agente Java di Application Insights

Per impostazione predefinita, l'agente Java di Application Insights acquisisce automaticamente la registrazione eseguita a WARN livello e superiore.

È possibile modificare la soglia di registrazione acquisita usando il file AI-Agent.xml :

<?xml version="1.0" encoding="utf-8"?>
<ApplicationInsightsAgent>
   <Instrumentation>
      <BuiltIn>
         <Logging threshold="info"/>
      </BuiltIn>
   </Instrumentation>
</ApplicationInsightsAgent>

È possibile disabilitare l'acquisizione della registrazione dell'agente Java usando il file AI-Agent.xml :

<?xml version="1.0" encoding="utf-8"?>
<ApplicationInsightsAgent>
   <Instrumentation>
      <BuiltIn>
         <Logging enabled="false"/>
      </BuiltIn>
   </Instrumentation>
</ApplicationInsightsAgent>

Alternativi

Anziché usare l'agente Java, è possibile seguire queste istruzioni.

Installare Java SDK

Seguire le istruzioni per installare Application Insights SDK per Java, se non è già stato fatto.

Aggiungere le librerie di registrazione al progetto

Scegliere il modo più appropriato per il progetto.

Maven

Se il progetto è già configurato per l'uso di Maven per la compilazione, unire uno dei frammenti di codice seguenti nel file pom.xml . Aggiornare quindi le dipendenze progetto per fare in modo che i file binari vengano scaricati.

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 il progetto è già configurato per usare Gradle per la compilazione, aggiungere una delle righe seguenti al dependencies gruppo nel file build.gradle . Aggiornare quindi le dipendenze progetto per fare in modo che i file binari vengano scaricati.

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

Seguire le linee guida per installare manualmente Application Insights Java SDK e scaricare il file jar. Nella pagina Maven Central selezionare il jar collegamento nella sezione download per l'accodamento appropriato. Aggiungere il file jar di accodamento scaricato al progetto.

Logger Scarica Libreria
Logback Jar dell'appender logback applicationinsights-logging-logback
Log4J v2.0 Jar dell'appender Log4J versione 2 applicationinsights-logging-log4j2
Log4J v1.2 Jar dell'appender Log4J versione 1.2 applicationinsights-logging-log4j1_2

Aggiungere l'appender per il framework di registrazione

Per iniziare a ottenere tracce, unire il frammento di codice pertinente al file di configurazione Logback o 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>

Gli appender di Application Insights possono essere referenziati da qualsiasi logger configurato e non necessariamente dal logger radice, come illustrato negli esempi di codice precedenti.

Esplorare le tracce nel portale Application Insights.

Dopo aver configurato il progetto per inviare tracce a Application Insights, è possibile visualizzare e cercare queste tracce nel portale di Application Insights nel riquadro Ricerca .

Le eccezioni inviate tramite loggers verranno visualizzate nel portale come dati di telemetria eccezione .

Screenshot che mostra il riquadro Ricerca per una risorsa di Application Insights nella portale di Azure.

Monitorare le dipendenze, le eccezioni rilevate e i tempi di esecuzione dei metodi nelle app Web Java

Se l'app Web Java è stata usata con Application Insights SDK, è possibile usare l'agente Java per ottenere informazioni dettagliate più approfondite, senza modifiche al codice:

  • Dipendenze: dati sulle chiamate effettuate dall'applicazione ad altri componenti, tra cui:

    • Chiamate HTTP in uscita: chiamate effettuate tramite Apache HttpClient, OkHttpe java.net.HttpURLConnection vengono acquisite.
    • Chiamate Redis: le chiamate effettuate tramite il client Jedis vengono acquisite.
    • Query JDBC: per MySQL e PostgreSQL, se la chiamata richiede più di 10 secondi, l'agente segnala il piano di query.
  • Registrazione dell'applicazione: acquisire e correlare i log delle applicazioni con richieste HTTP e altri dati di telemetria:

    • Log4j 1.2
    • Log4j2
    • Logback
  • Denominazione dell'operazione migliore: utilizzata per l'aggregazione delle richieste nel portale.

    • Spring: basato su @RequestMapping.
    • JAX-RS: basato su @Path.

Per usare l'agente Java, installarlo nel server. Le app Web devono essere instrumentate con Application Insights Java SDK.

Installare l'agente di Application Insights per Java

  1. Nel computer che esegue il server Java scaricare l'agente 2.x. Assicurarsi che la versione dell'agente Java 2.x usata corrisponda alla versione di Application Insights Java SDK 2.x usata.

  2. Modificare lo script di avvio del server applicazioni e aggiungere l'argomento JVM seguente:

    -javaagent:<full path to the agent JAR file>

    Ad esempio, in Tomcat su un computer Linux:

    export JAVA_OPTS="$JAVA_OPTS -javaagent:<full path to agent JAR file>"

  3. Riavviare il server applicazioni.

Configurare l'agente

Creare un file denominato AI-Agent.xml e inserirlo nella stessa cartella del file jar dell'agente.

Impostare il contenuto del file XML. Modificare l'esempio seguente in modo da includere o escludere le funzionalità desiderate.

<?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>

Altre configurazioni (Spring Boot)

java -javaagent:/path/to/agent.jar -jar path/to/TestApp.jar

Per Servizio app di Azure, seguire questa procedura:

  1. Selezionare Impostazioni>applicazione.

  2. In Impostazioni app aggiungere una nuova coppia di valori chiave:

    • Chiave: JAVA_OPTS
    • Valore: -javaagent:D:/home/site/wwwroot/applicationinsights-agent-2.6.4.jar

    L'agente deve essere in pacchetto come risorsa nel progetto in modo che finisca nella directory D:/home/site/wwwroot/ . Per verificare che l'agente si trova nella directory di servizio app corretta, passare a Consoledidebugstrumenti avanzati strumenti>> di sviluppo ed esaminare il contenuto della directory del sito.

  3. Salvare le impostazioni e riavviare l'app. Questi passaggi si applicano solo ai servizi app in esecuzione in Windows.

Nota

AI-Agent.xml e il file jar dell'agente devono trovarsi nella stessa cartella. Spesso vengono posizionati insieme nella cartella /resources del progetto.

Abilitare l'analisi distribuita W3C

Aggiungere il frammento di codice seguente a AI-Agent.xml:

<Instrumentation>
   <BuiltIn enabled="true">
      <HTTP enabled="true" W3C="true" enableW3CBackCompat="true"/>
   </BuiltIn>
</Instrumentation>

Nota

La modalità di compatibilità con le versioni precedenti è abilitata per impostazione predefinita. Il enableW3CBackCompat parametro è facoltativo e deve essere usato solo quando si vuole disattivarlo.

Idealmente, questo potrebbe essere il caso in cui tutti i servizi sono stati aggiornati alle versioni più recenti degli SDK che supportano il protocollo W3C. È consigliabile passare alle versioni più recenti degli SDK con il supporto W3C il prima possibile.

Assicurarsi che sia le configurazioni in ingresso che in uscita (agente) siano esattamente uguali.

Visualizzare i dati

Nella risorsa Application Insights vengono visualizzati i tempi di esecuzione delle dipendenze remote e dei metodi aggregati nel riquadro Prestazioni.

Per cercare singole istanze di dipendenze, eccezioni e report sui metodi, aprire Ricerca.

Altre informazioni su come diagnosticare i problemi di dipendenza.

Domande o problemi?

Usare le risorse seguenti:

Filtrare i dati di telemetria nell'App Web Java

I filtri consentono di selezionare i dati di telemetria inviati dall'App Web Java ad Application Insights. Esistono alcuni filtri predefiniti che è possibile usare. È anche possibile scrivere filtri personalizzati.

I filtri pronti da usare includono:

  • Livello di gravità della traccia.
  • URL, parole chiave o codici di risposta specifici.
  • Risposte rapide. In altre parole, le richieste a cui l'app ha risposto rapidamente.
  • Nomi di eventi specifici.

Nota

I filtri alterano le metriche dell'app. Ad esempio, è possibile decidere che per diagnosticare risposte lente, si imposta un filtro per eliminare i tempi di risposta rapidi. Tuttavia, è necessario tenere presente che i tempi di risposta medi segnalati da Application Insights saranno quindi più lenti rispetto alla vera velocità. Inoltre, il conteggio delle richieste sarà minore del conteggio reale.

Se questo rappresenta un problema, usare il campionamento.

impostare i filtri

In ApplicationInsights.xmlaggiungere una TelemetryProcessors sezione come nell'esempio seguente:


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

Esaminare il set completo di processori predefiniti.

Filtri incorporati

Questa sezione illustra i filtri predefiniti disponibili.

Filtro Dati di telemetria metrica


           <Processor type="MetricTelemetryFilter">
                  <Add name="NotNeeded" value="metric1,metric2"/>
           </Processor>
  • NotNeeded: elenco delimitato da virgole di nomi di metriche personalizzati

Filtro Dati di telemetria visualizzazione di pagina


           <Processor type="PageViewTelemetryFilter">
                  <Add name="DurationThresholdInMS" value="500"/>
                  <Add name="NotNeededNames" value="page1,page2"/>
                  <Add name="NotNeededUrls" value="url1,url2"/>
           </Processor>
  • DurationThresholdInMS: la durata fa riferimento al tempo impiegato per caricare la pagina. Se questo parametro è impostato, le pagine caricate più velocemente di questa volta non vengono segnalate.
  • NotNeededNames: elenco delimitato da virgole di nomi di pagina.
  • NotNeededUrls: elenco delimitato da virgole di frammenti di URL. Ad esempio, "home" esclude tutte le pagine il cui URL include il termine "home".

Filtro di telemetria richiesta


           <Processor type="RequestTelemetryFilter">
                  <Add name="MinimumDurationInMS" value="500"/>
                  <Add name="NotNeededResponseCodes" value="page1,page2"/>
                  <Add name="NotNeededUrls" value="url1,url2"/>
           </Processor>

Filtro Origine sintetica

Filtra tutti i dati di telemetria con valori nella SyntheticSource proprietà. Le richieste da bot, ragni e test di disponibilità sono incluse.

Filtra i dati di telemetria per tutte le richieste sintetiche:


           <Processor type="SyntheticSourceFilter" />

Filtra i dati di telemetria per origini sintetiche specifiche:


           <Processor type="SyntheticSourceFilter" >
                  <Add name="NotNeeded" value="source1,source2"/>
           </Processor>
  • NotNeeded: elenco delimitato da virgole di nomi di origine sintetica

Filtro Eventi di telemetria

Filtra gli eventi personalizzati registrati tramite TrackEvent():


           <Processor type="TelemetryEventFilter" >
                  <Add name="NotNeededNames" value="event1, event2"/>
           </Processor>
  • NotNeededNames: elenco delimitato da virgole di nomi di eventi

Filtro Dati di telemetria traccia

Filtra le tracce dei log registrate usando TrackTrace() o un agente di raccolta del framework di registrazione:


           <Processor type="TraceTelemetryFilter">
                  <Add name="FromSeverityLevel" value="ERROR"/>
           </Processor>
  • I FromSeverityLevel valori validi sono:

    • OFF: filtra tutte le tracce.
    • TRACE: nessun filtro. Uguale al livello TRACE.
    • INFO: filtra il livello DI TRACCIA.
    • AVVISO: filtra TRACCIA e INFO.
    • ERRORE: filtra AVVISI, INFO e TRACE.
    • CRITICO: filtra tutto ma CRITICO.

Filtri personalizzati

Le sezioni seguenti illustrano i passaggi per creare filtri personalizzati.

Codificare il filtro

Nel codice creare una classe che implementa 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;
        }
    }

Richiamare il filtro nel file di configurazione

Ora, in ApplicationInsights.xml:



    <ApplicationInsights>
      <TelemetryProcessors>
        <CustomProcessors>
          <Processor type="com.fabrikam.SuccessFilter">
            <Add name="Successful" value="false"/>
          </Processor>
        </CustomProcessors>
      </TelemetryProcessors>
    </ApplicationInsights>

Richiamare il filtro (Java Spring)

Per le applicazioni basate sul framework Spring, i processori di telemetria personalizzati devono essere registrati nella classe di applicazione principale come bean. Verranno quindi distribuiti automaticamente all'avvio dell'applicazione.

@Bean
public TelemetryProcessor successFilter() {
      return new SuccessFilter();
}

Creare i propri parametri di filtro in application.properties. Usare quindi il framework di configurazione esterna di Spring Boot per passare tali parametri nel filtro personalizzato.

Risoluzione dei problemi

Questa sezione offre un suggerimento per la risoluzione dei problemi.

Il filtro non funziona

Verificare di aver fornito valori di parametro validi. Ad esempio, la durata deve essere espressa da numeri interi. Se i valori non sono validi, il filtro verrà ignorato. Se il filtro personalizzato genera un'eccezione da un costruttore o un metodo impostato, verrà ignorato.

raccolta: metriche delle prestazioni Linux in Application Insights (deprecato)

Per esplorare le metriche delle prestazioni del sistema Linux in Application Insights, installare raccolto insieme al plug-in di Application Insights. Questa soluzione open source raccoglie diverse che relative al sistema e alla rete.

In genere, si userà collectd se è già stato instrumentato il servizio Web Java con Application Insights. Offre più dati per migliorare le prestazioni dell'app o diagnosticare i problemi.

Ottenere la chiave di strumentazione

Nella portale di Azure aprire la risorsa di Application Insights in cui si desidera visualizzare i dati. In alternativa, è possibile creare una nuova risorsa.

Eseguire una copia della chiave di strumentazione, che identifica la risorsa.

Screenshot che mostra il riquadro di panoramica per una risorsa di Application Insights nella portale di Azure con la chiave di strumentazione evidenziata.

Installare collectd e il plug-in

Nei computer server Linux:

  1. Installare collectd versione 5.4.0 o successive.
  2. Scaricare il plug-in writer raccolto di Application Insights. Annotare il numero di versione.
  3. Copiare il plug-in jar in /usr/share/collectd/java.
  4. Modificare /etc/collectd/collectd.conf:
    • Assicurarsi che il plug-in Java sia abilitato.

    • Aggiornare JVMArg per java.class.path includere il file jar seguente. Aggiornare il numero di versione in modo che corrisponda a quello scaricato:

      • /usr/share/collectd/java/applicationinsights-collectd-1.0.5.jar
    • Aggiungere questo frammento di codice usando la chiave di strumentazione dalla risorsa:

      
           LoadPlugin "com.microsoft.applicationinsights.collectd.ApplicationInsightsWriter"
           <Plugin ApplicationInsightsWriter>
              InstrumentationKey "Your key"
           </Plugin>
      

      Di seguito è riportata una parte di un file di configurazione di esempio:

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

Configurare altri plug-in raccolti, che possono raccogliere vari dati da origini diverse.

Riavviare collectd in base al relativo manuale.

Visualizzare i dati in Application Insights

Nella risorsa di Application Insights aprire Metriche e aggiungere grafici. Selezionare le metriche da visualizzare nella categoria Personalizzata .

Per impostazione predefinita, le metriche vengono aggregate per tutti i computer host da cui vengono raccolte le metriche. Per visualizzare le metriche per host, nel riquadro Dettagli grafico attivare Raggruppamento e quindi scegliere di raggruppare tramite CollectD-Host.

Escludere il caricamento di statistiche specifiche

Per impostazione predefinita, il plug-in Application Insights invia tutti i dati raccolti da tutti i plug-in abilitati collectd read .

Per escludere i dati da plug-in o origini dati specifiche:

  • Modificare il file di configurazione.

  • In <Plugin ApplicationInsightsWriter>aggiungere righe di direttiva come quelle della tabella seguente:

    Direttiva Effetto
    Exclude disk Escludere tutti i dati raccolti dal disk plug-in.
    Exclude disk:read,write Escludere le origini denominate read e write dal disk plug-in.

Separare le direttive con un valore NewLine.

Problemi?

Questa sezione offre suggerimenti per la risoluzione dei problemi.

I dati non vengono visualizzati nel portale

Provare queste opzioni:

  • Aprire Cerca per verificare se gli eventi non elaborati sono stati ricevuti. In alcuni casi necessitano di più tempo per la visualizzazione in Esplora metriche.
  • Potrebbe essere necessario impostare eccezioni del firewall per i dati in uscita.
  • Abilitare la traccia nel plug-in di Application Insights. Aggiungere questa riga in <Plugin ApplicationInsightsWriter>:
    • SDKLogger true
  • Aprire un terminale e avviare collectd in modalità dettagliata per visualizzare eventuali problemi che segnalano:
    • sudo collectd -f

Problema noto

Il plug-in di scrittura di Application Insights non è compatibile con determinati plug-in di lettura. Alcuni plug-in a volte inviano NaN, ma il plug-in di Application Insights prevede un numero a virgola mobile.

  • Sintomo: il collectd log mostra gli errori che includono "intelligenza artificiale: ... SintassiErrore: token imprevisto N."
  • Soluzione alternativa: escludere i dati raccolti dai plug-in di scrittura del problema.

Il monitoraggio per applicazioni Micrometer misure le metriche per il codice di applicazione basato su Java Virtual Machine e consente di esportare i dati in sistemi di monitoraggio preferito. Questa sezione illustra come usare Micrometer con Application Insights per applicazioni Spring Boot e non Spring Boot.

Usare Spring Boot 1.5x

Aggiungere le dipendenze seguenti al file pom.xml o build.gradle :

  • Application Insights spring-boot-starter 2.5.0 o versione successiva.
  • Micrometer Registro di sistema di Azure 1.1.0 o versioni successive.
  • Micrometer Spring Legacy 1.1.0 o versione successiva. Esegue il backport del codice autoconfig nel framework Spring.
  • Risorsa ApplicationInsights.

Seguire questa procedura:

  1. Aggiornare il file pom.xml dell'applicazione Spring Boot e aggiungere le dipendenze seguenti:

    <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. Aggiornare il file application.properties o YML con la chiave di strumentazione di Application Insights usando la proprietà seguente:

    azure.application-insights.instrumentation-key=<your-instrumentation-key-here>

  3. Compilare l'applicazione ed eseguirla.

I passaggi precedenti devono essere aggiornati e in esecuzione con metriche pre-aggregazioni automaticamente recuperate in Monitoraggio di Azure.

Usare Spring 2.x

Aggiungere le dipendenze seguenti al file pom.xml o build.gradle :

Seguire questa procedura:

  1. Aggiornare il file pom.xml dell'applicazione Spring Boot e aggiungerne la dipendenza seguente:

    <dependency> 
          <groupId>com.microsoft.azure</groupId>
          <artifactId>azure-spring-boot-metrics-starter</artifactId>
          <version>2.0.7</version>
    </dependency>
    
  2. Aggiornare il file application.properties o YML con la chiave di strumentazione di Application Insights usando la proprietà seguente:

    azure.application-insights.instrumentation-key=<your-instrumentation-key-here>

  3. Compilare l'applicazione ed eseguirla.

I passaggi precedenti dovrebbero essere eseguiti con le metriche preaggregate automaticamente recuperate in Monitoraggio di Azure. Per altre informazioni su come ottimizzare Application Insights Spring Boot Starter, vedere il file leggimi in GitHub.

Metriche predefinite:

  • Le metriche configurate automaticamente per Tomcat, JVM, Logback Metrics, Log4J Metrics, Uptime Metrics, Processor Metrics e FileDescriptorMetrics.
  • Ad esempio, se Netflix Hystrix è presente nel percorso della classe, anche queste metriche vengono recuperate.
  • Le metriche seguenti possono essere disponibili aggiungendo i rispettivi fagioli:
    • CacheMetrics(CaffeineCache, EhCache2, GuavaCacheHazelcastCache, e JCache)
    • DataBaseTableMetrics
    • HibernateMetrics
    • JettyMetrics
    • Metrica di OkHttp3
    • Metrica di Kafka

Disattivare la raccolta automatica delle metriche:

  • Metriche JVM:
    • management.metrics.binders.jvm.enabled=false
  • Metriche Logback:
    • management.metrics.binders.logback.enabled=false
  • Metriche tempo di attività:
    • management.metrics.binders.uptime.enabled=false
  • Metriche processore:
    • 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
  • Metriche di AspectJ se la libreria è in classpath:
    • spring.aop.enabled=false

Nota

Specificare le proprietà precedenti nel file application.properties o application.yml dell'applicazione Spring Boot.

Usare Micrometer con applicazioni Web non Spring Boot

Aggiungere le dipendenze seguenti al file pom.xml o build.gradle :

Seguire questa procedura:

  1. Aggiungere le dipendenze seguenti nel file pom.xml o 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 non è già stato fatto, aggiungere il file ApplicationInsights.xml nella cartella resources. Per altre informazioni, vedere Aggiungere un file di ApplicationInsights.xml.

  3. Esempio di classe Servlet (genera una metrica di timer):

        @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. Esempio d classe di configurazione:

         @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) {
    
           }
         }
    

Per altre informazioni sulle metriche, vedere la documentazione di Micrometer.

Altro codice di esempio su come creare diversi tipi di metriche è disponibile nel repository GitHub ufficiale di Micrometer.

Associare altre raccolte di metriche

Le sezioni seguenti illustrano come raccogliere più metriche.

SpringBoot/Spring

Creare un oggetto bean della rispettiva categoria di metriche. Si supponga, ad esempio, di aver bisogno delle metriche di Guava Cache:

    @Bean
    GuavaCacheMetrics guavaCacheMetrics() {
        Return new GuavaCacheMetrics();
    }

Diverse metriche non sono abilitate per impostazione predefinita, ma possono essere associate nel modo precedente. Per un elenco completo, vedere il repository GitHub di Micrometer.

App non Spring

Aggiungere il codice di associazione seguente al file di configurazione:

    New GuavaCacheMetrics().bind(registry);

Passaggi successivi