Alibaba Cloud Service Mesh (ASM) propose des fonctionnalités de traçage prêtes à l'emploi pour les applications au sein du maillage de services. Toutefois, pour obtenir un traçage de bout en bout incluant les applications externes qui communiquent avec les services du maillage, vous devez utiliser Managed Service for OpenTelemetry afin d'unifier les traces d'appels. Ce guide explique comment utiliser Managed Service for OpenTelemetry pour tracer une requête provenant d'une application externe vers une application située dans une instance ASM, créant ainsi une trace d'appel unique et unifiée.
Prérequis
Vous avez créé une instance Service Mesh (ASM) et ajouté le cluster ACK à cette instance. Pour plus d'informations, consultez les rubriques Créer une instance ASM et Ajouter un cluster à une instance ASM.
Vous avez déployé une passerelle d'entrée dans l'instance ASM pour permettre l'accès aux applications du maillage. Pour plus d'informations, consultez la rubrique Créer une passerelle d'entrée.
Un environnement disposant de Python 2.7 est disponible pour exécuter l'exemple d'application hors maillage.
Managed Service for OpenTelemetry est activé. Pour plus d'informations, consultez la rubrique Exporter les données de traçage depuis Service Mesh (ASM).
Notes
Ce guide déploie une application Python nommée ExternalProxy qui exécute un serveur HTTP. L'accès au chemin racine d'ExternalProxy appelle le service
productpagede l'application Bookinfo s'exécutant à l'intérieur du maillage de services.Ce guide utilise Managed Service for OpenTelemetry comme backend de traçage. Si vous utilisez un système de traçage autogéré compatible avec Zipkin, exposez son endpoint de rapport à l'application externe. Vous pouvez alors ignorer l'étape Étape 2 : Obtenir l'endpoint pour Managed Service for OpenTelemetry et passer directement à l'étape Étape 3 : Déployer l'application ExternalProxy hors maillage, en utilisant l'endpoint de votre système comme adresse de rapport.
Étape 1 : Déployer l'application Bookinfo dans le maillage
-
Exécutez la commande suivante pour déployer l'application Bookinfo sur le cluster de votre instance ASM.
Vous pouvez télécharger le fichier YAML de l'application Bookinfo depuis GitHub.
kubectl --kubeconfig=${DATA_PLANE_KUBECONFIG} apply -f bookinfo.yaml -
Exécutez la commande suivante pour déployer le VirtualService de l'application Bookinfo.
Vous pouvez télécharger le fichier YAML du VirtualService depuis GitHub.
kubectl --kubeconfig=${ASM_KUBECONFIG} apply -f virtual-service-all-v1.yaml -
Exécutez la commande suivante pour déployer le DestinationRule de l'application Bookinfo.
Vous pouvez télécharger le fichier YAML du DestinationRule depuis Github.
kubectl --kubeconfig=${ASM_KUBECONFIG} apply -f destination-rule-all.yaml -
Exécutez la commande suivante pour déployer la Gateway de l'application Bookinfo.
Vous pouvez télécharger le fichier YAML de la Gateway depuis GitHub.
kubectl --kubeconfig=${ASM_KUBECONFIG} apply -f bookinfo-gateway.yaml
Étape 2 : Obtenir l'endpoint OpenTelemetry
Connectez-vous à la console Managed Service for OpenTelemetry. Dans le volet de navigation de gauche, cliquez sur Overview.
Sur la page Overview, cliquez sur l'onglet Access process, puis sur View access point information.
-
Consultez l'endpoint.
-
En haut de la page, sélectionnez la région cible.
Sélectionnez la région où le cluster ACK de l'application Bookinfo est déployé. Sinon, les données de traçage ne pourront pas être corrélées.
-
Dans l'onglet Access point information, activez l'option Show token. Choisissez un endpoint de réseau public ou privé en fonction de l'emplacement de déploiement de votre application ExternalProxy.
Étant donné qu'ExternalProxy rapporte les données via l'API Zipkin v1, vous avez besoin d'un endpoint v1. Cliquez sur l'onglet Zipkin et trouvez l'endpoint approprié dans le tableau. En règle générale, vous devez utiliser un endpoint v2. Cependant, pour des scénarios spécifiques tels que les intégrations Istio ou Molten, un endpoint v1 est requis. Lors de l'utilisation du composant Sleuth, l'URL de base ne doit pas inclure
/api/v2/spans.
-
Étape 3 : Déployer l'application ExternalProxy hors maillage
Le proxy sidecar transfère toutes les parties d'une requête entrante, y compris les en-têtes HTTP et le corps de la requête, vers le service en amont. Cela signifie que les en-têtes liés au traçage sont également transférés.
Pour garantir la propagation du contexte de trace, votre application doit transmettre les en-têtes de traçage requis dans ses requêtes sortantes, conformément aux pratiques standard de la communauté.
-
Enregistrez le code suivant dans un fichier nommé ExternalProxy.py dans l'environnement d'exécution de votre application externe.
Remplacez
{XTRACE_ZIPKIN_V1_ENDPOINT}par l'endpoint obtenu à l'étape précédente. Si vous utilisez un système de traçage autogéré, utilisez son endpoint de rapport à la place.-
Remplacez
{INGRESS_GATE_WAY_IP}par l'adresse IP de la passerelle d'entrée de votre cluster ACK.
-
Exécutez la commande suivante pour démarrer l'application ExternalProxy.
python ExternalProxy.py* Serving Flask app "main" (lazy loading) * Environment: production WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. * Debug mode: on * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit) * Restarting with stat * Debugger is active! * Debugger PIN: 317-792-686 -
Exécutez la commande suivante pour envoyer une requête à l'application ExternalProxy.
curl localhost:5000Résultat attendu :
OK
Étape 4 : Consulter les informations de trace
Connectez-vous à la console Managed Service for OpenTelemetry.
Dans le volet de navigation de gauche, cliquez sur Applications. Sélectionnez la région en haut de la page, puis cliquez sur ExternalProxy dans la liste des applications.
-
Dans le volet de navigation de gauche, cliquez sur Application details. Cliquez sur l'onglet Traces, puis sur un Trace ID pour afficher les détails de la trace d'appel.
Une trace d'appel complète relie désormais l'application externe, ExternalProxy, et l'application Bookinfo dans le maillage. Le haut de la page des détails de la trace affiche des informations récapitulatives, notamment l'Start time, la Duration, les Services, la Depth et le nombre total de Total spans. Sous le résumé, une vue arborescente montre la relation hiérarchique de chaque span. Les colonnes incluent Span name, Timeline, Service name, Start time, IP address et Status. Dans cet exemple, la trace d'appel commence par
external-proxy, passe parproductpage, puis appelle successivement les servicesdetails,reviewsetratings. Certaines spans, telles que la span de limitation de débitahas_rate_limit_cluster, peuvent apparaître avec un statut d'erreur.