Service Mesh (ASM) s'intègre à Managed Service for OpenTelemetry pour vous aider à identifier les goulots d'étranglement de performance dans les applications distribuées. Consultez les données de trace, affichez les topologies de trace, analysez les dépendances des applications et comptez les requêtes.
Informations générales
Le traçage distribué permet de profiler et de surveiller les applications, en particulier celles construites sur une architecture de microservices. Les proxys sidecar d'une instance ASM peuvent générer et envoyer automatiquement des spans, mais les applications doivent propager les en-têtes HTTP appropriés afin que les spans puissent être correctement corrélées en une seule trace. Plus précisément, l'application doit collecter certains en-têtes de chaque requête entrante et les transférer à toutes les requêtes sortantes déclenchées par cette requête entrante. OpenTelemetry prend en charge différents propagateurs, chacun utilisant des en-têtes différents. La section suivante répertorie les propagateurs pris en charge et leurs en-têtes correspondants.
Propagateurs B3
x-request-idx-b3-traceidx-b3-spanidx-b3-parentspanidx-b3-sampledx-b3-flagsx-ot-span-context
Propagateurs W3C Trace Context
traceparenttracestate
Les instances ASM de version V1.18.0.124 ou antérieure utilisent les propagateurs B3 par défaut. Les instances ASM de versions ultérieures à la V1.18.0.124 utilisent les propagateurs W3C Trace Context par défaut.
Prérequis
Activez Managed Service for OpenTelemetry. Pour plus d'informations sur la facturation, consultez Règles de facturation.
Créez une instance ASM et activez Managed Service for OpenTelemetry pour cette instance. Pour plus d'informations, consultez Collecte des données de traçage ASM vers Managed Service for OpenTelemetry.
Déployez une application dans un cluster ACK ajouté à l'instance ASM. Pour plus d'informations, consultez Déploiement d'une application dans un cluster ACK ajouté à une instance ASM.
Description de l'exemple d'application
Dans l'exemple d'application Bookinfo, le service productpage (implémenté en Python) utilise les bibliothèques OpenTracing pour extraire les en-têtes requis des requêtes HTTP au format de propagation B3.
def getForwardHeaders(request):
headers = {}
# x-b3-*** headers can be populated using the opentracing span
span = get_current_span()
carrier = {}
tracer.inject(
span_context=span.context,
format=Format.HTTP_HEADERS,
carrier=carrier)
headers.update(carrier)
# ...
incoming_headers = ['x-request-id']
# ...
for ihdr in incoming_headers:
val = request.headers.get(ihdr)
if val is not None:
headers[ihdr] = val
return headers
Le service reviews (implémenté en Java) utilise également des en-têtes HTTP au format de propagation B3.
@GET
@Path("/reviews/{productId}")
public Response bookReviewsById(@PathParam("productId") int productId,
@HeaderParam("end-user") String user,
@HeaderParam("x-request-id") String xreq,
@HeaderParam("x-b3-traceid") String xtraceid,
@HeaderParam("x-b3-spanid") String xspanid,
@HeaderParam("x-b3-parentspanid") String xparentspanid,
@HeaderParam("x-b3-sampled") String xsampled,
@HeaderParam("x-b3-flags") String xflags,
@HeaderParam("x-ot-span-context") String xotspan) {
if (ratings_enabled) {
JsonObject ratingsResponse = getRatings(Integer.toString(productId), user, xreq, xtraceid, xspanid, xparentspanid, xsampled, xflags, xotspan);
Exemple d'accès
Saisissez une URL au format http://{adresse IP de la passerelle d'entrée}/productpage dans la barre d'adresse de votre navigateur, puis appuyez sur la touche Entrée. Vous accédez à la page de l'application Bookinfo.
Consulter les applications
La page Applications de la console Managed Service for OpenTelemetry affiche les métriques clés de toutes les applications surveillées, y compris le nombre de requêtes et d'erreurs de la journée en cours ainsi que l'état de santé. Vous pouvez également configurer des libellés pour les applications afin de les filtrer par libellé.
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 la région cible.
Afficher les détails de l'application
La page Détails de l'application affiche les métriques clés, la topologie des appels et les traces de l'application sur chaque serveur où elle est déployée.
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 la région cible, puis cliquez sur le nom de l'application cible.
-
Dans le volet de navigation de gauche, cliquez sur Détails de l'application. Dans la liste des machines à gauche, cliquez sur Toutes ou sur une machine identifiée par son adresse IP.
Dans l'onglet Aperçu, consultez la topologie des appels et les métriques de performance clés. Dans l'onglet Traces, affichez la liste des traces de l'application sur la machine sélectionnée, triées par durée décroissante. La page affiche un maximum de 100 traces. Cliquez sur l'onglet Traces pour afficher la liste des enregistrements de trace. Le panneau de gauche propose des métriques de tri telles que Temps de réponse, Requêtes et Erreurs, ainsi qu'un filtrage par instance. La liste de droite affiche les informations de chaque span, telles que Heure de début, Nom de la span, Hôte/IP, Durée, Statut et traceid. Filtrez les enregistrements à l'aide de la zone de saisie Durée supérieure à et de la case à cocher Exception. Cliquez sur Afficher les journaux pour consulter les détails des journaux de l'appel correspondant.
Afficher le diagramme en cascade d'une trace
Le diagramme en cascade d'une trace affiche l'heure de génération du journal, le statut, l'adresse IP ou le nom du serveur, le nom du service et la chronologie.
Sur la page Détails de l'application, cliquez sur l'onglet Traces, puis cliquez sur l'ID de trace de la trace cible.
-
Sur la page Traces qui s'affiche, consultez le diagramme en cascade de la trace.
RemarqueLe champ Adresse IP peut afficher une adresse IP ou un nom de machine, selon la configuration d'affichage sur la page Paramètres de l'application. Pour plus d'informations, consultez Gestion des applications et des libellés.
Placez le pointeur sur un nom de service pour afficher les informations du service, y compris la durée, l'heure de début, les tags et les événements de journal. Pour plus d'informations, consultez Détails de l'application.
Le haut de la page des détails de la trace affiche un résumé, incluant l'heure de début, la durée totale, le nombre d'applications, la profondeur de la trace et le nombre total de spans. Sous le résumé, la liste des spans utilise l'indentation pour montrer la hiérarchie des appels entre les services. Les colonnes incluent Nom de la span, Chronologie (une barre bleue indiquant le pourcentage de temps consommé), Nom de l'application, Heure de début, Adresse IP et Statut.
FAQ
Pourquoi ne puis-je pas afficher les informations de trace après avoir collecté les données de traçage vers Managed Service for OpenTelemetry dans la console ASM ?
-
Consultez les journaux de poussée de trace.
Obtenez le fichier kubeconfig du cluster et utilisez kubectl pour vous connecter au cluster. Pour plus d'informations, consultez Obtention du fichier kubeconfig d'un cluster et connexion au cluster avec kubectl.
-
Exécutez la commande suivante pour afficher les journaux de poussée de trace des pods liés au déploiement tracing-on-external-zipkin dans le namespace istio-system :
kubectl logs "$(kubectl get pods -n istio-system -l app=tracing -o jsonpath='{.items[0].metadata.name}')" -n istio-system -c nginxSi la valeur
statusdans le journal Nginx en sortie est406, la requête POST vers/api/v2/spansa renvoyé un code d'état HTTP 406.remote_addr:192.168.26.98 time_local:17/Aug/2021:08:15:17 +0000 method:POST uri:/api/v2/spans host:zipkin status:406 bytes_sent:1146 referer:- useragent:- forwardedfor:192.168.26.98 request_time:0.012 upstream_response_time:0.011 remote_addr:192.168.26.98 time_local:17/Aug/2021:08:15:17 +0000 method:POST uri:/api/v2/spans host:zipkin status:406 bytes_sent:1146 referer:- useragent:- forwardedfor:192.168.26.98 request_time:0.012 upstream_response_time:0.013
-
Consultez le quota du nombre de requêtes de service par jour et le nombre réel de requêtes de service de la veille.
Connectez-vous à la console Managed Service for OpenTelemetry.
-
Dans le volet de navigation de gauche, cliquez sur Configurations du cluster pour afficher le quota de requêtes et le nombre de requêtes de la veille.
Dans le panneau Configuration du quota, le champ Quota de configuration affiche la valeur actuelle du quota en unités de 10 000 requêtes. Le nombre réel de requêtes de la veille est indiqué entre parenthèses dans le titre du panneau. Si le nombre de requêtes de la veille dépasse le quota configuré, augmentez le quota.
Si le nombre réel de requêtes de la veille dépasse le quota quotidien configuré, les données rapportées sont ignorées.
-
Modifiez le quota du nombre de requêtes de service par jour.
Si le nombre quotidien réel de requêtes dépasse le quota quotidien, les données rapportées sont ignorées et aucune information de trace n'est affichée. Augmentez le quota quotidien à une valeur supérieure au nombre réel de requêtes quotidiennes pour résoudre ce problème.
Dans le volet de navigation de gauche de la console Managed Service for OpenTelemetry, cliquez sur Configurations du cluster.
Dans l'onglet Configurations du cluster, dans la zone Configuration du quota, modifiez le Quota de configuration pour définir une valeur supérieure au nombre de requêtes de service. Puis, cliquez sur Enregistrer.
Dans la boîte de dialogue Invite, cliquez sur OK.
Pourquoi le traceid change-t-il après le traitement de la requête par la passerelle d'entrée ou le sidecar ?
Ce problème survient lorsque les en-têtes de propagation dans la requête de votre application sont incomplets, ce qui amène le proxy sidecar à les régénérer. Pour utiliser un traceid personnalisé, incluez au moins x-b3-traceid et x-b3-spanid dans le format de propagation B3, ou au moins un en-tête traceparent dans le format de propagation W3C Trace Context.