Service Mesh (ASM) propose des paramètres d'observabilité pour les journaux, les métriques et le tracing. Utilisez la console ASM pour personnaliser ces paramètres au niveau global, au niveau du namespace ou pour des workloads spécifiques. Par exemple, définissez le format de sortie des journaux, ajoutez des dimensions aux métriques, activez ou désactivez des métriques spécifiques et définissez le pourcentage d'échantillonnage du tracing. Cette rubrique explique comment utiliser les paramètres d'observabilité.
Prérequis
Une instance ASM version 1.17.2.35 ou ultérieure est requise. Pour plus d'informations, consultez les rubriques Créer une instance ASM ou Mettre à niveau une instance ASM.
Étendues
|
Type |
Description |
|
Global |
Une configuration globale prend en charge les paramètres des journaux, des métriques et du tracing. Il n'existe qu'une seule configuration globale et elle ne peut pas être supprimée. Les paramètres de tracing sont pris en charge uniquement au niveau global. |
|
Namespace |
Permet de créer une configuration d'observabilité dédiée pour un namespace. Chaque namespace ne peut avoir qu'une seule configuration d'observabilité. |
|
Personnalisée |
Une configuration personnalisée utilise un sélecteur d'étiquettes pour définir son étendue. Chaque workload peut être ciblé par au plus une configuration personnalisée. |
Procédure
Global
Connectez-vous à la console ASM. Dans le volet de navigation de gauche, choisissez .
Sur la page Mesh Management, cliquez sur le nom de l'instance ASM. Dans le volet de navigation de gauche, choisissez .
-
Sur la page Observability Settings, cliquez sur l'onglet Global. Configurez les journaux, les métriques et le tracing selon vos besoins, puis cliquez sur Submission.
Cliquez sur les liens du tableau suivant pour afficher les descriptions détaillées des configurations.
Section de configuration
Description
Namespace
Connectez-vous à la console ASM. Dans le volet de navigation de gauche, choisissez .
Sur la page Mesh Management, cliquez sur le nom de l'instance ASM. Dans le volet de navigation de gauche, choisissez .
-
Sur la page Observability Settings, cliquez sur l'onglet Namespace puis sur Create. Sélectionnez le Namespace cible, configurez les journaux et les métriques selon vos besoins, puis cliquez sur Create.
Cliquez sur les liens du tableau suivant pour afficher les descriptions détaillées des configurations.
Section de configuration
Description
Custom
Connectez-vous à la console ASM. Dans le volet de navigation de gauche, choisissez .
Sur la page Mesh Management, cliquez sur le nom de l'instance ASM. Dans le volet de navigation de gauche, choisissez .
-
Sur la page Observability Settings, cliquez sur l'onglet Custom, sélectionnez le Namespace cible, puis cliquez sur Create. Saisissez un Name et un Label selector, configurez les journaux et les métriques selon vos besoins, puis cliquez sur Create.
Cliquez sur les liens du tableau suivant pour afficher les descriptions détaillées des configurations.
Section de configuration
Description
Paramètres des journaux
Les paramètres des journaux incluent l'activation ou la désactivation de la sortie des journaux d'accès, la définition du format de sortie des journaux, la personnalisation du format des journaux et le filtrage des journaux.
Sortie des journaux d'accès
-
Dans la section Log Settings, activez ou désactivez l'option Enable Log Output selon vos besoins.
Si vous activez cette option, les sidecars ou les passerelles du plan de données envoient les journaux d'accès vers la sortie standard (stdout) du conteneur.
Si vous désactivez cette option, les sidecars ou les passerelles du plan de données cessent d'envoyer les journaux vers la sortie standard du conteneur.
-
Consultez les journaux dans la sortie standard du conteneur sidecar du plan de données.
Les exemples suivants montrent comment afficher les 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 ingress :
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 sur l'onglet Logs en bas de la page pour afficher les journaux d'accès.
Format de sortie des journaux
Cette fonctionnalité nécessite une instance ASM version 1.20.6.36 ou ultérieure. Pour plus d'informations sur la mise à niveau d'une instance, consultez la rubrique Mettre à niveau une instance ASM.
Dans la section Log Settings, définissez le Log Output Format sur JSON ou TEXT selon vos besoins.
Si vous sélectionnez JSON, les journaux d'accès sont envoyés vers la sortie standard du conteneur sous forme de chaînes JSON.
Si vous sélectionnez TEXT, les journaux d'accès sont envoyés vers la sortie standard du conteneur sous forme de texte brut.
Format de journal personnalisé
-
Dans la section Log Settings, sélectionnez des champs, modifiez les informations des champs personnalisés ou cliquez sur l'icône
en bas de la liste des champs de journal pour ajouter un nouveau champ.Vous ne pouvez personnaliser le format des journaux que si l'option Enable Log Output est activée. Dans la section Log Format, les champs de journal sélectionnés par défaut sont obligatoires et ne peuvent pas être désélectionné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.
Par exemple, pour enregistrer l'en-tête de requête
accept-encoding, définissez la accessLogFormat key sur accept-encoding, le Type sur Request Properties et la accessLogFormat value sur Accept-Encoding. Le modèle de format pour un en-tête de requête est%REQ(HEADER_NAME)%(par exemple,%REQ(:AUTHORITY)%), pour un en-tête de réponse, il est%RESP(HEADER_NAME)%(par exemple,%RESP(X-ENVOY-UPSTREAM-SERVICE-TIME)%) et pour un attribut Envoy intégré, il est%ATTRIBUTE_NAME%(par exemple,%REQUEST_DURATION%). -
Exécutez la commande suivante pour afficher les journaux des composants du plan de données dans le service mesh.
kubectl logs httpbin-5c5944c58c-w**** -c istio-proxy --tail 1|grep accept-encoding --color=autoLe journal d'accès affiche désormais la valeur de l'en-tête Accept-Encoding que vous avez ajoutée à l'étape 1.
Filtrage des journaux
Sous la section Log Settings, sélectionnez l'option Enable Log Filter pour activer le filtrage des journaux, puis saisissez une expression de filtrage dans la zone de texte. Les journaux d'accès sont générés uniquement pour les requêtes qui correspondent à l'expression.
Par exemple, pour enregistrer uniquement les requêtes qui répondent à la condition Response Http Status >= 400, utilisez l'expression response.code >= 400. Pour plus d'informations, consultez les Expressions CEL et champs courants.
Expressions CEL et champs courants
Les expressions de filtrage des journaux sont des expressions Common Expression Language (CEL) standard. Le tableau suivant répertorie les champs courants pour les expressions CEL. Pour plus d'informations, consultez la documentation officielle de CEL et d'Envoy.
|
Attribut |
Type |
Description |
|
request.path |
string |
Le chemin de la requête. |
|
request.url_path |
string |
Le chemin de la requête sans la chaîne de requête. |
|
request.host |
string |
La partie hôte de l'URL. |
|
request.method |
string |
La méthode de la requête. |
|
request.headers |
map<string, string> |
Tous les en-têtes de requête, indexés par leurs noms en minuscules. |
|
request.useragent |
string |
La valeur de l'en-tête User-Agent. |
|
request.time |
timestamp |
L'heure à laquelle le premier octet de la requête est reçu. |
|
request.id |
string |
L'ID de la requête. |
|
request.protocol |
string |
Le protocole de la requête. Valeurs valides : |
|
request.query |
string |
La chaîne de requête de l'URL de la requête. |
|
response.code |
int |
Le code d'état HTTP de la réponse. |
|
response.code_details |
string |
Détails concernant le code de réponse. |
|
response.grpc_status |
int |
Le code d'état gRPC dans la réponse. |
|
response.headers |
map<string, string> |
Tous les en-têtes de réponse, indexés par leurs noms en minuscules. |
|
response.size |
int |
La taille du corps de la réponse en octets. |
|
response.total_size |
int |
La taille totale du message de réponse en octets, y compris le corps et les en-têtes. |
Paramètres des métriques
Les paramètres des métriques incluent l'activation ou la désactivation de la génération de métriques et la configuration des dimensions des métriques.
Génération de métriques
Les métriques sont classées en métriques côté client et en métriques côté serveur.
Métriques côté client : Métriques générées lorsqu'un sidecar agit en tant que client pour initier des requêtes. Les métriques de passerelle sont également classées comme métriques côté client.
Métriques côté serveur : Métriques générées lorsqu'un sidecar agit en tant que serveur pour recevoir des requêtes.
-
Dans la section Metric Settings, dans la colonne Client-Side Metrics ou Server-Side Metrics, cochez ou décochez la case Enabled d'une métrique selon vos besoins.
Si une métrique est activée, le sidecar ou la passerelle du plan de données expose cette métrique via le chemin
/stats/prometheussur le port 15020.Si une métrique est désactivée, elle n'est pas exposée sur le port et le chemin spécifiés.
-
Exécutez la commande suivante pour afficher les métriques exposées par un sidecar ou une passerelle.
Vous pouvez utiliser kubectl pour exécuter une commande curl à l'intérieur du conteneur sidecar ou de la passerelle afin d'accéder au chemin
/stats/prometheussur le port local 15020 et afficher les métriques exportées.kubectl exec httpbin-5c5944c58c-w**** -c istio-proxy -- curl 127.0.0.1:15020/stats/prometheus|head -n 10Exemple de sortie :
# TYPE istio_agent_cert_expiry_seconds gauge istio_agent_cert_expiry_seconds{resource_name="default"} 46725.287654548 # HELP istio_agent_endpoint_no_pod Endpoints without an associated pod. # TYPE istio_agent_endpoint_no_pod gauge istio_agent_endpoint_no_pod 0 # HELP istio_agent_go_gc_duration_seconds A summary of the pause duration of garbage collection cycles. # TYPE istio_agent_go_gc_duration_seconds summary istio_agent_go_gc_duration_seconds{quantile="0"} 5.0149e-05 istio_agent_go_gc_duration_seconds{quantile="0.25"} 9.8807e-05 ......
Dimensions des métriques
Les dimensions des métriques fournissent des informations contextuelles riches. Vous pouvez utiliser ces dimensions pour filtrer les métriques cibles dans Prometheus. Par exemple, vous pouvez utiliser la dimension source_app pour filtrer les métriques des requêtes provenant d'une application cliente spécifique.
Modifier les dimensions par défaut
Suivez ces étapes pour modifier les dimensions par défaut :
Dans la section Metric Settings, dans la colonne Client-Side Metrics ou Server-Side Metrics, cliquez sur Edit dimension pour une métrique activée.
Dans la boîte de dialogue Customize CLIENT dimension configuration ou Customize SERVER dimension configuration, cochez ou décochez les cases correspondant aux dimensions à exporter, puis cliquez sur Confirm.
Par exemple, si aucune dimension n'est désactivée, vous pouvez exécuter une commande curl à l'intérieur du conteneur sidecar ou de la passerelle pour accéder au chemin /stats/prometheus sur le port local 15020 et afficher les métriques exportées.
kubectl exec httpbin-5c5944c58c-w**** -c istio-proxy -- curl 127.0.0.1:15020/stats/prometheus
En prenant la métrique istio_request_bytes_sum (qui correspond à la métrique REQUEST_SIZE dans la console) comme exemple, vous pouvez voir qu'elle inclut toutes les dimensions par défaut.
istio_request_bytes_sum{reporter="destination",source_workload="istio-ingressgateway",source_canonical_service="unknown",source_canonical_revision="latest",source_workload_namespace="istio-system",source_principal="spiffe://cluster.local/ns/istio-system/sa/istio-ingressgateway",source_app="istio-ingressgateway",source_version="unknown",source_cluster="c479fc4abd2734bfaaa54e9e36fb26c01",destination_workload="httpbin",destination_workload_namespace="default",destination_principal="spiffe://cluster.local/ns/default/sa/httpbin",destination_app="httpbin",destination_version="v1",destination_service="httpbin.default.svc.cluster.local",destination_canonical_service="httpbin",destination_canonical_revision="v1",destination_service_name="httpbin",destination_service_namespace="default",destination_cluster="c479fc4abd2734bfaaa54e9e36fb26c01",request_protocol="http",response_code="200",grpc_response_status="",response_flags="-",connection_security_policy="mutual_tls"} 18000
Si vous modifiez la métrique par défaut REQUEST_SIZE côté serveur pour ne conserver que la dimension response_code, puis que vous accédez au chemin /stats/prometheus, vous verrez que la métrique n'inclut plus que la dimension response_code.
istio_request_bytes_sum{response_code="200"} 16550
Ajouter des dimensions personnalisées
Suivez ces étapes pour ajouter des dimensions personnalisées :
Dans la section Metric Settings, dans la colonne Client-Side Metrics ou Server-Side Metrics, cliquez sur Edit dimension pour une métrique activée.
Dans la boîte de dialogue Customize CLIENT dimension configuration ou Customize SERVER dimension configuration, sous l'option Custom Dimensions, modifiez le nom et la valeur de la dimension, puis cliquez sur Confirm.
Par exemple, si vous modifiez la métrique REQUEST_SIZE côté serveur et ajoutez une dimension personnalisée avec le nom request_path et la valeur request.path, la métrique exportée inclura la dimension personnalisée request_path lorsque vous accéderez au chemin /stats/prometheus.
istio_request_bytes_sum{response_code="200",request_path="/spec.json"} 5800
Vous pouvez réduire la consommation de mémoire d'Envoy et de Prometheus en supprimant les dimensions par défaut inutiles. Toutefois, comme la plupart des dimensions sont généralement utiles, la section Metric Settings n'affiche que les dimensions que vous avez explicitement supprimées.
Paramètres de tracing
Les paramètres de tracing incluent le pourcentage d'échantillonnage et les balises personnalisées. Pour construire des chaînes d'appel complètes, le tracing nécessite des configurations de reporting cohérentes sur tous les services. Des points de terminaison de reporting ou des taux d'échantillonnage incohérents peuvent entraîner des traces incomplètes. Pour cette raison, les versions d'ASM antérieures à la 1.24.6.83 ne permettent pas les configurations de tracing au niveau du namespace ou du workload. À partir de la version 1.24.6.83, ASM prend en charge la modification des ressources Telemetry à l'aide de l'API Kubernetes pour activer les configurations de tracing au niveau du namespace et du workload. Pour plus d'informations sur la configuration des ressources Telemetry, consultez la rubrique CRD Telemetry.
Pourcentage d'échantillonnage
Vous pouvez personnaliser le pourcentage d'échantillonnage pour le tracing, qui détermine le pourcentage de requêtes pour lesquelles des traces sont générées. Une valeur de 0 désactive le tracing.
Balises personnalisées
Vous pouvez personnaliser les balises jointes aux spans de tracing signalées. Dans la section Tracing Analysis Settings, cliquez sur Add Custom Tags, puis configurez le Name, le Type et la Value.
Les types valides incluent Fixed Value, Request Header et Environment Variable. Le tableau suivant décrit chaque type et fournit des exemples.
|
Type |
Description |
Exemple de configuration |
|
Fixed Value |
La valeur de la balise est fixée à la chaîne que vous spécifiez. |
|
|
Request Header |
La balise utilise la valeur d'un en-tête de requête spécifié. Si l'en-tête n'existe pas dans la requête, la valeur par défaut est utilisée. Par exemple, vous pouvez obtenir la valeur de la balise à partir de l'en-tête |
|
|
Environment Variable |
La balise utilise la valeur d'une variable d'environnement spécifiée du workload. Si la variable d'environnement n'existe pas dans le workload, la valeur par défaut est utilisée. Par exemple, vous pouvez obtenir la valeur de la balise à partir de la variable d'environnement |
|