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 Sidecar-Proxy-Architektur Cloud Service Mesh verwendet. Der Proxy ist die Komponente, die Anfragen verarbeitet. und liefert die notwendigen Telemetriedaten. 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, installiert und konfiguriert von Cloud Service Mesh. 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.
Die folgenden Schritte entsprechen den nummerierten Labels im Diagramm:
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
- Load-Balancing-Traffic für den Dienst
Nachdem der Nutzer eine Anfrage an
10.10.10.10
gesendet hat, leitet der Sidecar-Proxy die Anfrage an das richtige Ziel weiter.Der Sidecar-Proxy generiert auch die erforderlichen Telemetriedaten:
- Fügt dem Zugriffslog auf dem lokalen Laufwerk einen Eintrag mit zusätzlichen Informationen zur Anfrage hinzu.
- Generiert einen Trace-Eintrag und sendet ihn mithilfe von OpenCensus-Envoy-Tracing an Trace.
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:
- Die Traffic Director API ist aktiviert und andere Voraussetzungen werden erfüllt, wie unter Einrichtung mit VM und proxylosen Arbeitslasten vorbereiten beschrieben.
- Die Cloud Trace API ist aktiviert.
- Für das von der Compute Engine-VM verwendete Dienstkonto sind die folgenden IAM-Rollen (Identity and Access Management) konfiguriert:
- Rolle Cloud Trace-Agent
(
roles/cloudtrace.agent
) - Rolle „Logautor” (
roles/logging.logWriter
)
- Rolle Cloud Trace-Agent
(
- 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.
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.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.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
undTRAFFICDIRECTOR_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.
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
Starten Sie den Agent neu. Die Änderungen werden beim Start des Agents wirksam:
sudo service google-fluentd restart
Envoy-Logs als strukturierten Text exportieren
Envoy-Zugriffslog-Parser installieren von GitHub:
sudo /opt/google-fluentd/embedded/bin/gem install fluent-plugin-envoy-parser
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
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
- 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. - 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 finden Sie Informationen zur Fehlerbehebung Probleme mit der Beobachtbarkeit von Envoy.
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:
- 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.
- Für das Logging: Achten Sie darauf, dass in
/var/log/google-fluentd/google-fluentd.log
keine Fehler vorhanden sind. - Für das Logging: Achten Sie darauf, dass neue Einträge in der lokalen Zugriffslogdatei enthalten sind, wenn Anfragen ausgegeben werden.
Nächste Schritte
- Weitere Informationen finden Sie unter Beobachtbarkeit mit proxylosen gRPC-Anwendungen.
- Allgemeine Informationen zur Fehlerbehebung in Cloud Service Mesh finden Sie unter Fehlerbehebung bei Bereitstellungen, die Envoy verwenden.