Condividi tramite


Guida alla risoluzione dei problemi: Application Insights di Monitoraggio di Azure per Java

Questo articolo fornisce informazioni sulla risoluzione dei problemi comuni che possono verificarsi quando si instrumenta un'applicazione Java usando l'agente Java per Application Insights. Application Insights è una funzionalità del servizio piattaforma monitoraggio di Azure.

Controllare il file di log auto-diagnostico

Per impostazione predefinita, Application Insights Java 3.x produce un file di log denominato applicationinsights.log nella stessa directory che contiene il file applicationinsights-agent-3.2.11.jar .

Questo file di log è il primo posto per verificare la presenza di suggerimenti su eventuali problemi che potrebbero verificarsi.

Se Application Insights non genera un file di log, verificare che l'applicazione Java disponga dell'autorizzazione Di scrittura per la directory che contiene il file applicationinsights-agent-3.2.11.jar .

Se Application Insights non genera ancora un file di log, controllare la presenza di errori nel stdout log dell'applicazione Java. Application Insights Java 3.x dovrebbe registrare eventuali errori che impediscono la registrazione al percorso consueto nel stdout log.

Risolvere i problemi di connettività

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

Se l'agente Java di Application Insights causa il problema di connettività, prendere in considerazione le opzioni seguenti:

  • Verificare il stringa di connessione per la configurazione di Application Insights.

  • Usare Application Insights Java versione 3.4.6 o successiva per verificare che l'archivio chiavi Java contenga un certificato obbligatorio. A tale scopo, abilitare la funzionalità di auto-diagnostica a TRACE livello. Nei log di Application Insights viene visualizzata la voce seguente?

    TRACE c.m.applicationinsights.agent - Certificato radice di Application Insights nell'archivio chiavi Java: false

    Se viene visualizzata questa voce, vedere Importare certificati SSL per importare un certificato radice nell'archivio chiavi Java.

  • Se si usa l'opzione -Djsse.enableSNIExtension=false , provare a eseguire l'agente senza tale opzione. Da Application Insights Java versione 3.4.5, se si specifica -Djsse.enableSNIExtension=false, nei log viene visualizzata la voce di errore seguente:

    WARN c.m.applicationinsights.agent - Viene rilevata la proprietà di sistema -Djsse.enableSNIExtension=false. Se si verificano problemi di connessione ad Application Insights, rimuovere questo problema.

  • Se nessuna delle opzioni precedenti è utile, è possibile usare gli strumenti per la risoluzione dei problemi.

L'avvio della macchina virtuale Java (JVM) non riesce

Se la macchina virtuale Java (JVM) non viene avviata, potrebbe restituire un messaggio "Errore durante l'apertura del file ZIP o del manifesto JAR mancante". Per risolvere questo problema, vedere la tabella seguente.

Problema Azione
Il file di archivio Java (JAR) per l'agente non viene trovato. Assicurarsi di specificare un percorso JAR dell'agente valido nell'argomento -javaagent JVM.
Il file JAR dell'agente potrebbe essere danneggiato durante il trasferimento di file. Provare a scaricare di nuovo il file JAR dell'agente.

L'avvio delle app Java tomcat richiede alcuni minuti

Se Application Insights è stato abilitato per monitorare l'applicazione Tomcat, potrebbe verificarsi un ritardo di diversi minuti nel tempo necessario per avviare l'applicazione. Questo ritardo è causato perché Tomcat tenta di analizzare i file JAR di Application Insights durante l'avvio dell'applicazione. Per velocizzare l'ora di inizio dell'applicazione, è possibile escludere i file JAR di Application Insights dall'elenco dei file analizzati. L'analisi di questi file JAR non è necessaria.

Eseguire l'aggiornamento da Application Insights Java 2.x SDK

Se si usa già Application Insights Java 2.x SDK nell'applicazione, è possibile continuare a usarlo. Application Insights Java 3.L'agente x rileva, acquisisce e correla tutti i dati di telemetria personalizzati inviati tramite 2.x SDK. Impedisce inoltre la telemetria duplicata eliminando qualsiasi raccolta automatica 2.x SDK. Per altre informazioni, vedere Eseguire l'aggiornamento da Java 2.x SDK.

Eseguire l'aggiornamento dall'anteprima di Application Insights Java 3.0

Se si esegue l'aggiornamento dall'agente Java 3.0 Preview, esaminare attentamente tutte le opzioni di configurazione. La struttura JSON viene modificata nella versione di disponibilità generale 3.0.

Queste modifiche includono:

  • Il nome del file di configurazione è cambiato da ApplicationInsights.json a applicationinsights.json.

  • Il instrumentationSettings nodo non è più presente. Tutto il contenuto in instrumentationSettings viene spostato al livello radice.

  • I nodi di configurazione, ad esempio sampling, jmxMetricsinstrumentation, e heartbeat vengono spostati all'esterno del preview livello radice.

Alcune registrazioni non vengono raccolte automaticamente

La registrazione viene acquisita solo se soddisfa i criteri seguenti:

  • Soddisfa il livello configurato per il framework di registrazione.

  • Soddisfa il livello configurato per Application Insights.

Ad esempio, se il framework di registrazione è configurato per registrare WARN (e versioni successive) dal com.example pacchetto e Application Insights è configurato per l'acquisizione INFO (e versioni successive), Application Insights acquisisce WARN solo (e versioni successive) dal com.example pacchetto.

Per assicurarsi che una determinata istruzione di registrazione soddisfi la soglia configurata dei framework di registrazione, verificare che venga visualizzata nel normale log applicazioni (nel file o nella console).

Si noti inoltre che se un oggetto eccezione viene passato al logger, il messaggio di log (e i dettagli dell'oggetto eccezione) viene visualizzato nella portale di Azure nella exceptions tabella anziché nella traces tabella. Per visualizzare i messaggi di log in entrambe le traces tabelle e exceptions , eseguire la query Logs (Kusto) seguente:

union traces, (exceptions | extend message = outerMessage)
| project timestamp, message, itemType

Per altre informazioni, vedere la configurazione di registrazione raccolta automatica.

Importare certificati SSL

Questa sezione illustra come risolvere e correggere le eccezioni correlate ai certificati SSL (Secure Sockets Layer) quando si usa l'agente Java.

Esistono due percorsi diversi per risolvere questo problema:

  • Se si usa un archivio chiavi Java predefinito
  • Se si usa un archivio chiavi Java personalizzato

Se non si è certi del percorso da seguire, verificare se si dispone dell'argomento JVM, -Djavax.net.ssl.trustStore=.... Se non si ha questo argomento JVM, è probabile che si usi l'archivio chiavi Java predefinito. Se si dispone di questo argomento JVM, probabilmente si usa un archivio chiavi personalizzato e l'argomento JVM punta all'archivio chiavi personalizzato.

Se si usa l'archivio chiavi Java predefinito

L'archivio chiavi Java predefinito include in genere tutti i certificati radice della CA. Tuttavia, potrebbero esserci alcune eccezioni. Ad esempio, un certificato radice diverso potrebbe firmare il certificato dell'endpoint di inserimento. Per risolvere il problema, è consigliabile seguire questa procedura:

  1. Controllare se il certificato SSL usato per firmare l'endpoint di Application Insights è già presente nell'archivio chiavi predefinito. Per impostazione predefinita, i certificati CA attendibili vengono archiviati in $JAVA_HOME/jre/lib/security/cacerts. Per elencare i certificati in un archivio chiavi Java, usare il comando seguente:

    keytool -list -v -keystore <path-to-keystore-file>

    È possibile reindirizzare l'output a un file temporaneo in modo che sia facile eseguire ricerche in un secondo momento:

    keytool -list -v -keystore $JAVA_HOME/jre/lib/security/cacerts > temp.txt

  2. Dopo aver ottenuto l'elenco dei certificati, seguire la procedura per scaricare il certificato SSL usato per firmare l'endpoint di Application Insights.

    Dopo aver scaricato il certificato, generare un hash SHA-1 nel certificato usando il comando seguente:

    keytool -printcert -v -file "<downloaded-ssl-certificate>.cer"

    Copiare il valore SHA-1 e verificare se questo valore è presente nel file temp.txt salvato in precedenza. Se non è possibile trovare il valore SHA-1 nel file temporaneo, il certificato SSL scaricato non è presente nell'archivio chiavi Java predefinito.

  3. Importare il certificato SSL nell'archivio chiavi Java predefinito usando il comando seguente:

    keytool -import -file "<certificate-file>" -alias "<some-meaningful-name>" -keystore "<path-to-cacerts-file>"

    In questo esempio, il comando legge come segue:

    keytool -import -file "<downloaded-ssl-certificate-file>" -alias "<some-meaningful-name>" -keystore $JAVA_HOME/jre/lib/security/cacerts

Se si usa un archivio chiavi Java personalizzato

Se si usa un archivio chiavi Java personalizzato, potrebbe essere necessario importare i certificati SSL per gli endpoint di Application Insights in tale archivio chiavi. Per risolvere questo problema, è consigliabile eseguire i due passaggi seguenti:

  1. Seguire questa procedura per scaricare il certificato SSL dall'endpoint di Application Insights.

  2. Eseguire il comando seguente per importare il certificato SSL nell'archivio chiavi Java personalizzato:

    keytool -importcert -alias <your-ssl-certificate> -file "<your-downloaded-ssl-certificate-name>.cer" -keystore "<your-keystore-name>" -storepass "<your-keystore-password>" -noprompt

Procedura per scaricare il certificato SSL

Note

Le istruzioni di download dei certificati SSL seguenti sono state convalidate nei browser seguenti:

  • Google Chrome
  • Microsoft Edge
  1. Aprire l'indirizzo https://westeurope-5.in.applicationinsights.azure.com/api/ping URL in un Web browser.

  2. Nella barra degli indirizzi del browser selezionare l'icona Visualizza informazioni sito (un simbolo di blocco accanto all'indirizzo).

  3. Selezionare Connessione sicura.

  4. Selezionare l'icona Mostra certificato .

  5. Nella finestra di dialogo Visualizzatore certificati selezionare la scheda Dettagli.

  6. Nell'elenco Gerarchia certificati selezionare il certificato da scaricare. Vengono visualizzati il certificato radice della CA, il certificato intermedio e il certificato SSL foglia.

  7. Selezionare il pulsante Esporta .

  8. Nella finestra di dialogo Salva con nome passare alla directory in cui si desidera salvare il file del certificato (con estensione crt) e quindi selezionare Salva.

  9. Per uscire dalla finestra di dialogo Visualizzatore certificati , selezionare il pulsante Chiudi (X).

Avviso

È necessario ripetere questi passaggi per ottenere il nuovo certificato prima della scadenza del certificato corrente. È possibile trovare le informazioni sulla scadenza nella scheda Dettagli della finestra di dialogo Visualizzatore certificati .

Dopo aver selezionato il certificato nell'elenco Gerarchia certificati , trovare il nodo Validità nell'elenco Campi certificato. Selezionare Not Before all'interno di tale nodo e quindi esaminare la data e l'ora visualizzate nella casella Valore campo. Questo timestamp indica quando il nuovo certificato diventa valido. Analogamente, selezionare Not After all'interno del nodo Validità per informazioni sulla scadenza del nuovo certificato.

Informazioni su UnknownHostException

Se questa eccezione viene visualizzata dopo l'aggiornamento a una versione dell'agente Java successiva alla 3.2.0, potrebbe essere possibile correggere l'eccezione aggiornando la rete per risolvere il nuovo endpoint visualizzato nell'eccezione. Il motivo della differenza tra le versioni di Application Insights è che le versioni successive alla versione 3.2.0 puntano al nuovo endpoint v2.1/trackdi inserimento, rispetto a .v2/track Il nuovo endpoint di inserimento reindirizza automaticamente l'utente all'endpoint di inserimento (nuovo endpoint visualizzato in eccezione) più vicino alla risorsa di archiviazione per la risorsa di Application Insights.

Pacchetti di crittografia mancanti

Se l'agente Java di Application Insights rileva che non sono presenti pacchetti di crittografia supportati dagli endpoint a cui si connette, l'agente avvisa l'utente e fornisce un collegamento alle suite di crittografia mancanti.

Informazioni di base sulle suite di crittografia

I pacchetti di crittografia vengono in gioco prima che un'applicazione client e un server scambiano informazioni tramite una connessione SSL o TLS (Transport Layer Security). L'applicazione client avvia un handshake SSL. Parte di questo processo implica la notifica al server sui pacchetti di crittografia supportati. Il server riceve tali informazioni e confronta le suite di crittografia supportate dall'applicazione client con gli algoritmi supportati. Se il server trova una corrispondenza, invia una notifica all'applicazione client e viene stabilita una connessione sicura. Se non trova una corrispondenza, il server rifiuta la connessione.

Come determinare i pacchetti di crittografia lato client

In questo caso, il client è la JVM in cui è in esecuzione l'applicazione instrumentata. A partire dalla versione 3.2.5, Application Insights Java registra un messaggio di avviso se i pacchetti di crittografia mancanti potrebbero causare errori di connessione a uno degli endpoint di servizio.

Se si usa una versione precedente di Application Insights Java, compilare ed eseguire il programma Java seguente per ottenere l'elenco delle suite di crittografia supportate nella JVM:

import javax.net.ssl.SSLServerSocketFactory;

public class Ciphers {
    public static void main(String[] args) {
        SSLServerSocketFactory ssf = (SSLServerSocketFactory) SSLServerSocketFactory.getDefault();
        String[] defaultCiphers = ssf.getDefaultCipherSuites();
        System.out.println("Default\tCipher");
        for (int i = 0; i < defaultCiphers.length; ++i) {
            System.out.print('*');
            System.out.print('\t');
            System.out.println(defaultCiphers[i]);
        }
    }
}

Gli endpoint di Application Insights supportano le suite di crittografia seguenti:

  • TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
  • TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
  • TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384
  • TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256

Come determinare i pacchetti di crittografia lato server

In questo caso, il lato server è l'endpoint di inserimento di Application Insights o l'endpoint delle metriche live di Application Insights. È possibile usare uno strumento online, ad esempio SSLLABS , per determinare le suite di crittografia previste basate sull'URL dell'endpoint.

Come aggiungere le suite di crittografia mancanti

Se si usa Java 9 o versione successiva, verificare che la JVM includa il jdk.crypto.cryptoki modulo nella cartella jmods . Inoltre, se si sta creando un runtime Java personalizzato usando jlink, assicurarsi di includere lo stesso modulo.

In caso contrario, questi pacchetti di crittografia dovrebbero già far parte delle moderne distribuzioni Java 8+. È consigliabile controllare l'origine della distribuzione Java installata per esaminare il motivo per cui i provider di sicurezza nel file di configurazione java.security della distribuzione Java differiscono dalle distribuzioni Java standard.

Tempo di avvio lento in Application Insights

Java 8

Java 8 presenta un problema noto correlato alla verifica della firma del file JAR degli agenti Java. Questo problema può aumentare il tempo di avvio in Application Insights. Per risolvere questo problema, è possibile applicare una delle opzioni seguenti:

Java versione successiva alla versione 8

Per risolvere questo problema con l'agente Java di Application Insights, provare uno dei metodi seguenti:

È anche possibile provare le soluzioni di monitoraggio per Java native applicabili anche a un'applicazione basata su JVM:

  • Con Spring Boot, la distribuzione Microsoft dello starter OpenTelemetry.
  • Con Quarkus, l'utilità di esportazione di Quarkus Opentelemetry per Microsoft Azure.

Informazioni sugli ID delle operazioni duplicate

La logica dell'applicazione può comportare il riutilizzo di un ID operazione da parte di più elementi di telemetria, come illustrato in questo esempio. La duplicazione potrebbe provenire anche dalle richieste in ingresso. Per identificarlo, usare uno dei metodi seguenti:

  • Abilitare l'acquisizione dell'intestazione traceparent nel file applicationinsigths.json come indicato di seguito:

      {
        "preview": {
          "captureHttpServerHeaders": {
            "requestHeaders": [
              "traceparent"
            ]
          }
        }
      }
    
  • Abilitare la diagnostica automatica a livello di DEBUG e riavviare l'applicazione.

    Nell'esempio di log seguente l'ID operazione proviene da una richiesta in ingresso, non da Application Insights:

    {"ver":1,"name":"Request",...,"ai.operation.id":"4e757357805f4eb18705abd24326b550)","ai.operation.parentId":"973487efc3db7d03"},"data":{"baseType":"RequestData","baseData":{...,"properties":{"http.request.header.traceparent":"00-4e757357805f4eb18705abd24326b550-973487efc3db7d03-01", ...}}}}
    

Dichiarazione di non responsabilità sulle informazioni di terze parti

I prodotti di terzi citati in questo articolo sono prodotti da società indipendenti da Microsoft. Microsoft non rilascia alcuna garanzia implicita o esplicita relativa alle prestazioni o all'affidabilità di tali prodotti

Contattaci per ricevere assistenza

In caso di domande o bisogno di assistenza, creare una richiesta di supporto tecnico oppure formula una domanda nel Supporto della community di Azure. È possibile anche inviare un feedback sul prodotto al feedback della community di Azure.