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 Traffic Director, 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 Traffic Director. 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.
Application de démonstration pour la journalisation et la surveillance d'Envoy.
Application de démonstration de la journalisation et de la surveillance d'Envoy (cliquez pour agrandir)

Les étapes suivantes correspondent aux étiquettes numérotées du diagramme :

  1. Traffic Director 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.
  2. 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.

  3. Le proxy side-car génère également les informations de télémétrie nécessaires :

    1. Ajoute une entrée au journal d'accès sur le disque local avec des informations supplémentaires sur la requête.
    2. Génère une entrée de trace et l'envoie à Cloud Trace à l'aide du traçage OpenCensus Envoy.
  4. 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 :

  1. L'API Traffic Director est activée et les autres conditions préalables décrites dans la section Préparer la configuration de Traffic Director avec Envoy sont satisfaites.
  2. L'API Cloud Trace est activée.
  3. Les rôles IAM (Identity and Access Management) suivants sont configurés pour le compte de service utilisé par la VM Compute Engine :
  4. 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 Traffic Director

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.

  1. 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.

  2. Utilisez Traffic Director 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 au service géré Traffic Director, de la même manière que la configuration décrite dans la section Configurer Traffic Director pour les VM Compute Engine avec déploiement Envoy manuel.

  3. 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 Traffic Director. Cette configuration est semblable à celle décrite dans la section Configurer Traffic Director pour les VM Compute Engine avec déploiement Envoy manuel.

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 et TRAFFICDIRECTOR_ENABLE_TRACING permettent la journalisation et le traçage, comme décrit dans la section Configurer les attributs d'amorçage Envoy pour Traffic Director.
  • 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 de 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.

  1. 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
    
  2. 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é

  1. Installez l'analyseur de journaux d'accès Envoy à partir de GitHub :

    sudo /opt/google-fluentd/embedded/bin/gem install fluent-plugin-envoy-parser
    
  2. 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
    
  3. 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

  1. À 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.
  2. 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

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 :

  1. 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.
  2. Pour la journalisation : assurez-vous qu'il n'y a pas d'erreur dans /var/log/google-fluentd/google-fluentd.log.
  3. 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.

Étapes suivantes