ASM s'intègre à Service Mesh pour offrir aux développeurs d'applications distribuées des fonctionnalités telles que la restauration complète des traces, les statistiques de volume de requêtes, la visualisation de la topologie et l'analyse des dépendances applicatives. Cela vous aide à analyser et diagnostiquer rapidement les goulots d'étranglement de performance dans un Service Mesh et améliore l'efficacité du développement et du dépannage. Cette rubrique explique comment implémenter Service Mesh dans ASM.
Contexte
Le traçage distribué est une méthode permettant de profiler et de surveiller les applications, en particulier celles construites sur une architecture de microservices. Lorsque vous utilisez un maillage de services, le proxy Istio, Envoy, peut générer et envoyer automatiquement des spans. Toutefois, pour corréler ces spans en une seule trace, votre application doit propager les en-têtes HTTP correspondants en les collectant à partir des requêtes entrantes et en les ajoutant à toutes les requêtes sortantes. OpenTelemetry prend en charge différents propagateurs, et les formats d'en-tête spécifiques varient entre eux. Les sections suivantes répertorient les propagateurs pris en charge par OpenTelemetry ainsi que leurs en-têtes correspondants.
Propagateur B3
x-request-idx-b3-traceidx-b3-spanidx-b3-parentspanidx-b3-sampledx-b3-flagsx-ot-span-context
Propagateur W3C Trace Context
traceparenttracestate
Les versions d'ASM antérieures à 1.18.0.124 utilisent le propagateur B3 par défaut. Les versions ultérieures utilisent le propagateur W3C Trace Context par défaut.
Prérequis
Managed Service for OpenTelemetry est activé pour votre compte Alibaba Cloud. Pour plus d'informations sur la facturation, consultez Facturation.
Le traçage est activé pour votre instance ASM. Pour plus d'informations, consultez Configurer ASM pour rapporter les données de traçage.
Vous avez déployé une application dans le cluster associé à votre instance ASM.
Exemple d'analyse
Dans l'application Bookinfo, le service productpage, écrit en Python, utilise une bibliothèque OpenTracing et le format d'en-tête du propagateur B3 pour extraire les en-têtes requis des requêtes HTTP.
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
De même, le service reviews, écrit en Java, utilise également les en-têtes HTTP du propagateur 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);
Accéder à l'exemple d'application
Dans la barre d'adresse de votre navigateur, saisissez http://{IP address of the ingress gateway}/productpage pour afficher la page de l'application Bookinfo.
Consulter la liste des applications
La page Applications affiche les métriques clés pour toutes les applications surveillées, telles que les scores de santé, les requêtes d'aujourd'hui et les erreurs d'aujourd'hui. Vous pouvez également configurer des tags personnalisés pour les applications, puis filtrer les applications par tag.
Connectez-vous à la console Managed Service for OpenTelemetry.
Dans le volet de navigation de gauche, cliquez sur Applications et sélectionnez la région cible en haut de la page.
Afficher les détails de l'application
La page Détails de l'application affiche les métriques de performance clés, une topologie de service et les traces pour l'application sur chaque machine où elle est déployée.
Connectez-vous à la console Managed Service for OpenTelemetry.
Dans le volet de navigation de gauche, cliquez sur Applications. Sélectionnez une région en haut de la page, puis cliquez sur le nom de l'application que vous souhaitez gérer.
-
Dans le volet de navigation de gauche, cliquez sur Application Details. Dans la liste des machines sur la gauche, cliquez sur All ou sur une machine individuelle identifiée par son adresse IP.
Sous l'onglet Overview, vous pouvez consulter la topologie du service et les métriques de performance clés. Sous l'onglet Traces, vous pouvez afficher une liste des traces pour l'application sur la machine sélectionnée, triées par durée dans l'ordre décroissant. La page répertorie un maximum de 100 traces. Sur la page Application Details, vous pouvez consulter les enregistrements de traçage distribué pour le service sélectionné, tels que
productpage.default. Ces enregistrements incluent la durée, l'état et l'ID de trace de chaque span. Vous pouvez également filtrer les données à l'aide du sélecteur de plage horaire dans le coin supérieur droit, par exemple Last 30 minutes.
Afficher le diagramme en cascade de la trace
Le diagramme en cascade d'une trace affiche des informations telles que l'heure de début, l'état, l'adresse IP ou le nom de la machine, le nom du service, une chronologie et d'autres détails.
Sur la page Application Details, cliquez sur l'onglet Traces, puis cliquez sur l'ID de trace du trace souhaité.
-
La page Traces s'affiche, montrant le waterfall chart pour le trace.
RemarqueL'affichage d'une adresse IP ou d'un nom de machine dans la colonne IP Address dépend de la configuration d'affichage sur la page Application Settings. Pour plus d'informations, consultez Gérer les applications et les tags.
Vous pouvez survoler un nom de service pour afficher sa durée, son heure de début, ses tags et ses é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 les métadonnées de la trace, y compris Start Time, Duration, Service count, Trace depth et Total spans. Sous les métadonnées se trouve le diagramme en cascade, qui utilise l'indentation pour montrer la hiérarchie d'appel de chaque span. Le tableau comprend les colonnes Span name, Timeline, Service Name, Start Time, IP Address et Status. Les barres bleues dans la colonne Timeline représentent la durée relative et la séquence de chaque span.
FAQ
Pourquoi les traces d'ASM ne sont-elles pas visibles ?
-
Consultez les journaux de push des traces.
-
Exécutez la commande suivante pour afficher les journaux de push des traces pour
tracing-on-external-zipkindans leistio-systemnamespace.kubectl logs "$(kubectl get pods -n istio-system -l app=tracing -o jsonpath='{.items[0].metadata.name}')" -n istio-system -c nginxLe code d'état dans les journaux de push des traces est 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
-
Vérifiez le quota de requêtes et le volume de requêtes de la veille.
Connectez-vous à la console Managed Service for OpenTelemetry.
-
Dans le volet de navigation de gauche, cliquez sur Cluster Configurations pour afficher le quota de requêtes et le volume de requêtes de la veille.
Dans le panneau Quota configuration, Configuration quota est affiché en unités de 10 000 requêtes.
Le volume de requêtes du service est supérieur au quota de requêtes de traçage.
-
Modifiez le quota de requêtes.
Si le volume de requêtes du service dépasse le quota de traçage, les données rapportées sont ignorées et les traces du service ne seront pas visibles. Vous devez augmenter le quota pour qu'il dépasse le volume de requêtes du service.
Dans le volet de navigation de gauche de la console Managed Service for OpenTelemetry, cliquez sur Cluster Configurations.
Sous l'onglet Cluster Configurations, augmentez le Configuration quota dans la section Quota configuration pour qu'il dépasse le volume de requêtes du service. Ensuite, cliquez sur Save.
Dans la boîte de dialogue Note, cliquez sur OK.
Pourquoi l'identifiant traceid change-t-il dans ASM ?
Cela se produit si l'application initiatrice envoie une requête avec des en-têtes de propagation incomplets. Envoy considère que les informations de traçage sont incomplètes et régénère les en-têtes de propagation. Pour générer votre propre traceid, vous devez inclure les en-têtes requis dans la requête. Pour le propagateur B3, la requête doit inclure au moins les en-têtes x-b3-traceid et x-b3-spanid. Pour le propagateur W3C Trace Context, la requête doit inclure au moins l'en-tête traceparent.