Les proxys Envoy situés sur le plan de données (clusters Kubernetes dans la maille de service) génèrent des journaux d'accès pour l'ensemble du trafic. ASM vous permet de personnaliser le contenu de ces journaux.
Prérequis
Étape 1 : Activer la journalisation des accès
ASM avant la version 1.17.2.35
Connectez-vous à la console ASM. Dans le volet de navigation de gauche, sélectionnez .
Sur la page Mesh Management, cliquez sur le nom de l'instance ASM. Dans le volet de navigation de gauche, sélectionnez .
Dans le coin supérieur droit de la page Basic Information, cliquez sur Settings.
-
Dans le panneau Settings Update, cochez l'option Enable access logging and print it to container stdout, puis cliquez sur OK.
Par défaut, le conteneur istio-proxy génère des journaux contenant les champs suivants. Si vous désactivez la journalisation des accès, le conteneur istio-proxy ne générera pas de journaux d'accès au format JSON.
ASM 1.17.2.35 et versions ultérieures
Connectez-vous à la console ASM. Dans le volet de navigation de gauche, sélectionnez .
Sur la page Mesh Management, cliquez sur le nom de l'instance ASM. Dans le volet de navigation de gauche, sélectionnez .
-
Sur la page Observability Settings, cliquez sur l'onglet Global, Namespace ou Custom.
Si vous sélectionnez l'onglet Namespace, cliquez sur Create et sélectionnez un Namespace.
Si vous sélectionnez l'onglet Custom, cliquez sur Create, sélectionnez un Namespace, puis saisissez un Name et une Match Label.
-
Dans la section Log Settings, activez l'option Enable Log Output, puis cliquez sur Submit.
Une fois l'option activée, les sidecars ou les passerelles du plan de données envoient les journaux d'accès vers la sortie standard (stdout) du conteneur. ASM prend également en charge le filtrage des journaux. Pour plus d'informations, consultez la rubrique Filtrage des journaux.
-
Consultez les journaux dans la sortie standard (stdout) du conteneur sidecar du plan de données.
Les exemples suivants illustrent la consultation des journaux d'accès à l'aide de kubectl.
-
Exécutez la commande suivante pour afficher les journaux du sidecar :
kubectl logs httpbin-5c5944c58c-w**** -c istio-proxy --tail 1 -
Exécutez la commande suivante pour afficher les journaux de la passerelle d'entrée :
kubectl -n istio-system logs istio-ingressgateway-6cff9b6b58-r**** --tail 1
-
-
(Facultatif) Consultez les journaux d'accès dans la console Container Service for Kubernetes.
Si vous utilisez un cluster Alibaba Cloud Container Service for Kubernetes (ACK), vous pouvez également consulter les journaux d'accès dans la console ACK.
Connectez-vous à la console ACK. Dans le volet de navigation de gauche, cliquez sur Clusters.
Sur la page Clusters, cliquez sur le nom de votre cluster. Dans le volet de navigation de gauche, cliquez sur .
Sur la page Pods, cliquez sur le nom du pod cible, puis sélectionnez l'onglet Logs en bas de la page pour consulter les journaux d'accès.
Pour plus d'informations, consultez les rubriques Paramètres d'observabilité et Activer la collecte des journaux du plan de contrôle et les alertes basées sur les journaux (Nouveau).
Étape 2 : Personnaliser le contenu des journaux d'accès
ASM avant la version 1.17.2.35
Connectez-vous à la console ASM. Dans le volet de navigation de gauche, sélectionnez .
Sur la page Mesh Management, cliquez sur le nom de l'instance ASM. Dans le volet de navigation de gauche, sélectionnez .
Sur la page Basic Information, dans la section Config Info, cliquez sur Update Access Log Format à droite de l'option Enable access logging and print it to container stdout.
-
Dans la boîte de dialogue Update Access Log Format, ajoutez un format de journal d'accès personnalisé. Définissez la accessLogFormat key sur
my_custom_keyet la accessLogFormat value sur%REQ(end-user)%. Cliquez ensuite sur Submit.Cet exemple permet de récupérer l'en-tête end-user d'une requête HTTP dans l'application exemple Bookinfo. Vous pouvez personnaliser le format du journal en sélectionnant parmi les champs proposés par ASM ou en ajoutant des champs personnalisés. Les journaux d'accès sont ensuite générés selon le format spécifié. La boîte de dialogue propose également des champs de journal facultatifs, tels que request_duration (
%REQUEST_DURATION%), request_tx_duration (%REQUEST_TX_DURATION%), response_duration (%RESPONSE_DURATION%) et response_tx_duration (%RESPONSE_TX_DURATION%).
ASM 1.17.2.35 et versions ultérieures
Connectez-vous à la console ASM. Dans le volet de navigation de gauche, sélectionnez .
Sur la page Mesh Management, cliquez sur le nom de l'instance ASM. Dans le volet de navigation de gauche, sélectionnez .
-
Sur la page Observability Settings, cliquez sur l'onglet Global, Namespace ou Custom.
Si vous sélectionnez l'onglet Namespace, cliquez sur Create et sélectionnez un Namespace.
Si vous sélectionnez l'onglet Custom, cliquez sur Create, sélectionnez un Namespace, puis saisissez un Name et une Match Label.
-
Dans la section Log Settings, sélectionnez des champs, modifiez les informations relatives aux champs ou cliquez sur l'icône
située à droite des métriques de journal en bas de la liste pour ajouter un nouveau champ de journal. Cliquez ensuite sur Submit.La personnalisation du format du journal n'est possible qu'après activation de l'option Enable Log Output. Dans la section Log Format, les champs par défaut sont obligatoires et ne peuvent pas être modifiés. Les valeurs des champs de journal peuvent être extraites des en-têtes de requête, des en-têtes de réponse ou des valeurs intégrées d'Envoy.
Cet exemple montre comment afficher l'en-tête
accept-encodingd'une requête. Définissez la accessLogFormat key sur accept-encoding, le Type sur Request Properties et la accessLogFormat value sur Accept-Encoding. Les expressions utilisent les formats suivants :%REQ(HeaderName)%pour les propriétés de requête,%RESP(HeaderName)%pour les propriétés de réponse et%BuiltInVariableName%pour les propriétés intégrées d'Envoy, telles que%REQUEST_DURATION%. Vous pouvez ajouter des champs personnalisés, tels que upstream_response_time (expression%RESP(X-ENVOY-UPSTREAM-SERVICE-TIME)%) ou accept-encoding (expression%REQ(Accept-Encoding)%). -
Exécutez la commande suivante pour afficher les journaux des composants du plan de données dans la maille de service :
kubectl logs httpbin-5c5944c58c-w**** -c istio-proxy --tail 1|grep accept-encoding --color=autoVous constatez que la valeur de l'en-tête Accept-Encoding ajouté à l'Étape 2 est bien présente dans le journal d'accès. Pour plus d'informations, consultez les rubriques Paramètres d'observabilité et Activer la collecte des journaux du plan de contrôle et les alertes basées sur les journaux (Nouveau).
Étape 3 : Consulter les journaux d'accès
Après avoir activé la journalisation personnalisée des accès, le proxy sidecar qui gère la requête génère des journaux selon le format spécifié.
Dans la barre d'adresse de votre navigateur, saisissez <Adresse IP de la passerelle d'entrée>/productpage pour accéder à l'application Productpage.
Connectez-vous à la console ACK. Dans le volet de navigation de gauche, cliquez sur Clusters.
Sur la page Clusters, cliquez sur le nom de votre cluster. Dans le volet de navigation de gauche, cliquez sur .
En haut de la page Deployments, définissez le Namespace sur default. Dans la ligne correspondant à l'application productpage-v1, cliquez sur Details dans la colonne Actions.
-
Sur la page des détails de l'application, cliquez sur l'onglet Logs et définissez le paramètre Container sur istio-proxy.
Le journal suivant s'affiche dans la zone de sortie. Il contient le champ
"my_custom_key":"jason", ce qui confirme que le format de journal personnalisé est actif.{"method":"GET","x_forwarded_for":null,"upstream_host":"172.19.16.90:9080","protocol":"HTTP/1.1","my_custom_key":"jason","authority_for":"addedvalues:9080","response_code":200,"start_time":"2021-10-21T11:40:12.055Z","request_id":"5222b7fb-05a6-4fae-8e13-xxx","bytes_sent":883,"downstream_remote_address":"172.19.16.11:33752","upstream_transport_failure_reason":null,"downstream_local_address":"192.168.237.140:9080","requested_server_name":null,"response_flags":"-","duration":4,"user_agent":"python-requests/2.18.4","route_name":"default","trace_id":null,"istio_policy_status":null,"path":"/addedvalues/0","upstream_cluster":"outbound|9080||addedvalues.default.svc.cluster.local","bytes_received":0,"upstream_service_time":"3","authority":"addedvalues:9080","upstream_local_address":"172.19.16.11:52430"}
Référence des champs de journal d'accès
Dans une maille de service ASM Service Mesh, le terme « upstream » (amont) désigne le destinataire d'une requête dans une chaîne d'appels, tandis que « downstream » (aval) désigne l'initiateur de la requête. Par exemple, si le service A envoie une requête au service B, le service A est considéré comme downstream et le service B comme upstream.
|
Paramètre |
Valeur |
Description |
|
authority_for |
%REQ(:AUTHORITY)% |
Le nom d'hôte cible dans la requête. Pour une requête HTTP/1.1, cela correspond à la valeur de l'en-tête |
|
bytes_received |
%BYTES_RECEIVED% |
|
|
bytes_sent |
%BYTES_SENT% |
|
|
downstream_local_address |
%DOWNSTREAM_LOCAL_ADDRESS% |
Adresse et port de destination d'origine de la connexion downstream. |
|
downstream_remote_address |
%DOWNSTREAM_REMOTE_ADDRESS% |
Adresse et port du client de la connexion downstream. |
|
method |
%REQ(:METHOD)% |
Méthode de la requête. Ce champ n'est valide que pour les requêtes HTTP. |
|
path |
%REQ(X-ENVOY-ORIGINAL-PATH?:PATH)% |
Chemin de la requête. |
|
protocol |
%PROTOCOL% |
Protocole de la requête. |
|
request_id |
%REQ(X-REQUEST-ID)% |
Identifiant unique de la requête. |
|
requested_server_name |
%REQUESTED_SERVER_NAME% |
Nom du serveur défini dans la connexion SSL (Server Name Indication, SNI). |
|
response_code |
%RESPONSE_CODE% |
Code de réponse de la requête HTTP. |
|
response_flags |
%RESPONSE_FLAGS% |
Informations supplémentaires concernant la réponse ou la connexion. Pour plus d'informations sur les valeurs et leur signification, consultez la référence response_flag. |
|
route_name |
%ROUTE_NAME% |
Nom de la route correspondante, cohérent avec le nom de route défini dans le service virtuel. Si cette valeur est vide (« - »), cela signifie qu'aucune route n'a été trouvée. |
|
start_time |
%START_TIME% |
Heure de début du traitement de la requête, précise à la milliseconde près. |
|
trace_id |
%TRACE_ID% |
Identifiant de trace utilisé pour le traçage. |
|
upstream_cluster |
%UPSTREAM_CLUSTER% |
Service cible amont et sous-ensemble. |
|
upstream_host |
%UPSTREAM_HOST% |
Hôte cible amont, généralement une adresse IP de pod et un port. |
|
upstream_local_address |
%UPSTREAM_LOCAL_ADDRESS% |
Adresse locale utilisée pour établir la connexion avec l'hôte amont. |
|
duration |
%DURATION% |
|
|
request_duration |
%REQUEST_DURATION% |
|
|
request_tx_duration |
%REQUEST_TX_DURATION% |
|
|
response_duration |
%RESPONSE_DURATION% |
|
|
response_tx_duration |
%RESPONSE_TX_DURATION% |
|
|
upstream_service_time (sidecar) |
%RESP(X-ENVOY-UPSTREAM-SERVICE-TIME)% |
Dans un journal d'accès de sidecar ou de passerelle, ce champ indique le temps de traitement de l'hôte amont ainsi que le temps de communication réseau avec cet hôte. Si cette valeur est élevée, vérifiez les points suivants :
|
|
upstream_response_time (passerelle) |
Un client downstream lent augmente le temps nécessaire à l'hôte amont pour recevoir la requête. Cela peut également retarder les requêtes suivantes effectuées par cet hôte amont.
Référence des indicateurs de réponse
Le champ response_flag dans le journal d'accès fournit des détails supplémentaires sur la requête ou la connexion. Le tableau suivant décrit chaque indicateur.
**Indicateur**
|
**Description**
| | --- | --- | |
UH
|
Aucun hôte amont sain n'a été trouvé. Cela est généralement dû à l'absence de points de terminaison disponibles pour le service de destination.
| |
UF
|
Échec de la connexion à un hôte amont. Cela est généralement dû au fait que l'application amont n'écoute pas sur le port configuré.
| |
UO
|
La connexion amont a été interrompue en raison du disjoncteur (circuit breaking).
| |
NR
|
Aucune route correspondante n'a été trouvée pour la requête.
| |
NC
|
Le service de destination est introuvable. Cela signifie généralement que le nom d'hôte ou le nom du sous-ensemble dans le service virtuel est incorrect.
| |
URX
|
La requête a été limitée par le débit (rate-limited).
| |
DC
|
Le client downstream s'est déconnecté.
| |
UR
|
L'hôte amont a réinitialisé la connexion.
| |
UAEX
|
Le proxy ASM a rejeté la requête sur la base d'une réponse provenant d'un service d'autorisation externe.
| |
DPE
|
Une erreur de protocole s'est produite lors du traitement de la requête downstream. Cela indique que l'application downstream a envoyé une requête utilisant un protocole inattendu. Vérifiez si le nom du port du service dans votre cluster possède un préfixe de protocole correct, tel que `http-80`, `http` ou `grpc`.
| |
UPE
|
Une erreur de protocole s'est produite lors de l'envoi d'une requête à l'hôte amont. Cela indique que le proxy de la maille ASM a tenté de transférer une requête à l'hôte amont en utilisant un protocole inattendu. Vérifiez si le nom du port du service dans votre cluster possède un préfixe de protocole correct, tel que `http-80`, `http` ou `grpc`.
|
Opérations associées
Vous pouvez également utiliser Simple Log Service (SLS) pour collecter les journaux d'accès du plan de données. Pour plus d'informations, consultez la rubrique Générer et collecter les journaux d'accès de la passerelle ASM.