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 autodiagnoso

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 in cui verificare la presenza di suggerimenti su eventuali problemi riscontrati.

Se Application Insights non genera un file di log, verificare che l'applicazione Java disponga dell'autorizzazione 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 deve registrare eventuali errori che potrebbero impedirne la registrazione nella posizione consueta 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 i client REST non elaborati da PowerShell o eseguire comandi curl. Vedere Risolvere i problemi di telemetria delle applicazioni mancanti in Application Insights di Monitoraggio di Azure.

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

  • Verificare la 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 con Application Insights, rimuoverlo.

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

Impossibile avviare la macchina virtuale Java (JVM)

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

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

L'avvio delle app Tomcat Java 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 dal tentativo di Tomcat 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. x agent rileva, acquisisce e correla tutti i dati di telemetria personalizzati inviati tramite il 2. x SDK. Impedisce inoltre la telemetria duplicata eliminando qualsiasi raccolta automatica di 2. x SDK lo fa. 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 di anteprima java 3.0, esaminare attentamente tutte le opzioni di configurazione . La struttura JSON viene modificata nella versione a 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 come sampling, jmxMetrics, instrumentatione heartbeat vengono spostati al di fuori 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 registro applicazioni consueto (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 nelle 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 della registrazione raccolta automaticamente.

Importare certificati SSL

Questa sezione consente di risolvere i problemi ed eventualmente 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 dispone di questo argomento JVM, probabilmente si usa 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 ha in genere già tutti i certificati radice ca. Tuttavia, potrebbero esserci alcune eccezioni. Ad esempio, un certificato radice diverso potrebbe firmare il certificato dell'endpoint di inserimento. È consigliabile seguire questa procedura per risolvere il problema:

  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 visualizzato 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 viene letto 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 il 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

Passaggi per scaricare il certificato SSL

Nota

Le istruzioni di download del certificato 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 sul sito (un simbolo di blocco accanto all'indirizzo).

  3. Selezionare Connessione protetta.

  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

Sarà 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 Validity (Validità ) per informazioni sulla scadenza del nuovo certificato.

Informazioni su UnknownHostException

Se viene visualizzata questa eccezione 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 3.2.0 puntano al nuovo endpoint v2.1/trackdi inserimento , rispetto alla versione precedente v2/track. Il nuovo endpoint di inserimento reindirizza automaticamente l'utente all'endpoint di inserimento (nuovo endpoint visualizzato in eccezione) più vicino all'archiviazione per la risorsa di Application Insights.

Suite 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 ai pacchetti di crittografia mancanti.

Sfondo nelle suite di crittografia

I pacchetti di crittografia entrano in gioco prima che un'applicazione client e un server scambino informazioni su una connessione SSL o Transport Layer Security (TLS). L'applicazione client avvia un handshake SSL. Parte di questo processo comporta la notifica al server in merito ai pacchetti di crittografia supportati. Il server riceve tali informazioni e confronta i pacchetti di crittografia supportati dall'applicazione client con gli algoritmi supportati. Se il server trova una corrispondenza, 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 dei pacchetti di crittografia supportati 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 i pacchetti 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 di Application Insights Live. È possibile usare uno strumento online come SSLLABS per determinare i pacchetti di crittografia previsti basati sull'URL dell'endpoint.

Come aggiungere i pacchetti di crittografia mancanti

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

In caso contrario, questi pacchetti di crittografia devono già far parte delle distribuzioni Java 8+ moderne. È consigliabile controllare l'origine della distribuzione Java installata per verificare 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 e Java 8

Java 8 presenta un problema noto correlato alla verifica della firma 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:

In alternativa, è possibile provare la funzionalità sperimentale seguente: Miglioramento del tempo di avvio per un numero limitato di core CPU. Se si verificano problemi durante l'uso di questa funzionalità, inviare commenti e suggerimenti.

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.