Beobachtbarkeit mit Envoy

In diesem Dokument wird beschrieben, wie Sie Tracing und Logging für den Envoy-Proxy generieren. Außerdem erfahren Sie, wie Sie die Informationen nach Cloud Trace und Cloud Logging exportieren.

Mit einem Service Mesh können Sie den Traffic zu und von Diensten beobachten und somit das Monitoring und Debugging verbessern, ohne Codeänderungen im Dienst selbst vornehmen zu müssen. In der von Cloud Service Mesh verwendeten Sidecar-Proxy-Architektur ist der Proxy die Komponente, die Anfragen verarbeitet und die erforderlichen Telemetriedaten bereitstellt. Telemetriedaten müssen zur weiteren Verwendung an einem zentralen Ort erfasst und gespeichert werden, z. B. für Datenanalysen, Benachrichtigungen und Fehlerbehebung.

Einrichtung der Demonstration

In diesem Dokument wird die folgende Konfiguration verwendet, um Tracing und Logging zu demonstrieren:

  • Eine einzelne Anwendung, die den HTTP-Port überwacht und den Hostnamen der VM-Instanz zurückgibt, die die Anfrage verarbeitet hat. Im Diagramm befindet sich diese Anwendung oben rechts mit der Beschriftung HTTP-Dienst(e) (10.10.10.10:80). Eine oder mehrere VMs können diesen Dienst bereitstellen.
  • Eine einzelne Compute Engine-VM, auf der ein Nutzer dieses Dienstes ausgeführt wird. Im Diagramm ist dies mit Demo Compute Engine VM gekennzeichnet.
  • Ein Envoy-Sidecar-Proxy, der von Cloud Service Mesh installiert und konfiguriert wird. Im Diagramm ist dies mit Envoy gekennzeichnet.
  • Eine Dienstnutzeranwendung, die im Feld links angezeigt wird, ist der Nutzer des HTTP-Dienstes, der auf 10.10.10.10:80 ausgeführt wird.
Demoanwendung für das Logging und Monitoring für Envoy.
Demoanwendung für Stackdriver Logging und Monitoring für Envoy (zum Vergrößern klicken)

Die folgenden Schritte entsprechen den nummerierten Labels im Diagramm:

  1. Cloud Service Mesh konfiguriert den Envoy-Proxy für Folgendes:

    • Load-Balancing-Traffic für den Dienst 10.10.10.10:80.
    • Speicherzugriffsloginformationen für jede Anfrage, die für diesen Dienst ausgegeben wird.
    • Tracinginformationen für den Dienst generieren
  2. Nachdem der Nutzer eine Anfrage an 10.10.10.10 gesendet hat, leitet der Sidecar-Proxy die Anfrage an das richtige Ziel weiter.

  3. Der Sidecar-Proxy generiert auch die erforderlichen Telemetriedaten:

    1. Fügt dem Zugriffslog auf dem lokalen Laufwerk einen Eintrag mit zusätzlichen Informationen zur Anfrage hinzu.
    2. Generiert einen Trace-Eintrag und sendet ihn mithilfe von OpenCensus-Envoy-Tracing an Trace.
  4. Der Logging-Agent exportiert diese Daten in die Cloud Logging API, damit sie in der Cloud Logging-Oberfläche verfügbar sind.

Vorbereitung

Bevor Sie die Einrichtung abschließen, müssen Sie Folgendes tun:

  1. Die Traffic Director API ist aktiviert und andere Voraussetzungen werden erfüllt, wie unter Einrichtung mit VM und proxylosen Arbeitslasten vorbereiten beschrieben.
  2. Die Cloud Trace API ist aktiviert.
  3. Für das von der Compute Engine-VM verwendete Dienstkonto sind die folgenden IAM-Rollen (Identity and Access Management) konfiguriert:
  4. Die Firewallregeln lassen Traffic zu der VM zu, die Sie im Rahmen dieser Einrichtung konfigurieren.

Demodienst und Cloud Service Mesh einrichten

In diesem Dokument werden mehrere Shell-Skripts verwendet, um die Schritte zur Konfiguration des Demodienstes auszuführen. Sehen Sie sich die Skripts an, um die einzelnen Schritte zu verstehen.

  1. Starten Sie eine Compute Engine-VM und konfigurieren Sie den HTTP-Dienst auf der 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
    

    Das Skript setup_demo_service.sh erstellt eine VM-Vorlage, die apache2 beim Starten einer VM startet, und eine verwaltete Instanzgruppe, die diese Vorlage verwendet. Das Skript startet eine einzelne Instanz ohne aktiviertes Autoscaling.

  2. Verwenden Sie Cloud Service Mesh, um das Routing für den Dienst 10.10.10.10 zu konfigurieren:

    curl -sSO https://storage.googleapis.com/traffic-director/demo/observability/setup_demo_trafficdirector.sh
    chmod 755 setup_demo_trafficdirector.sh && ./setup_demo_trafficdirector.sh
    

    Das Skript setup_demo_trafficdirector.sh konfiguriert die erforderlichen Parameter für den verwalteten Cloud Service Mesh-Dienst.

  3. Starten Sie eine Compute Engine-VM, die einen Nutzer des HTTP-Dienstes ausführt, wobei der Sidecar-Proxy auf der VM installiert und konfiguriert ist. Ersetzen Sie im folgenden Befehl PROJECT_ID durch die Projekt-ID, an die Trace-Informationen gesendet werden sollen. Dies ist in der Regel dasselbe Google Cloud-Projekt, zu dem Ihre VM gehört.

    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
    

    Das Skript setup_demo_client.sh erstellt eine Compute Engine-VM mit einem Envoy-Proxy, der für die Verwendung von Cloud Service Mesh vorkonfiguriert ist.

Die folgenden zusätzlichen Konfigurationseinstellungen ermöglichen das Tracing und Logging:

  • Die Bootstrap-Knotenmetadatenvariablen TRAFFICDIRECTOR_ACCESS_LOG_PATH und TRAFFICDIRECTOR_ENABLE_TRACING aktivieren Logging und Tracing, wie unter Envoy-Bootstrap-Attribute für Cloud Service Mesh konfigurieren beschrieben.
  • Die statische Bootstrap-Konfiguration ermöglicht den Export von Trace-Informationen nach Trace mithilfe von OpenCensus.

Nachdem Sie diese Skripts ausgeführt haben, können Sie sich in der VM td-observability-demo-client anmelden und auf den HTTP-Dienst unter 10.10.10.10 zugreifen:

curl http://10.10.10.10

An dieser Stelle generiert Envoy das Zugriffslog und die Tracinginformationen. Im folgenden Abschnitt wird beschrieben, wie Sie Logs und Tracinginformationen exportieren.

Tracer-Export nach Cloud Trace einrichten

Die Envoy-Bootstrap-Konfiguration, die Sie beim Ausführen des Skripts setup-demo-client.sh erstellt haben, reicht aus, um Tracinginformationen zu generieren. Alle anderen Konfigurationen sind optional. Wenn Sie zusätzliche Parameter konfigurieren möchten, rufen Sie die OpenCensus Envoy-Konfigurationsseite auf und ändern Sie die Tracingoptionen in der Envoy-Bootstrap-Konfiguration.

Nachdem Sie eine Beispielanfrage an den Demoserver (curl 10.10.10.10) gesendet haben, rufen Sie in der Google Cloud Console die Trace-Oberfläche auf (Trace > Trace-Liste). Sie sehen einen Trace-Eintrag, der der von Ihnen ausgegebenen Anfrage entspricht.

Weitere Informationen zur Verwendung von Trace finden Sie in der Cloud Trace-Dokumentation.

Zugriffslogexport für Logging einrichten

In dieser Phase sollte Envoy die Zugriffsloginformationen auf dem lokalen Laufwerk der VM aufzeichnen, auf der es ausgeführt wird. Sie müssen zum Exportieren dieser Datensätze nach Logging den Logging-Agent lokal installieren. Dazu müssen Sie den Logging-Agent installieren und konfigurieren.

Installieren Sie den Logging-Agent.

Installieren Sie den Logging-Agent auf der VM, von der Logging-Informationen exportiert werden. In dieser Beispielkonfiguration ist die VM 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

Weitere Informationen finden Sie unter Cloud Logging-Agents auf einer einzelnen VM installieren.

Logging-Agent konfigurieren

Sie können die Envoy-Logs entweder als unstrukturierten oder als strukturierten Text exportieren.

Envoy-Logs als unstrukturierten Text exportieren

Mit dieser Option werden Logeinträge aus dem Zugriffslog als Rohtext nach Cloud Logging exportiert. Jeder Eintrag im Zugriffslog wird als einzelner Eintrag nach Logging exportiert. Diese Konfiguration ist einfacher zu installieren, da sie auf einem Parser basiert, der mit der aktuellen Version des Logging-Agents bereitgestellt wird. Bei Verwendung dieser Option ist es jedoch schwieriger, Rohtextlogeinträge zu filtern und zu verarbeiten.

  1. Laden Sie die unstrukturierte Exportkonfigurationsdatei für das Envoy-Zugriffslog herunter und installieren Sie sie.

    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. Starten Sie den Agent neu. Die Änderungen werden beim Start des Agents wirksam:

    sudo service google-fluentd restart
    

Envoy-Logs als strukturierten Text exportieren

  1. Installieren Sie den Envoy-Zugriffslog-Parser von GitHub:

    sudo /opt/google-fluentd/embedded/bin/gem install fluent-plugin-envoy-parser
    
  2. Laden Sie die Konfigurationsdatei für den Export von Envoy-Zugriffslogs in einem strukturierten Format herunter und installieren Sie sie:

    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. Starten Sie den Agent neu. Die Änderungen werden beim Start des Agents wirksam:

    sudo service google-fluentd restart
    

Weitere Informationen finden Sie unter Logging-Agent konfigurieren.

Konfiguration prüfen

  1. Generieren Sie von der Sidecar-Proxy-VM eine Anfrage an den Demodienst. Dadurch wird ein neuer lokaler Log-Datensatz erstellt. Sie können beispielsweise curl 10.10.10.10 ausführen.
  2. Wechseln Sie in der Google Cloud Console zu Logging > Log-Explorer. Wählen Sie im Drop-down-Menü den Logtyp envoy-access aus. Sie sehen einen Logeintrag für die letzte Anfrage im unstrukturierten oder strukturierten Format, je nachdem, welchen Konfigurationstyp Sie zuvor ausgewählt haben.

Fehlerbehebung

In den folgenden Abschnitten erfahren Sie, wie Sie verschiedene Probleme mit der Beobachtbarkeit mit Envoy beheben.

Tracing für mehrere Projekte konfigurieren

Wenn Sie Anfragen auf Envoy-Proxys verfolgen möchten, die in mehreren Projekten bereitgestellt werden, beachten Sie Folgendes:

  • Jeder Envoy-Proxy muss mit den Anmeldedaten des Projekts konfiguriert werden, in dem er ausgeführt wird.
  • Jeder Envoy sendet Trace-Daten an das Projekt, das den Anmeldedaten entspricht, mit denen er ausgeführt wird.
  • Sie können Tracing-Spans für projektübergreifende Anfragen sehen, wenn Ihre Anwendungen den Wert des HTTP-Headers X-Cloud-Trace-Context beibehalten, wenn Anfragen gestellt werden.

Trace-Kompatibilität mit proxylosen gRPC-Anwendungen

Durch die OpenCensus-Tracer-Konfiguration von Envoy können Traces aus proxylosen gRPC-Anwendungen exportiert werden und Envoy-Proxys können vollständig kompatibel mit einem Service Mesh sein. Zur Kompatibilität muss der Envoy-Bootstrap den Trace-Kontext so konfigurieren, dass er das Trace-Format GRPC_TRACE_BIN in seiner OpenCensusConfig enthält, und zwar so:

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"]

Wenn die Konfiguration abgeschlossen ist, aber keine Trace- oder Logging-Einträge verfügbar sind, prüfen Sie Folgendes:

  1. Die Dienstkonten für die Compute Engine-VM haben die erforderlichen Trace- und Logging-IAM-Berechtigungen, wie in den Voraussetzungen angegeben. Informationen zu Trace-IAM-Berechtigungen finden Sie unter Zugriffssteuerung. Informationen zu Logging-Berechtigungen finden Sie unter Zugriffssteuerung.
  2. Für das Logging: Achten Sie darauf, dass in /var/log/google-fluentd/google-fluentd.log keine Fehler vorhanden sind.
  3. Für das Logging: Achten Sie darauf, dass neue Einträge in der lokalen Zugriffslogdatei enthalten sind, wenn Anfragen ausgegeben werden.

Nächste Schritte