Observabilité avec Envoy
Ce guide explique comment générer le traçage et la journalisation pour le proxy Envoy. Vous y apprendrez également à exporter les informations vers Cloud Trace et Cloud Logging.
L'utilisation d'un maillage de services vous permet d'observer le trafic vers et depuis des services. Vous disposez ainsi de données enrichies pour la surveillance et le débogage, sans modifications du code dans le service lui-même. Dans l'architecture proxy side-car utilisée par Cloud Service Mesh, le proxy est le composant qui traite les requêtes et fournit les informations de télémétrie nécessaires. Les informations de télémétrie doivent être collectées et stockées dans un emplacement centralisé pour une utilisation ultérieure, comme l'analyse des données, les alertes et le dépannage.
Configuration de la démonstration
Ce guide utilise la configuration suivante pour illustrer le traçage et la journalisation :
- Une application unique qui écoute le port HTTP et renvoie le nom d'hôte de l'instance de machine virtuelle (VM) ayant diffusé la requête. Dans le schéma, cette application se trouve en haut à droite, HTTP Service(s) (10.10.10.10:80). Une ou plusieurs VM peuvent fournir ce service.
- Une VM Compute Engine unique exécutant un client de ce service. Dans le schéma, il s'agit de la Demo Compute Engine VM (VM Compute Engine de démonstration).
- Un proxy side-car Envoy installé et configuré par Cloud Service Mesh. Dans le schéma, il s'agit de Envoy.
- Une application cliente de services, affichée dans la zone de gauche, est le client du service HTTP exécuté sur
10.10.10.10:80
.
Les étapes suivantes correspondent aux étiquettes numérotées du diagramme :
Cloud Service Mesh configure le proxy Envoy pour effectuer les opérations suivantes:
- Équilibrer le trafic pour le service
10.10.10.10:80
. - Stocker les informations de journal d'accès pour chaque requête émise pour le service.
- Générer des informations de traçage pour le service.
- Équilibrer le trafic pour le service
Après l'envoi d'une requête à
10.10.10.10
par le client, le proxy side-car achemine la requête vers la bonne destination.Le proxy side-car génère également les informations de télémétrie nécessaires :
- Ajoute une entrée au journal d'accès sur le disque local avec des informations supplémentaires sur la requête.
- Génère une entrée de trace et l'envoie à Cloud Trace à l'aide du traçage OpenCensus Envoy.
L'agent Logging exporte ces données vers l'API Cloud Logging afin qu'elles soient disponibles dans l'interface Cloud Logging.
Prérequis
Avant de terminer la configuration, assurez-vous d'avoir effectué les opérations suivantes :
- L'API Traffic Director est activée et les autres conditions préalables décrites dans la section Préparer la configuration avec des VM et des charges de travail sans proxy sont remplies.
- L'API Cloud Trace est activée.
- Les rôles IAM (Identity and Access Management) suivants sont configurés pour le compte de service utilisé par la VM Compute Engine :
- Rôle d'Agent Cloud Trace (
roles/cloudtrace.agent
) - Rôle de Rédacteur de journaux (
roles/logging.logWriter
)
- Rôle d'Agent Cloud Trace (
- Les règles de pare-feu autorisent le trafic vers la VM que vous configurez dans le cadre de cette configuration.
Configurer le service de démonstration et Cloud Service Mesh
Ce document utilise plusieurs scripts d'interface système pour effectuer les étapes requises afin de configurer le service de démonstration. Examinez les scripts pour comprendre les étapes spécifiques qu'ils effectuent.
Démarrez une VM Compute Engine et configurez le service HTTP sur la VM :
curl -sSO https://storage.googleapis.com/traffic-director/demo/observability/setup_demo_service.sh chmod 755 setup_demo_service.sh && ./setup_demo_service.sh
Le script
setup_demo_service.sh
crée un modèle de VM qui lance apache2 au démarrage d'une VM et un groupe d'instances géré utilisant ce modèle. Le script lance une seule instance sans activer l'autoscaling.Utilisez Cloud Service Mesh pour configurer le routage pour le service
10.10.10.10
:curl -sSO https://storage.googleapis.com/traffic-director/demo/observability/setup_demo_trafficdirector.sh chmod 755 setup_demo_trafficdirector.sh && ./setup_demo_trafficdirector.sh
Le script
setup_demo_trafficdirector.sh
configure les paramètres nécessaires pour le service géré Cloud Service Mesh.Démarrez une VM Compute Engine qui exécute un client du service HTTP, avec le proxy side-car installé et configuré sur la VM. Dans la commande suivante, remplacez
PROJECT_ID
par l'ID du projet auquel les informations de Cloud Trace doivent être envoyées. Il s'agit généralement du même projet Google Cloud que celui auquel appartient votre VM.curl -sSO https://storage.googleapis.com/traffic-director/demo/observability/setup_demo_client.sh chmod 755 setup_demo_client.sh && ./setup_demo_client.sh PROJECT_ID
Le script
setup_demo_client.sh
crée une VM Compute Engine avec un proxy Envoy préconfiguré pour utiliser Cloud Service Mesh.
Les paramètres de configuration supplémentaires suivants permettent le traçage et la journalisation :
- Les variables de métadonnées du nœud d'amorçage
TRAFFICDIRECTOR_ACCESS_LOG_PATH
etTRAFFICDIRECTOR_ENABLE_TRACING
permettent la journalisation et le traçage, comme décrit dans la section Configurer les attributs d'amorçage Envoy pour Cloud Service Mesh. - La configuration de l'amorçage statique permet d'exporter les informations de trace vers Trace à l'aide d'OpenCensus.
Après avoir exécuté ces scripts, vous pouvez vous connecter à la VM td-observability-demo-client
et accéder au service HTTP disponible à l'adresse 10.10.10.10
:
curl http://10.10.10.10
À ce stade, Envoy génère des informations de journalisation et de traçage. La section suivante explique comment exporter des journaux et des informations de traçage.
Configurer l'exportation de la trace vers Cloud Trace
La configuration d'amorçage Envoy que vous avez créée lors de l'exécution du script setup-demo-client.sh
est suffisante pour générer des informations de traçage.
Toutes les autres configurations sont facultatives. Si vous souhaitez configurer des paramètres supplémentaires, consultez la page de configuration d'OpenCensus Envoy et modifiez les options de traçage dans la configuration d'amorçage Envoy.
Après avoir envoyé un exemple de requête au serveur de démonstration (curl
10.10.10.10
), accédez à l'interface Trace dans Google Cloud Console (Trace > Listes de traces).
Un enregistrement de trace correspondant à la requête que vous avez envoyée s'affiche.
Pour en savoir plus sur l'utilisation de Trace, consultez la documentation Cloud Trace.
Configurer l'exportation des journaux d'accès vers Cloud Logging
À ce stade, Envoy doit enregistrer les informations du journal d'accès sur le disque local de la VM où il s'exécute. Pour exporter ces enregistrements vers Cloud Logging, vous devez installer l'agent Logging localement. Cela nécessite l'installation et la configuration de l'agent Logging.
Installer l'agent Logging
Installez l'agent Logging sur la VM à partir de laquelle les informations de journalisation sont exportées. Pour cet exemple de configuration, la VM est td-observability-demo-vm
.
curl -sSO https://dl.google.com/cloudagents/add-logging-agent-repo.sh sudo bash add-logging-agent-repo.sh --also-install
Pour plus d'informations, consultez la page Installer l'agent Cloud Logging sur une seule VM.
Configurer l'agent Logging
Vous pouvez exporter les journaux Envoy sous forme de texte non structuré ou structuré.
Exporter les journaux Envoy sous forme de texte non structuré
Cette option permet d'exporter les enregistrements du journal d'accès vers Cloud Logging sous forme de texte brut. Chaque entrée du journal d'accès est exportée en tant qu'entrée unique vers Cloud Logging. Cette configuration est plus facile à installer car elle repose sur un analyseur distribué avec la version actuelle de l'agent Logging. Toutefois, il est plus difficile de filtrer et de traiter les entrées de journal en texte brut lorsque vous utilisez cette option.
Téléchargez et installez le fichier de configuration d'exportation non structuré du journal d'accès Envoy.
curl -sSO https://storage.googleapis.com/traffic-director/demo/observability/envoy_access_fluentd_unstructured.conf sudo cp envoy_access_fluentd_unstructured.conf /etc/google-fluentd/config.d/envoy_access.conf
Redémarrez l'agent. Les modifications prennent effet au démarrage de l'agent :
sudo service google-fluentd restart
Exporter les journaux Envoy sous forme de texte structuré
Installez l'analyseur de journaux d'accès Envoy à partir de GitHub:
sudo /opt/google-fluentd/embedded/bin/gem install fluent-plugin-envoy-parser
Téléchargez et installez le fichier de configuration pour exporter les journaux d'accès Envoy dans un format structuré :
curl -sSO https://storage.googleapis.com/traffic-director/demo/observability/envoy_access_fluentd_structured.conf sudo cp envoy_access_fluentd_structured.conf /etc/google-fluentd/config.d/envoy_access.conf
Redémarrez l'agent. Les modifications prennent effet au démarrage de l'agent :
sudo service google-fluentd restart
Pour en savoir plus, consultez la section Configurer l'agent Logging.
Vérifier la configuration
- À partir de la VM proxy side-car, générez une requête auprès du service de démonstration.
Un enregistrement de journal local est créé. Par exemple, vous pouvez exécuter
curl 10.10.10.10
. - Dans la console Google Cloud, accédez à Logging > Explorateur de journaux. Dans le menu déroulant, sélectionnez le type de journal envoy-access. Une entrée de journal s'affiche pour la requête la plus récente au format non structuré ou structuré, en fonction du type de configuration choisi précédemment.
Dépannage
Lisez les sections suivantes pour découvrir comment résoudre les différents problèmes d'observabilité avec Envoy.
Configurer le traçage sur plusieurs projets
Si vous souhaitez tracer les requêtes sur des Envoy déployés dans plusieurs projets, tenez compte des points suivants :
- Chaque Envoy doit être configuré avec les identifiants du projet dans lequel il est exécuté.
- Chaque Envoy envoie des données de trace au projet qui correspond aux identifiants avec lesquels il s'exécute.
- Vous pouvez afficher les délais de traçage des requêtes inter-projets si vos applications conservent la valeur de l'en-tête HTTP
X-Cloud-Trace-Context
lors des requêtes.
Compatibilité de Trace avec les applications gRPC sans proxy
La configuration du traceur OpenCensus d'Envoy permet aux traces exportées à partir d'applications gRPC sans proxy et de proxys Envoy d'être totalement compatibles au sein d'un maillage de services. Pour assurer la compatibilité, l'amorçage Envoy doit configurer le contexte de trace pour inclure le format de trace GRPC_TRACE_BIN
dans sa configuration OpenCensusConfig
, comme suit :
tracing: http: name: envoy.tracers.opencensus typed_config: "@type": type.googleapis.com/envoy.config.trace.v2.OpenCensusConfig stackdriver_exporter_enabled: "true" stackdriver_project_id: "PROJECT_ID" incoming_trace_context: ["CLOUD_TRACE_CONTEXT", "GRPC_TRACE_BIN"] outgoing_trace_context: ["CLOUD_TRACE_CONTEXT", "GRPC_TRACE_BIN"]
Si la configuration est terminée, mais qu'aucune entrée de trace ou de journalisation n'est disponible, vérifiez les points suivants:
- Les comptes de service de la VM Compute Engine disposent des autorisations IAM Cloud Trace et Cloud Logging nécessaires, comme indiqué dans les conditions préalables. Pour en savoir plus sur les autorisations IAM Cloud Trace, consultez la page Contrôle des accès. Pour en savoir plus sur les autorisations Cloud Logging, consultez la page Contrôle des accès.
- Pour la journalisation : assurez-vous qu'il n'y a pas d'erreur dans
/var/log/google-fluentd/google-fluentd.log
. - Pour la journalisation : assurez-vous que les nouvelles entrées apparaissent dans le fichier journal d'accès local lors de l'envoi des requêtes.
Étape suivante
- Pour obtenir des informations associées, consultez la section Observabilité avec des applications gRPC sans proxy.
- Pour obtenir des informations de dépannage générales sur Cloud Service Mesh, consultez la page Résoudre les problèmes pour les déploiements qui utilisent Envoy.