Résoudre les problèmes courants liés à Azure Spring Apps

Remarque

Azure Spring Apps est le nouveau nom du service Azure Spring Cloud. Bien que le service ait un nouveau nom, vous verrez l’ancien nom à divers endroits pendant un certain temps, car nous travaillons à mettre à jour les ressources telles que les captures d’écran, les vidéos et les diagrammes.

Cet article s’applique au : Niveau ✔️ De base/Standard ✔️ Entreprise

Cet article fournit des instructions pour résoudre les problèmes de développement relatifs à Azure Spring Apps. Pour plus d’informations, consultez Questions fréquentes (FAQ) sur Azure Spring Apps.

Problèmes liés à la disponibilité, aux performances et aux applications

Impossible de démarrer mon application

Quand votre application ne démarre pas, vous pouvez constater que son point de terminaison ne peut pas être connecté ou qu’elle retourne une erreur 502 après plusieurs tentatives.

Pour résoudre ce problème, exportez les journaux vers Azure Log Analytics. La table des journaux des applications Spring est nommée AppPlatformLogsforSpring. Pour en savoir plus, consultez Analyser les journaux et les métriques avec les paramètres de diagnostic.

Le message d’erreur suivant peut s’afficher dans vos journaux : org.springframework.context.ApplicationContextException: Unable to start web server

Le message indique l’un des deux problèmes probables :

  • L’un des beans ou l’une de ses dépendances est manquante.
  • L’une des propriétés du bean est manquante ou non valide. Dans ce cas, « java.lang.IllegalArgumentException » s’affiche.

Les liaisons de service peuvent également provoquer des échecs de démarrage de l’application. Pour interroger les journaux, utilisez les mots clés associés aux services liés. Par exemple, supposons que votre application ait une liaison à une instance MySQL qui est définie avec l’heure système locale. Si l’application ne parvient pas à démarrer, le message d’erreur suivant peut s’afficher dans le journal :

« java.sql.SQLException : La valeur de fuseau horaire du serveur “Temps universel coordonné” n’est pas reconnue ou représente plus d’un fuseau horaire. »

Pour résoudre cette erreur, accédez à la section server parameters de votre instance MySQL et, pour la valeur time_zone, remplacez SYSTEM par +0:00.

Mon application se bloque ou déclenche une erreur inattendue

Quand vous déboguez des incidents d’application, commencez par vérifier l’état d’exécution et l’état de détection de l’application. Pour ce faire, accédez à Applications dans le Portail Azure pour vérifier que les états de toutes les applications sont En cours d’exécution et En service.

  • Si l’état est En cours d’exécution, mais que l’état de détection n’est pas En service, accédez à la section « Mon application ne peut pas être inscrite ».

  • Si l’état de détection est En service, accédez à Métriques pour vérifier l’intégrité de l’application. Inspectez les métriques suivantes :

    • tomcat.global.error :

      Toutes les exceptions d’application Spring sont comptées ici. Si ce nombre est important, accédez à Azure Log Analytics pour inspecter vos journaux d’applications.

    • jvm.memory.max :

      Quantité maximale de mémoire disponible pour l’application. La quantité peut être indéfinie, ou, si elle est définie, peut changer au fil du temps. Si elle est définie, la quantité de mémoire utilisée et allouée sera toujours inférieure ou égale au maximum. Toutefois, une allocation de mémoire peut échouer avec un message OutOfMemoryError si elle tente d’augmenter la mémoire utilisée de telle sorte que used > committed même si used <= max serait toujours vrai. Dans ce cas, essayez d’augmenter la taille maximale du segment de mémoire à l’aide du paramètre -Xmx.

    • jvm.memory.used :

      Quantité de mémoire en octets actuellement utilisée par l’application. Pour une application Java à charge normale, cette série de métriques se présente sous la forme d’un modèle en dents de scie, dans lequel l’utilisation de la mémoire augmente et diminue régulièrement par petits incréments et chute soudainement, puis ce modèle se répète. Cette série de métriques est due au nettoyage de la mémoire (garbage collection) à l’intérieur de la machine virtuelle Java, où les actions de collection représentent les points bas dans le modèle en dents de scie.

      Cette métrique est importante pour aider à identifier les problèmes de mémoire, tels que :

      • Une explosion de mémoire au tout début.
      • La répartition de mémoire en surtension pour un chemin d’accès logique spécifique.
      • Fuites de mémoire progressives.

    Pour plus d’informations, consultez Métriques.

    Remarque

    Ces métriques sont disponibles uniquement pour les applications Spring Boot. Pour activer ces métriques, ajoutez la dépendance spring-boot-starter-actuator. Pour plus d’informations, consultez la section Ajouter une dépendance d’actionneur de Gérer et surveiller l’application avec Spring Boot Actuator.

  • Si l’application ne démarre pas, vérifiez qu’elle possède des paramètres jvm valides. Si la mémoire jvm est trop élevée, le message d’erreur suivant peut s’afficher dans vos journaux :

    « required memory 2728741K is greater than 2000M available for allocation »

Pour en savoir plus sur Azure Log Analytics, consultez Prise en main de Log Analytics dans Azure Monitor.

Mon application connaît une utilisation élevée du processeur ou une utilisation élevée de la mémoire

Si votre application connaît une utilisation élevée de l’UC ou de la mémoire, l’une des deux propositions suivantes est vraie :

  • Toutes les instances d’application connaissent une utilisation élevée de l’UC ou de la mémoire.
  • Certaines instances d’application connaissent une utilisation élevée de l’UC ou de la mémoire.

Pour déterminer quelle situation s’applique, procédez comme suit :

  1. Accédez à Métriques, puis sélectionnez Pourcentage d’utilisation de l’UC de service ou Mémoire de service utilisée.
  2. Ajoutez un filtre App= pour spécifier l’application que vous souhaitez analyser.
  3. Fractionnez les métriques par Instance.

Si toutes les instances connaissent une utilisation élevée de l’UC ou de la mémoire, vous devez effectuer un scale-out de l’application ou un scale-up de l’utilisation de l’UC ou de la mémoire. Pour plus d’informations, consultez Tutoriel : Mettre à l’échelle une application dans Azure Spring Apps.

Si certaines instances présentent une utilisation élevée de l’UC ou de la mémoire, vérifiez l’état de l’instance et son état de détection.

Pour plus d’informations, consultez Métriques pour Azure Spring Apps.

Si toutes les instances sont opérationnelles, accédez à Azure Log Analytics pour interroger vos journaux d’application et passez en revue votre logique de code. Cet examen vous permet de déterminer si l’une d’entre elles peut perturber le partitionnement de l’échelle. Pour plus d’informations, consultez Analyser les journaux et les métriques avec les paramètres de diagnostic.

Pour en savoir plus sur Azure Log Analytics, consultez Prise en main de Log Analytics dans Azure Monitor. Interrogez les journaux à l’aide du langage de requête Kusto.

Check-list pour le déploiement de votre application Spring sur Azure Spring Apps

Avant d’intégrer votre application, assurez-vous qu’elle répond aux critères suivants :

  • L’application peut être exécutée localement avec la version de runtime Java spécifiée.
  • La configuration de l’environnement (Processeur/RAM/instances) répond à la configuration minimale définie par le fournisseur d’applications.
  • Les éléments de configuration ont les valeurs attendues. Pour plus d’informations, consultez Configurer une instance Spring Cloud Config Server pour votre service. Pour le plan Entreprise, consultez Utiliser le service de configuration d’application.
  • Les variables d’environnement ont les valeurs attendues.
  • Les paramètres JVM ont les valeurs attendues.
  • Nous vous recommandons de désactiver ou supprimer les services Config Server et Spring Service Registry incorporés du package d’application.
  • Si des ressources Azure doivent être liées via la liaison de service, assurez-vous que les ressources cibles sont en cours d’exécution.

Configuration et gestion

J’ai rencontré un problème lors de la création d’une instance du service Azure Spring Apps

Quand vous configurez une instance du service Azure Spring Apps en utilisant le portail Azure, Azure Spring Apps effectue la validation pour vous.

Toutefois, si vous tentez de configurer l’instance de service Azure Spring Apps en utilisant Azure CLI ou le modèle Azure Resource Manager, vérifiez que les conditions suivantes sont remplies :

  • L’abonnement est actif.
  • Azure Spring Apps est disponible dans la région que vous utilisez. Pour plus d’informations, consultez Questions fréquentes (FAQ) sur Azure Spring Apps.
  • Le groupe de ressources pour l’instance est créé.
  • Le nom de la ressource est conforme à la règle de nommage. Le nom ne doit contenir que des lettres minuscules, des chiffres et des traits d’union. Le premier caractère doit être une lettre. Le dernier caractère doit être une lettre ou un chiffre. La valeur doit comprendre entre 2 et 32 caractères.

Si vous souhaitez configurer l’instance de service Azure Spring Apps à l’aide du modèle Resource Manager, consultez d’abord Comprendre la structure et la syntaxe des modèles Azure Resource Manager.

Le nom de l’instance de service Azure Spring Apps est utilisé pour demander un nom de sous-domaine sous azuremicroservices.io, de sorte que la configuration échoue si le nom est en conflit avec un nom existant. Vous pouvez trouver plus de détails dans les journaux d’activité.

Je ne parviens pas à déployer une application .NET Core

Vous ne pouvez pas télécharger un fichier .zip pour une application .NET Core Steeltoe à l’aide du portail Azure ou du modèle Resource Manager.

Quand vous déployez votre package d’application à l’aide d’Azure CLI, ce dernier interroge régulièrement l’avancement du déploiement, puis, à la fin, affiche son résultat.

Vérifiez que votre application est empaquetée dans le bon format .zip. Si elle n’est pas empaquetée correctement, le processus cesse de répondre ou un message d’erreur s’affiche.

Je ne peux pas déployer un package JAR

Vous ne pouvez pas télécharger le package source ou celui du fichier d’archive Java (JAR) à l’aide du Portail Azure ou du modèle Resource Manager.

Quand vous déployez votre package d’application à l’aide d’Azure CLI, ce dernier interroge régulièrement l’avancement du déploiement, puis, à la fin, affiche son résultat.

Si l’interrogation est interrompue, vous pouvez toujours utiliser la commande suivante pour extraire les journaux de déploiement :

az spring app show-deploy-log --name <app-name>

Vérifiez que votre application est empaquetée dans le bon format JAR exécutable. Si elle n’est pas empaquetée correctement, un message d’erreur semblable à l’exemple suivant s’affiche : Error: Invalid or corrupt jarfile /jar/38bc8ea1-a6bb-4736-8e93-e8f3b52c8714.

Je ne peux pas déployer un package source

Vous ne pouvez pas télécharger le package source ou JAR à l’aide du Portail Azure ou du modèle Resource Manager.

Quand vous déployez votre package d’application à l’aide d’Azure CLI, ce dernier interroge régulièrement l’avancement du déploiement, puis, à la fin, affiche son résultat.

Si l’interrogation est interrompue, vous pouvez toujours utiliser la commande suivante pour extraire les journaux de compilation et de déploiement :

az spring app show-deploy-log --name <app-name>

Toutefois, une instance de service Azure Spring Apps ne peut déclencher qu’un seul travail de génération pour un package source à la fois. Pour plus d’informations, consultez Déployer une application et Configurer un environnement de préproduction dans Azure Spring Apps.

Impossible d’inscrire mon application

Dans la plupart des cas, cette situation se produit lorsque les paramètres Dépendances nécessaires et Détection de service ne sont pas correctement configurés dans votre fichier Modèle objet du projet (POM). Une fois configuré, le point de terminaison de serveur Service Registry intégré est injecté en tant que variable d’environnement avec votre application. Les applications s’inscrivent alors auprès du serveur Service Registry et découvrent d’autres applications dépendantes.

Attendez au moins deux minutes avant qu’une instance nouvellement inscrite ne commence à recevoir du trafic.

Si vous migrez une solution existante basée sur Spring Cloud vers Azure, assurez-vous de supprimer ou désactiver vos instances Service Registry et Config Server ad hoc pour éviter tout conflit avec les instances gérées fournies par Azure Spring Apps.

Vous pouvez également vérifier les journaux du client Service Registry dans Azure Log Analytics. Pour plus d’informations, consultez Analyser les journaux et les métriques avec les paramètres de diagnostic

Pour en savoir plus sur Azure Log Analytics, consultez Prise en main de Log Analytics dans Azure Monitor. Interrogez les journaux à l’aide du langage de requête Kusto.

Je souhaite inspecter les variables d’environnement de mon application

Les variables d’environnement informent l’infrastructure Azure Spring Apps et permettent de vérifier qu’Azure comprend où et comment configurer les services qui composent votre application. La vérification de l’exactitude des variables d’environnement est une première étape nécessaire à la résolution des problèmes potentiels. Vous pouvez utiliser le point de terminaison Spring Boot Actuator pour passer en revue vos variables d’environnement.

Avertissement

Cette procédure expose vos variables d’environnement à l’aide de votre point de terminaison de test. N’allez pas plus loin si votre point de terminaison de test est public, ou si vous avez affecté un nom de domaine à votre application.

  1. Accédez à https://<your-application-test-endpoint>/actuator/health.

    Une réponse similaire à {"status":"UP"} indique que le point de terminaison a été activé. Si la réponse est négative, incluez la dépendance suivante dans votre fichier POM.xml :

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
    
  2. Une fois le point de terminaison Spring Boot Actuator activé, accédez au Portail Azure et recherchez la page de configuration de votre application. Ajoutez une variable d’environnement avec le nom MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_INCLUDE et la valeur *.

  3. Redémarrez votre application.

  4. Accédez à https://<your-application-test-endpoint>/actuator/env et examinez la réponse. Il doit se présenter comme suit :

    {
        "activeProfiles": [],
        "propertySources": {,
            "name": "server.ports",
            "properties": {
                "local.server.port": {
                    "value": 1025
                }
            }
        }
    }
    

Recherchez le nœud enfant nommé systemEnvironment. Ce nœud contient les variables d’environnement de votre application.

Important

N’oubliez pas d’inverser l’exposition de vos variables d’environnement avant de rendre votre application publique. Accédez au Portail Azure, recherchez la page de configuration de votre application, puis supprimez la variable d’environnement suivante : MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_INCLUDE.

Impossible de trouver des métriques ou des journaux pour mon application

Accédez à Applications pour vous assurer que les états de l’application sont En cours d’exécution et En service.

Vérifiez que JMX est activé dans votre package d’application. Cette fonctionnalité peut être activée à l’aide de la propriété de configuration spring.jmx.enabled=true.

Vérifiez si la dépendance spring-boot-actuator est activée dans votre package d’application et démarre correctement.

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

Si vos journaux d’applications peuvent être archivés dans un compte de stockage, mais ne sont pas envoyés à Azure Log Analytics, vérifiez si vous avez correctement configuré votre espace de travail. Pour plus d’informations, consultez Créer un espace de travail Log Analytics. Notez également que le plan De base ne fournit pas de contrat de niveau de service (SLA). Pour plus d’informations, consultez Contrats de niveau de service pour les services en ligne.

Plan Entreprise

Erreur 112039 : Achat impossible sur la Place de marché Azure

La création d’une instance Azure Spring Apps de plan Entreprise échoue avec le code d’erreur « 112039 ». Pour plus d’informations, consultez le message d’erreur détaillé dans la liste suivante :

  • « Achat impossible sur la Place de marché Azure, car le RP Microsoft.SaaS n’est pas inscrit sur l’abonnement Azure. » : achetez une offre SaaS Azure Spring Apps plan Entreprise auprès de VMware.

    Vous devez inscrire le fournisseur de ressources Microsoft.SaaS avant de créer l’instance Azure Spring Apps Entreprise. Découvrez comment inscrire un fournisseur de ressources.

  • « Impossible de charger le produit catalogue vmware-inc.azure-spring-cloud-vmware-tanzu-2 sur le marché des abonnements Azure. » : l’adresse du compte de facturation de votre abonnement Azure n’est pas à l’emplacement pris en charge.

    Pour plus d’informations, consultez la section Aucun plan n’est disponible pour le marché « <Emplacement> ».

  • « Achat impossible sur la place de marché Azure en raison de la vérification de la signature sur l’accord juridique de la Place de marché. Vérifiez que l’abonnement Azure a accepté les conditions générales vmware-inc.azure-spring-cloud-vmware-tanzu-2.asa-ent-hr-mtr. » : votre abonnement Azure n’a pas signé les conditions générales de l’offre et plan à acheter.

    Accédez à votre abonnement Azure et exécutez la commande Azure CLI suivante pour accepter les termes :

    az term accept \
        --publisher vmware-inc \
        --product azure-spring-cloud-vmware-tanzu-2 \
        --plan asa-ent-hr-mtr
    

    Si cela ne fonctionne pas, vous pouvez contacter l’équipe de support technique avec les informations suivantes.

    • AZURE_TENANT_ID : ID de locataire Azure qui héberge l’abonnement Azure
    • AZURE_SUBSCRIPTION_ID : ID d’abonnement Azure utilisé pour créer l’instance Azure Spring Apps
    • SPRING_CLOUD_NAME : nom de l’instance ayant échoué
    • ERROR_MESSAGE : message d’erreur observé

Aucun plan n’est disponible pour le marché « <Emplacement> »

Quand vous visitez l’offre SaaS Azure Spring Apps Entreprise dans la Place de marché Azure, le message « Aucun plan n’est disponible pour le marché “<Emplacement>” » peut s’afficher, comme dans l’image suivante.

Capture d'écran du portail Azure montrant le message d'erreur « No plans are available for market ».

Le plan Azure Spring Apps Entreprise exige que les clients paient une licence pour les composants Tanzu par le biais d’une offre de la Place de marché Azure. Pour acheter dans la Place de marché Azure, le pays ou la région du compte de facturation de votre abonnement Azure doit se trouver dans les emplacements géographiques pris en charge de l’offre SaaS.

Azure Spring Apps Entreprise prend désormais en charge tous les emplacements géographiques pris en charge par la Place de marché Azure. Consultez Emplacements géographiques pris en charge par la Place de marché.

Vous pouvez examiner le compte de facturation de votre abonnement si vous disposez d’un accès administrateur. Consultez Afficher les comptes de facturation.

J’ai besoin d’assistance avec le runtime VMware Spring (plan Entreprise uniquement).

Le plan Entreprise intègre l’assistance pour le runtime VMware Spring, ce qui vous permet d’ouvrir des tickets de support pour VMware si vous pensez que votre problème relève de ce domaine. Pour mieux comprendre le support relatif à VMware Spring Runtime, consultez VMware Spring Runtime. Pour plus d’informations sur l’inscription et l’utilisation de ce service d’assistance, consultez la section Support des Questions fréquentes sur Entreprise de VMware. Pour tout autre problème, ouvrez un ticket de support auprès de Microsoft.

Étapes suivantes