Guide de résolution des problèmes : Azure Monitor Application Insights pour Java

Cet article fournit des informations de dépannage pour résoudre les problèmes courants qui peuvent se produire lorsque vous instrumentez une application Java à l’aide de l’agent Java pour Application Insights. Application Insights est une fonctionnalité du service de plateforme Azure Monitor.

Vérifier le fichier journal d’auto-diagnostic

Par défaut, Application Insights Java 3. x produit un fichier journal nommé applicationinsights.log dans le même répertoire que celui qui contient le fichier applicationinsights-agent-3.2.11.jar .

Ce fichier journal est le premier endroit à case activée pour obtenir des conseils sur les problèmes que vous pourriez rencontrer.

Si Application Insights ne génère pas de fichier journal, case activée pour vous assurer que votre application Java dispose de l’autorisation d’écriture sur le répertoire qui contient le fichier applicationinsights-agent-3.2.11.jar.

Si Application Insights ne génère toujours pas de fichier journal, case activée le stdout journal à partir de votre application Java en cas d’erreurs. Application Insights Java 3. x doit enregistrer toutes les erreurs qui l’empêcheraient de se journaliser à son emplacement habituel dans le stdout journal.

Résoudre les problèmes de connectivité

Les kits de développement logiciel (SDK) et les agents Application Insights envoient des données de télémétrie à ingérer en tant qu’appels REST sur nos points de terminaison d’ingestion. Pour tester la connectivité de votre serveur web ou ordinateur hôte d’application aux points de terminaison du service d’ingestion, utilisez des clients REST bruts à partir de PowerShell ou exécutez des commandes curl. Consultez Résoudre les problèmes de télémétrie d’application manquantes dans Azure Monitor Application Insights.

Si l’agent Java Application Insights provoque le problème de connectivité, envisagez les options suivantes :

  • Vérifiez les chaîne de connexion pour la configuration d’Application Insights.

  • Utilisez Application Insights Java version 3.4.6 ou ultérieure pour vérifier que le magasin de clés Java contient un certificat requis. Pour ce faire, activez la fonctionnalité auto-diagnostics au TRACE niveau. Dans les journaux Application Insights, voyez-vous l’entrée suivante ?

    TRACE c.m.applicationinsights.agent - Certificat racine Application Insights dans le magasin de clés Java : false

    Si vous voyez cette entrée, reportez-vous à Importer des certificats SSL pour importer un certificat racine dans le magasin de clés Java.

  • Si vous utilisez l’option -Djsse.enableSNIExtension=false , essayez d’exécuter l’agent sans cette option. À partir d’Application Insights Java version 3.4.5, si vous spécifiez -Djsse.enableSNIExtension=false, l’entrée d’erreur suivante s’affiche dans les journaux :

    WARN c.m.applicationinsights.agent : la propriété système -Djsse.enableSNIExtension=false est détectée. Si vous rencontrez des problèmes de connexion avec Application Insights, supprimez-le.

  • Si aucune des options précédentes n’est utile, vous pouvez utiliser des outils de résolution des problèmes.

La machine virtuelle Java (JVM) ne parvient pas à démarrer

Si la machine virtuelle Java (JVM) ne démarre pas, elle peut renvoyer un message « Erreur lors de l’ouverture du fichier zip ou du manifeste JAR manquant ». Pour résoudre ce problème, consultez le tableau suivant.

Problème Action
Le fichier d’archive Java (JAR) de l’agent est introuvable. Veillez à spécifier un chemin JAR d’agent valide dans l’argument -javaagent JVM.
Le fichier JAR de l’agent a peut-être été endommagé pendant le transfert de fichiers. Essayez de télécharger à nouveau le fichier JAR de l’agent.

Le démarrage des applications Java Tomcat prend plusieurs minutes

Si vous avez activé Application Insights pour surveiller votre application Tomcat, il peut y avoir un délai de plusieurs minutes dans le temps nécessaire au démarrage de l’application. Ce délai est dû au fait que Tomcat tente d’analyser les fichiers JAR Application Insights au démarrage de l’application. Pour accélérer l’heure de démarrage de l’application, vous pouvez exclure les fichiers JAR Application Insights de la liste des fichiers analysés. L’analyse de ces fichiers JAR n’est pas nécessaire.

Mettez à niveau à partir d’Application Insights Java 2. X SDK

Si vous utilisez déjà Application Insights Java 2. X SDK dans votre application, vous pouvez continuer à l’utiliser. Application Insights Java 3. X agent détecte, capture et met en corrélation toutes les données de télémétrie personnalisées que vous envoyez via le 2. X SDK. Il empêche également les données de télémétrie en double en supprimant toute collection automatique que le 2. X SDK le fait. Pour plus d’informations, consultez Mettre à niveau à partir de Java 2.X SDK.

Mettre à niveau à partir d’Application Insights Java 3.0 (préversion)

Si vous effectuez une mise à niveau à partir de l’agent Java 3.0 Preview, examinez attentivement toutes les options de configuration . La structure JSON a été modifiée dans la version 3.0 en disponibilité générale (GA).

Ces modifications sont notamment les suivantes :

  • Le nom du fichier de configuration est passé de ApplicationInsights.json à applicationinsights.json.

  • Le instrumentationSettings nœud n’est plus présent. Tout le contenu dans instrumentationSettings est déplacé vers le niveau racine.

  • Les nœuds de configuration tels que sampling, jmxMetrics, instrumentationet heartbeat sont déplacés hors du preview niveau racine.

Une certaine journalisation n’est pas collectée automatiquement

La journalisation est capturée uniquement si elle répond aux critères suivants :

  • Il répond au niveau configuré pour l’infrastructure de journalisation.

  • Il répond au niveau configuré pour Application Insights.

Par exemple, si votre infrastructure de journalisation est configurée pour journaliser WARN (et au-dessus) à partir du com.example package, et si Application Insights est configuré pour capturer INFO (et versions ultérieures WARN ), Application Insights capture uniquement (et au-dessus) à partir du com.example package.

Pour vous assurer qu’une instruction de journalisation particulière respecte le seuil configuré des frameworks de journalisation, vérifiez qu’elle apparaît dans votre journal d’application habituel (dans le fichier ou la console).

Notez également que si un objet d’exception est passé à l’enregistreur d’événements, le message de journal (et les détails de l’objet d’exception) s’affiche dans le Portail Azure dans la exceptions table au lieu de la traces table. Pour afficher les messages de journal dans les traces tables et exceptions , exécutez la requête Journaux (Kusto) suivante :

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

Pour plus d’informations, consultez la configuration de la journalisation collectée automatiquement.

Importer des certificats SSL

Cette section vous aide à résoudre les problèmes et éventuellement à corriger les exceptions liées aux certificats SSL (Secure Sockets Layer) lorsque vous utilisez l’agent Java.

Il existe deux chemins différents pour résoudre ce problème :

  • Si vous utilisez un magasin de clés Java par défaut
  • Si vous utilisez un magasin de clés Java personnalisé

Si vous ne savez pas quel chemin suivre, case activée pour voir si vous disposez de l’argument JVM, -Djavax.net.ssl.trustStore=.... Si vous n’avez pas cet argument JVM, vous utilisez probablement le magasin de clés Java par défaut. Si vous avez cet argument JVM, vous utilisez probablement un magasin de clés personnalisé, et l’argument JVM vous pointe vers votre magasin de clés personnalisé.

Si vous utilisez le magasin de clés Java par défaut

Le magasin de clés Java par défaut possède généralement déjà tous les certificats racine de l’autorité de certification. Toutefois, il peut y avoir quelques exceptions. Par exemple, un autre certificat racine peut signer le certificat de point de terminaison d’ingestion. Nous vous recommandons de suivre ces étapes pour résoudre ce problème :

  1. Vérifiez si le certificat SSL utilisé pour signer le point de terminaison Application Insights est déjà présent dans le magasin de clés par défaut. Par défaut, les certificats d’autorité de certification approuvés sont stockés dans $JAVA_HOME/jre/lib/security/cacerts. Pour répertorier les certificats dans un magasin de clés Java, utilisez la commande suivante :

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

    Vous pouvez rediriger la sortie vers un fichier temporaire afin de faciliter la recherche ultérieurement :

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

  2. Une fois que vous avez la liste des certificats, suivez les étapes pour télécharger le certificat SSL utilisé pour signer le point de terminaison Application Insights.

    Après avoir téléchargé le certificat, générez un hachage SHA-1 sur le certificat à l’aide de la commande suivante :

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

    Copiez la valeur SHA-1 et case activée si cette valeur est présente dans le fichier temp.txt que vous avez enregistré précédemment. Si vous ne trouvez pas la valeur SHA-1 dans le fichier temporaire, le certificat SSL téléchargé est manquant dans le magasin de clés Java par défaut.

  3. Importez le certificat SSL dans le magasin de clés Java par défaut à l’aide de la commande suivante :

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

    Dans cet exemple, la commande se lit comme suit :

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

Si vous utilisez un magasin de clés Java personnalisé

Si vous utilisez un magasin de clés Java personnalisé, vous devrez peut-être importer les certificats SSL pour les points de terminaison Application Insights dans ce magasin de clés. Nous vous recommandons les deux étapes suivantes pour résoudre ce problème :

  1. Suivez ces étapes pour télécharger le certificat SSL à partir du point de terminaison Application Insights.

  2. Exécutez la commande suivante pour importer le certificat SSL dans le magasin de clés Java personnalisé :

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

Étapes de téléchargement du certificat SSL

Remarque

Les instructions de téléchargement de certificat SSL suivantes ont été validées sur les navigateurs suivants :

  • Google Chrome
  • Microsoft Edge
  1. Ouvrez l’adresse https://westeurope-5.in.applicationinsights.azure.com/api/ping URL dans un navigateur web.

  2. Dans la barre d’adresse du navigateur, sélectionnez l’icône Afficher les informations du site (symbole de verrou situé en regard de l’adresse).

  3. Sélectionnez Connexion sécurisée.

  4. Sélectionnez l’icône Afficher le certificat .

  5. Dans la boîte de dialogue Visionneuse de certificats, sélectionnez l’onglet Détails .

  6. Dans la liste Hiérarchie des certificats, sélectionnez le certificat que vous souhaitez télécharger. (Le certificat racine de l’autorité de certification, le certificat intermédiaire et le certificat SSL feuille sont affichés.)

  7. Sélectionnez le bouton Exporter .

  8. Dans la boîte de dialogue Enregistrer sous , accédez au répertoire dans lequel vous souhaitez enregistrer le fichier de certificat (.crt), puis sélectionnez Enregistrer.

  9. Pour quitter la boîte de dialogue Visionneuse de certificats, sélectionnez le bouton Fermer (X).

Avertissement

Vous devez répéter ces étapes pour obtenir le nouveau certificat avant l’expiration du certificat actuel. Vous trouverez les informations d’expiration sous l’onglet Détails de la boîte de dialogue Visionneuse de certificats.

Après avoir sélectionné le certificat dans la liste Hiérarchie de certificats, recherchez le nœud Validité dans la liste Champs de certificat . Sélectionnez Pas avant dans ce nœud, puis examinez la date et l’heure affichées dans la zone Valeur du champ . Cet horodatage indique quand le nouveau certificat devient valide. De même, sélectionnez Not After dans le nœud Validité pour savoir quand le nouveau certificat expire.

Présentation de UnknownHostException

Si vous voyez cette exception après la mise à niveau vers une version de l’agent Java ultérieure à la version 3.2.0, vous pourrez peut-être corriger l’exception en mettant à niveau votre réseau pour résoudre le nouveau point de terminaison affiché dans l’exception. La raison de la différence entre les versions d’Application Insights est que les versions postérieures à la version 3.2.0 pointent vers le nouveau point de terminaison v2.1/trackd’ingestion , par rapport à l’ancienne v2/track. Le nouveau point de terminaison d’ingestion vous redirige automatiquement vers le point de terminaison d’ingestion (nouveau point de terminaison affiché dans l’exception) le plus proche du stockage de votre ressource Application Insights.

Suites de chiffrement manquantes

Si l’agent Java Application Insights détecte que vous n’avez aucune des suites de chiffrement prises en charge par les points de terminaison auxquels il se connecte, l’agent vous alerte et fournit un lien vers les suites de chiffrement manquantes.

Arrière-plan sur les suites de chiffrement

Les suites de chiffrement entrent en jeu avant qu’une application cliente et un serveur échangent des informations via une connexion SSL ou TLS (Transport Layer Security). L’application cliente lance une négociation SSL. Une partie de ce processus implique d’informer le serveur des suites de chiffrement qu’il prend en charge. Le serveur reçoit ces informations et compare les suites de chiffrement prises en charge par l’application cliente avec les algorithmes qu’elle prend en charge. Si le serveur trouve une correspondance, il avertit l’application cliente et une connexion sécurisée est établie. S’il ne trouve pas de correspondance, le serveur refuse la connexion.

Comment déterminer les suites de chiffrement côté client

Dans ce cas, le client est la machine virtuelle JVM sur laquelle votre application instrumentée s’exécute. À compter de la version 3.2.5, Application Insights Java enregistre un message d’avertissement si des suites de chiffrement manquantes peuvent provoquer des échecs de connexion à l’un des points de terminaison de service.

Si vous utilisez une version antérieure d’Application Insights Java, compilez et exécutez le programme Java suivant pour obtenir la liste des suites de chiffrement prises en charge dans votre machine virtuelle 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]);
        }
    }
}

Les points de terminaison Application Insights prennent en charge les suites de chiffrement suivantes :

  • 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

Comment déterminer les suites de chiffrement côté serveur

Dans ce cas, le côté serveur est le point de terminaison d’ingestion Application Insights ou le point de terminaison des métriques En direct Application Insights. Vous pouvez utiliser un outil en ligne tel que SSLLABS pour déterminer les suites de chiffrement attendues basées sur l’URL du point de terminaison.

Comment ajouter les suites de chiffrement manquantes

Si vous utilisez Java 9 ou une version ultérieure, case activée pour vous assurer que la machine virtuelle JVM inclut le jdk.crypto.cryptoki module dans le dossier jmods. En outre, si vous créez un runtime Java personnalisé à l’aide jlinkde , veillez à inclure le même module.

Sinon, ces suites de chiffrement doivent déjà faire partie des distributions Java 8+ modernes. Nous vous recommandons d’case activée la source de votre distribution Java installée pour examiner pourquoi les fournisseurs de sécurité dans le fichier de configuration java.security de cette distribution Java diffèrent des distributions Java standard.

Temps de démarrage lent dans Application Insights et Java 8

Java 8 présente un problème connu lié à la vérification de la signature de fichier JAR des agents Java. Ce problème peut augmenter le temps de démarrage dans Application Insights. Pour résoudre ce problème, vous pouvez appliquer l’une des options suivantes :

Vous pouvez également essayer la fonctionnalité expérimentale suivante : Amélioration du temps de démarrage pour un nombre limité de cœurs de processeur. Si vous rencontrez des problèmes lors de l’utilisation de cette fonctionnalité, envoyez-nous vos commentaires.

Exclusion de responsabilité de tiers

Les produits tiers mentionnés dans le présent article sont fabriqués par des sociétés indépendantes de Microsoft. Microsoft exclut toute garantie, implicite ou autre, concernant les performances ou la fiabilité de ces produits.

Contactez-nous pour obtenir de l’aide

Pour toute demande ou assistance, créez une demande de support ou posez une question au support de la communauté Azure. Vous pouvez également soumettre des commentaires sur les produits à la communauté de commentaires Azure.