ASM propose une solution de suivi prête à l'emploi pour les applications déployées au sein d'un maillage de services. Toutefois, pour obtenir un suivi unifié et de bout en bout des applications situées à l'intérieur et à l'extérieur du maillage, vous devez utiliser Managed Service for OpenTelemetry afin de créer une trace complète. Cette rubrique explique comment utiliser Managed Service for OpenTelemetry pour permettre à une application externe d'appeler un service au sein du maillage et de générer une trace complète.
Prérequis
Une instance Service Mesh (ASM) est créée et le cluster ACK est ajouté à l'instance ASM. Pour plus d'informations, consultez les rubriques Créer une instance ASM et Ajouter un cluster à une instance ASM.
Une passerelle d'entrée est déployée pour l'instance ASM afin d'autoriser l'accès aux applications du maillage. Pour plus d'informations, consultez la rubrique Créer une passerelle d'entrée.
Un environnement d'exécution est préparé pour l'exemple d'application externe et Python 2.7 est installé.
Managed Service for OpenTelemetry est activé. Pour plus d'informations, consultez la rubrique Collecter les données de suivi ASM vers Managed Service for OpenTelemetry.
Notes d'utilisation
Ce tutoriel déploie une application Python nommée ExternalProxy. Cette application démarre un serveur HTTP. Lorsqu'une requête atteint le chemin racine d'ExternalProxy, l'application appelle le service
productpagede l'application Bookinfo exécutée au sein du maillage.Ce tutoriel utilise Managed Service for OpenTelemetry comme système de suivi. Si vous utilisez un système de suivi autonome compatible avec Zipkin, vous pouvez exposer son endpoint de rapport à l'application externe. Dans ce cas, ignorez l'étape Étape 2 : Obtenir l'endpoint de Managed Service for OpenTelemetry et passez directement à l'étape Étape 3 : Déployer l'application externe ExternalProxy pour utiliser votre endpoint 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.
Téléchargez 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 service virtuel de l'application Bookinfo.
Téléchargez le fichier YAML du service virtuel depuis GitHub.
kubectl --kubeconfig=${ASM_KUBECONFIG} apply -f virtual-service-all-v1.yaml -
Exécutez la commande suivante pour déployer la règle de destination de l'application Bookinfo.
Téléchargez le fichier YAML de la règle de destination depuis Github.
kubectl --kubeconfig=${ASM_KUBECONFIG} apply -f destination-rule-all.yaml -
Exécutez la commande suivante pour déployer la passerelle de l'application Bookinfo.
Téléchargez le fichier YAML de la passerelle depuis GitHub.
kubectl --kubeconfig=${ASM_KUBECONFIG} apply -f bookinfo-gateway.yaml
Étape 2 : Obtenir l'endpoint de Managed Service for 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 traces ne pourront pas être corrélées.
-
Dans l'onglet Access point information, activez le commutateur Show Token et sélectionnez un endpoint public ou privé en fonction de l'emplacement de déploiement de votre application ExternalProxy.
Étant donné qu'ExternalProxy rapporte les données à l'aide de l'API Zipkin v1, vous devez utiliser un endpoint v1. Cliquez sur l'onglet Zipkin et récupérez l'endpoint dans la colonne Related Information. Dans la plupart des cas, vous pouvez utiliser l'API v2. Dans des scénarios spécifiques tels qu'Istio et Molten, utilisez l'API v1. Lorsque vous utilisez le composant Sleuth, l'URL de base n'inclut pas
/api/v2/spans.
-
Étape 3 : Déployer l'application externe ExternalProxy
Le proxy sidecar transfère l'intégralité de la requête entrante, y compris ses en-têtes et son corps, vers le service en amont.
Pour garantir la propagation du contexte de trace, votre application doit transmettre les en-têtes de requête liés au suivi aux services en amont conformément aux spécifications de la communauté.
-
Enregistrez le code suivant sous le nom ExternalProxy.py dans l'environnement d'exécution de l'application externe.
Remplacez
{XTRACE_ZIPKIN_V1_ENDPOINT}par l'endpoint obtenu à l'étape précédente. Si vous souhaitez rapporter les données à un système de suivi autonome, remplacez l'espace réservé par l'endpoint de rapport du système.-
Remplacez
{INGRESS_GATE_WAY_IP}par l'adresse IP de la passerelle d'entrée du cluster ACK.
-
Exécutez la commande suivante pour démarrer 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 appeler ExternalProxy.
curl localhost:5000Résultat attendu :
OK
Étape 4 : Afficher les informations de suivi
Connectez-vous à la console Managed Service for OpenTelemetry.
Dans le volet de navigation de gauche, cliquez sur Applications. En haut de la page, sélectionnez une région, 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 correspondante.
Dans l'onglet Traces, chaque ligne de la liste représente une trace et affiche son trace ID. Cliquez sur un trace ID pour ouvrir la page des détails de la trace.
Une trace complète est générée, s'étendant de l'application externe ExternalProxy à l'application interne Bookinfo. Le haut de la page des détails de la trace affiche l'Start Time, la Duration, le nombre de Services, la Depth et le nombre total de Spans de la trace. Le tableau ci-dessous présente la hiérarchie complète des appels de microservices, la répartition de la durée de chaque span et l'état de la limitation de débit, tel que le span de limitation de débit
ahas_rate_limit_cluster egress. Il comprend des colonnes telles que Span Name, Timeline, Service Name, Start Time, IP Address et Status.