Envoyer en streaming les journaux des composants managés Azure Spring Apps en temps réel

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 à :❌ De base/Standard ✔️ Entreprise

Cet article décrit comment utiliser Azure CLI afin d’obtenir en temps réel les journaux des composants managés pour la résolution des problèmes. Vous pouvez également utiliser les paramètres de diagnostic pour analyser les données de diagnostic dans Azure Spring Apps. Pour plus d’informations, consultez Analyser les journaux et les métriques avec les paramètres de diagnostic.

Pour le streaming des journaux des applications dans Azure Spring Apps, consultez Envoyer en streaming les journaux de la console d’application Azure Spring Apps en temps réel.

Prérequis

  • Azure CLI avec l’extension Azure Spring Apps, version 1.19.0 ou ultérieure. Vous pouvez installer cette extension à l’aide de la commande suivante : az extension add --name spring.

Composants managés pris en charge

Le tableau suivant liste les composants managés actuellement pris en charge, ainsi que leurs sous-composants :

Composant managé Sous-composants
Service de configuration des applications application-configuration-service
flux-source-controller (pris en charge dans la version ACS Gen2)
Spring Cloud Gateway spring-cloud-gateway
spring-cloud-gateway-operator

Vous pouvez utiliser la commande suivante pour lister tous les sous-composants :

az spring component list
    --resource-group <resource-group-name> \
    --service <Azure-Spring-Apps-instance-name>

Affecter un rôle Azure

Pour envoyer en streaming les journaux des composants managés, vous devez disposer des rôles Azure appropriés qui vous sont attribués. Le tableau suivant liste les rôles requis et les opérations pour lesquelles ces rôles reçoivent des autorisations :

Composant managé Rôle requis Opérations
Service de configuration des applications Rôle Lecteur de journaux du service de configuration d’application Azure Spring Apps Microsoft.AppPlatform/Spring/ApplicationConfigurationService/logstream/action
Spring Cloud Gateway Rôle Lecteur de journaux de la passerelle cloud Spring Azure Spring Apps Microsoft.AppPlatform/Spring/SpringCloudGateway/logstream/action

Utilisez les étapes suivantes pour configurer un rôle Azure à l’aide du portail Azure :

  1. Ouvrez le portail Azure.

  2. Ouvrez votre instance de service Azure Spring Apps.

  3. Dans le volet de navigation, sélectionnez Contrôle d’accès (IAM).

  4. Dans la page Contrôle d’accès (IAM), sélectionnez Ajouter, puis Ajouter une attribution de rôle.

    Capture d’écran du portail Azure montrant la page Contrôle d’accès (IAM) avec mise en évidence de l’option Ajouter une attribution de rôle.

  5. Dans la page Ajouter une attribution de rôle, dans la liste Nom, recherchez et sélectionnez le rôle cible, puis sélectionnez Suivant.

    Capture d’écran du portail Azure montrant la page Ajouter une attribution de rôle avec mise en évidence du rôle Lecteur de journaux du service de configuration d’application.

  6. Sélectionnez Membres, puis recherchez et sélectionnez votre nom d’utilisateur.

  7. Sélectionnez Vérifier + attribuer.

Lister toutes les instances d’un composant

Utilisez la commande suivante pour lister toutes les instances d’un composant :

az spring component instance list \
    --resource-group <resource-group-name> \
    --service <Azure-Spring-Apps-instance-name> \
    --component <component-name>

Par exemple, pour lister toutes les instances de flux-source-controller dans la version ACS Gen2, utilisez la commande suivante :

az spring component instance list \
    --resource-group <resource-group-name> \
    --service <Azure-Spring-Apps-instance-name> \
    --component flux-source-controller

Afficher les dernières lignes des journaux

Cette section fournit des exemples d’utilisation d’Azure CLI pour produire les dernières lignes des journaux.

Afficher les dernières lignes des journaux d’une instance spécifique

Pour voir les dernières lignes des journaux d’une instance spécifique, utilisez la commande az spring component logs avec l’argument -i/--instance, comme indiqué dans la section suivante.

Afficher les dernières lignes des journaux d’une instance application-configuration-service

Utilisez la commande suivante pour afficher les dernières lignes des journaux pour application-configuration-service :

az spring component logs \
    --resource-group <resource-group-name> \
    --service <Azure-Spring-Apps-instance-name> \
    --name application-configuration-service \
    --instance <instance-name>

Pour ACS Gen2, la commande retourne des journaux semblables à l’exemple suivant :

...
2023-12-18T07:09:54.020Z  INFO  16715 --- [main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8090 (https)
2023-12-18T07:09:54.116Z  INFO  16715 --- [main] org.apache.juli.logging.DirectJDKLog     : Starting service [Tomcat]
2023-12-18T07:09:54.117Z  INFO  16715 --- [main] org.apache.juli.logging.DirectJDKLog     : Starting Servlet engine: [Apache Tomcat/10.1.12]
2023-12-18T07:09:54.522Z  INFO  16715 --- [main] org.apache.juli.logging.DirectJDKLog     : Initializing Spring embedded WebApplicationContext
2023-12-18T07:09:54.524Z  INFO  16715 --- [main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 14100 ms
2023-12-18T07:09:56.920Z  INFO  16715 --- [main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8090 (https) with context path ''
2023-12-18T07:09:57.528Z  INFO  16715 --- [main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8081 (http)
2023-12-18T07:09:57.529Z  INFO  16715 --- [main] org.apache.juli.logging.DirectJDKLog     : Starting service [Tomcat]
2023-12-18T07:09:57.529Z  INFO  16715 --- [main] org.apache.juli.logging.DirectJDKLog     : Starting Servlet engine: [Apache Tomcat/10.1.12]
2023-12-18T07:09:57.629Z  INFO  16715 --- [main] org.apache.juli.logging.DirectJDKLog     : Initializing Spring embedded WebApplicationContext
2023-12-18T07:09:57.629Z  INFO  16715 --- [main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 603 ms
2023-12-18T07:09:57.824Z  INFO  16715 --- [main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8081 (http) with context path ''
2023-12-18T07:09:58.127Z  INFO  16715 --- [main] o.springframework.boot.StartupInfoLogger : Started ReconcilerApplication in 21.005 seconds (process running for 22.875)
...

Afficher les dernières lignes des journaux d’une instance flux-source-controller

Utilisez la commande suivante pour afficher les dernières lignes des journaux pour flux-source-controller :

az spring component logs \
    --resource-group <resource-group-name> \
    --service <Azure-Spring-Apps-instance-name> \
    --name flux-source-controller \
    --instance <instance-name>

La commande retourne des journaux semblables à l’exemple suivant :

...
{"level":"info","ts":"2023-12-18T07:07:54.615Z","logger":"controller-runtime.metrics","msg":"Metrics server is starting to listen","addr":":8080"}
{"level":"info","ts":"2023-12-18T07:07:54.615Z","logger":"setup","msg":"starting manager"}
{"level":"info","ts":"2023-12-18T07:07:54.615Z","msg":"Starting server","path":"/metrics","kind":"metrics","addr":"[::]:8080"}
{"level":"info","ts":"2023-12-18T07:07:54.615Z","msg":"Starting server","kind":"health probe","addr":"[::]:9440"}
{"level":"info","ts":"2023-12-18T07:07:54.817Z","logger":"runtime","msg":"attempting to acquire leader lease flux-system/source-controller-leader-election...\n"}
{"level":"info","ts":"2023-12-18T07:07:54.830Z","logger":"runtime","msg":"successfully acquired lease flux-system/source-controller-leader-election\n"}
...

Afficher les dernières lignes des journaux d’une instance spring-cloud-gateway

Utilisez la commande suivante pour afficher les dernières lignes des journaux pour spring-cloud-gateway :

az spring component logs \
    --resource-group <resource-group-name> \
    --service <Azure-Spring-Apps-instance-name> \
    --name spring-cloud-gateway \
    --instance <instance-name>

La commande retourne des journaux semblables à l’exemple suivant :

...
2023-12-11T14:13:40.310Z  INFO 1 --- [           main] i.p.s.c.g.s.SsoDeactivatedConfiguration  : SSO is deactivated, setting up default security filters
2023-12-11T14:13:40.506Z  INFO 1 --- [           main] .h.HazelcastReactiveSessionConfiguration : Configuring Hazelcast as a session management storage
2023-12-11T14:13:51.008Z  INFO 1 --- [           main] o.s.b.web.embedded.netty.NettyWebServer  : Netty started on port 8443
2023-12-11T14:13:51.810Z  INFO 1 --- [           main] o.s.b.a.e.web.EndpointLinksResolver      : Exposing 7 endpoint(s) beneath base path '/actuator'
2023-12-11T14:13:52.410Z  INFO 1 --- [           main] o.s.b.web.embedded.netty.NettyWebServer  : Netty started on port 8090
2023-12-11T14:13:52.907Z  INFO 1 --- [           main] i.p.s.c.g.r.h.HazelcastRateLimitsRemover : Removing Hazelcast map 'GLOBAL_RATE_LIMIT' with rate limit information
2023-12-11T14:13:52.912Z  INFO 1 --- [           main] i.p.s.cloud.gateway.GatewayApplication   : Started GatewayApplication in 36.084 seconds (process running for 38.651)
...

Afficher les dernières lignes des journaux d’une instance spring-cloud-gateway-operator

Utilisez la commande suivante pour afficher les dernières lignes des journaux pour spring-cloud-gateway-operator :

az spring component logs \
    --resource-group <resource-group-name> \
    --service <Azure-Spring-Apps-instance-name> \
    --name spring-cloud-gateway-operator \
    --instance <instance-name>

La commande retourne des journaux semblables à l’exemple suivant :

...
2023-12-01T08:37:05.080Z  INFO 1 --- [           main] c.v.t.s.OperatorApplication              : Starting OperatorApplication v2.0.6 using Java 17.0.7 with PID 1 (/workspace/BOOT-INF/classes started by cnb in /workspace)
2023-12-01T08:37:05.157Z  INFO 1 --- [           main] c.v.t.s.OperatorApplication              : No active profile set, falling back to 1 default profile: "default"
2023-12-01T08:37:14.379Z  INFO 1 --- [           main] o.s.b.a.e.web.EndpointLinksResolver      : Exposing 1 endpoint(s) beneath base path '/actuator'
2023-12-01T08:37:15.274Z  INFO 1 --- [           main] o.s.b.web.embedded.netty.NettyWebServer  : Netty started on port 8080
2023-12-01T08:37:15.366Z  INFO 1 --- [           main] c.v.t.s.OperatorApplication              : Started OperatorApplication in 11.489 seconds (process running for 12.467)
...

Afficher les dernières lignes des journaux de toutes les instances dans une seule commande

Pour afficher les dernières lignes des journaux de toutes les instances, utilisez l’argument --all-instances, comme indiqué dans la commande suivante. Le nom de l’instance est le préfixe de chaque ligne de journal. Lorsqu’il existe plusieurs instances, les journaux sont affichés par lots pour chaque instance, de sorte que les journaux d’une instance ne sont pas mélangés avec les journaux d’une autre instance.

az spring component logs \
    --resource-group <resource-group-name> \
    --service <Azure-Spring-Apps-instance-name> \
    --name <component-name> \
    --all-instances

Envoyer en streaming continu les nouveaux journaux

Par défaut, az spring component logs affiche uniquement les journaux existants envoyés en streaming à la console, puis se ferme. Si vous souhaitez envoyer en streaming les nouveaux journaux, ajoutez l’argument -f/--follow.

Lorsque vous utilisez l’option -f/--follow pour les dernières lignes des journaux instantanés, le service de streaming de journaux Azure Spring Apps envoie des journaux de pulsation au client toutes les minutes, sauf si le composant écrit des journaux en continu. Les messages du journal des pulsations utilisent le format suivant : 2023-12-18 09:12:17.745: No log from server.

Envoyer en streaming les journaux d’une instance spécifique

Utilisez la commande suivante pour envoyer en streaming les journaux d’une instance spécifique :

az spring component logs \
    --resource-group <resource-group-name> \
    --service <Azure-Spring-Apps-instance-name> \
    --name <component-name> \
    --instance <instance-name> \
    --follow

Envoyer en streaming les journaux de toutes les instances

Utilisez la commande suivante pour envoyer en streaming les journaux de toutes les instances :

az spring component logs \
    --resource-group <resource-group-name> \
    --service <Azure-Spring-Apps-instance-name> \
    --name <component-name> \
    --all-instances \
    --follow

Lorsque vous envoyez en streaming les journaux de plusieurs instances d’un composant, les journaux d’une instance sont mélangés avec les journaux des autres instances.

Envoyer en streaming les journaux dans une instance d’injection de réseau virtuel

Pour une instance Azure Spring Apps déployée dans un réseau virtuel personnalisé, vous pouvez accéder au streaming des journaux par défaut à partir d’un réseau privé. Pour plus d’informations, consultez Déploiement d’Azure Spring Apps dans un réseau virtuel

Azure Spring Apps vous permet également d’accéder aux journaux des composants managés en temps réel à partir d’un réseau public.

Remarque

L’activation du point de terminaison de streaming de journaux sur le réseau public ajoute une IP entrante publique à votre réseau virtuel. Faites preuve de prudence si c’est une préoccupation pour vous.

Utilisez les étapes suivantes pour activer un point de terminaison de streaming de journaux sur le réseau public :

  1. Sélectionnez l’instance du service Azure Spring Apps déployée dans votre réseau virtuel, puis sélectionnez Mise en réseau dans le menu de navigation.

  2. Sélectionnez l’onglet Injection dans le VNet.

  3. Définissez l’état de Ressources de plan de données sur le réseau public sur Activer pour activer un point de terminaison de streaming de journaux sur le réseau public. Ce processus prend quelques minutes.

    Capture d’écran du portail Azure montrant la page Mise en réseau avec l’onglet Injection dans le VNet sélectionné et la section Résolution des problèmes mise en évidence.

Une fois que vous avez activé le point de terminaison public du streaming de journaux, vous pouvez accéder aux journaux des composants managés à partir d’un réseau public, comme si vous accédiez à une instance normale.

Sécuriser le trafic vers le point de terminaison public de streaming de journaux

Le streaming de journaux pour les composants managés utilise Azure RBAC pour authentifier les connexions aux composants. Par conséquent, seuls les utilisateurs disposant des rôles appropriés peuvent accéder aux journaux.

Pour garantir la sécurité de vos composants managés lorsque vous exposez un point de terminaison public pour eux, sécurisez le point de terminaison en filtrant le trafic réseau vers votre service avec un groupe de sécurité réseau. Pour plus d’informations, consultez Tutoriel : Filtrer le trafic réseau avec un groupe de sécurité réseau à l’aide du portail Azure. Un groupe de sécurité réseau contient des règles de sécurité qui autorisent ou refusent le trafic réseau entrant ou sortant en direction/à partir des différents types de ressources Azure. Pour chaque règle, vous pouvez spécifier la source et la destination, le port et le protocole.

Remarque

Si vous ne pouvez pas accéder aux journaux des composants managés dans l’instance d’injection dans le réseau virtuel à partir d’Internet une fois que vous avez activé un point de terminaison public de streaming de journaux, vérifiez votre groupe de sécurité réseau pour voir si vous avez autorisé ce trafic entrant.

Le tableau suivant présente un exemple de règle de base que nous recommandons. Vous pouvez utiliser des commandes comme nslookup avec le point de terminaison <service-name>.private.azuremicroservices.io pour obtenir l’adresse IP cible d’un service.

Priorité Nom Port Protocole Source Destination Action
100 Nom de la règle 80 TCP Internet Adresse IP d’un service Allow
110 Nom de la règle 443 TCP Internet Adresse IP d’un service Allow

Étapes suivantes