Eingehenden Traffic mit Cloud Trace verfolgen

In diesem Dokument wird erläutert, wie Sie verteiltes Tracing für Application Load Balancer mit Cloud Trace konfigurieren. Sie erstellen eine Telemetrie-Richtlinie, die auf die Weiterleitungsregel Ihres Load Balancers abzielt, und rufen dann die resultierenden Traces in Cloud Trace auf.

In den Beispielen in diesem Dokument wird eine E-Commerce-Anwendung mit der folgenden Architektur verwendet:

  • Ein globaler externer Application Load Balancer, der Kundentraffic für einen Web-Storefront empfängt.
  • Ein regionaler interner Application Load Balancer, der Bezahlvorgangsanfragen vom Storefront an interne Warenkorb-, Inventar- und Zahlungsdienste weiterleitet.

Informationen zur Funktionsweise des verteilten Tracings, einschließlich Stichprobenmodi und Verarbeitung von Trace-Kontext-Headern, finden Sie unter Verteiltes Tracing – Übersicht.

Hinweis

  1. Aktivieren Sie die Cloud Trace API und die Network Services API in Ihrem Projekt:

    gcloud services enable \
        cloudtrace.googleapis.com \
        networkservices.googleapis.com
    
  2. Achten Sie darauf, dass ein unterstützter Load Balancer bereitgestellt ist. Hier finden Sie weitere Informationen:

  3. Notieren Sie sich den Namen und den Bereich der Weiterleitungsregel Ihres Load Balancers. Der Bereich der Weiterleitungsregel hängt vom Typ des Load Balancers ab:

    • Globale Weiterleitungsregel: Wird von globalen externen Application Load Balancern und regionenübergreifenden internen Application Load Balancern verwendet.
    • Regionale Weiterleitungsregel: Wird von regionalen externen Application Load Balancern und regionalen internen Application Load Balancern verwendet.

    Verwenden Sie den Befehl gcloud compute forwarding-rules list, um die Weiterleitungsregeln in Ihrem Projekt aufzulisten:

    gcloud compute forwarding-rules list
    

Erforderliche Rollen

Bitten Sie Ihren Administrator, Ihnen die folgenden IAM-Rollen (Identity and Access Management) für Ihr Projekt zuzuweisen, um die Berechtigungen zu erhalten, die Sie zum Konfigurieren von Telemetrie-Richtlinien und zum Aufrufen von Traces benötigen:

Damit der Load Balancer Trace-Spans in Cloud Trace schreiben kann, weisen Sie den folgenden Dienstkonten die Rolle Cloud Trace-Agent (roles/cloudtrace.agent) für Ihr Projekt zu:

  • Compute Engine-Dienst-Agent: service-PROJECT_NUMBER@compute-system.
  • Dienst-Agent für Netzwerksicherheit: service-PROJECT_NUMBER@gcp-sa-networksecurity.
  • Die Dienstkonten Ihrer Backend-Arbeitslasten, wenn Ihre Backends ihre eigenen Spans nach Cloud Trace exportieren. Ohne diese Rolle zeigt Cloud Trace nur den Load-Balancer-Span an und der Trace enthält keine Backend-Spans.

Ersetzen Sie PROJECT_NUMBER durch dieGoogle Cloud -Projektnummer.

Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff auf Projekte, Ordner und Organisationen verwalten.

Konfiguration der Telemetrie-Richtlinie

Sie definieren eine Telemetrie-Richtlinie in einer YAML-Datei im folgenden Format:

name: "projects/PROJECT_ID/locations/LOCATION/telemetryPolicies/POLICY_NAME"
displayName: "DISPLAY_NAME"
telemetryTarget:
  resources:
  - "FORWARDING_RULE_URI"
tracingConfiguration:
  samplingRate: SAMPLING_RATE
  parentBasedSampling:
    enabled: ENABLE_PARENT_BASED_SAMPLING
    samplingRate: PARENT_BASED_SAMPLING_RATE

In der folgenden Tabelle werden die Felder in einer Telemetrie-Richtlinie beschrieben:

Feld Beschreibung
name

Der Ressourcenname der Telemetrie-Richtlinie. Ersetzen Sie Folgendes:

  • PROJECT_ID: die ID Ihres Google Cloud -Projekts.
  • LOCATION: der Standort der Telemetrie-Richtlinie, der mit dem Bereich der Weiterleitungsregeln übereinstimmen muss, auf die die Richtlinie abzielt. Verwenden Sie für globale Weiterleitungsregeln global. Verwenden Sie für regionale Weiterleitungsregeln die Region der Weiterleitungsregel, z. B. us-central1.
  • POLICY_NAME: der Name der Telemetrie-Richtlinie. Der Name muss 4 bis 63 Zeichen lang sein, mit einem Kleinbuchstaben beginnen, nur Kleinbuchstaben, Ziffern und Bindestriche enthalten und mit einem Kleinbuchstaben oder einer Ziffer enden.
displayName Optional. Ein menschenlesbarer Name (DISPLAY_NAME) für die Telemetrie-Richtlinie.
telemetryTarget.resources

Eine Liste der vollständigen Ressourcennamen (FORWARDING_RULE_URI) der Weiterleitungsregeln, für die die Richtlinie gilt. Sie können bis zu 50 Ressourcen angeben. Verwenden Sie eines der folgenden Formate:

  • Globale Weiterleitungsregel: //compute.googleapis.com/projects/PROJECT_ID/global/forwardingRules/FORWARDING_RULE_NAME
  • Regionale Weiterleitungsregel: //compute.googleapis.com/projects/PROJECT_ID/regions/REGION/forwardingRules/FORWARDING_RULE_NAME
Ersetzen Sie Folgendes:
  • FORWARDING_RULE_NAME: der Name der Weiterleitungsregel
  • REGION: die Region der Weiterleitungsregel, z. B. us-central1
tracingConfiguration.samplingRate Der Anteil der zu verfolgenden Anfragen (SAMPLING_RATE), angegeben als Wert von 0.0 (0 %) bis 1.0 (100 %). Beispiel: 0.01 nimmt eine Stichprobe von 1 % der Anfragen. Der Standardwert ist 0.0.
tracingConfiguration.parentBasedSampling.enabled Optional. Ob der Load Balancer das Stichproben-Flag im eingehenden W3C-traceparent-Header (ENABLE_PARENT_BASED_SAMPLING) berücksichtigt, ist true oder false. Der Standardwert ist false. Wird nur auf internen Application Load Balancern unterstützt.
tracingConfiguration.parentBasedSampling.samplingRate Optional. Der Anteil der Upstream-Stichprobenanfragen, die verfolgt werden sollen (PARENT_BASED_SAMPLING_RATE), angegeben als Wert von 0.0 bis 1.0. Beispiel: 1.0 verfolgt alle Anfragen, die bereits von einem Upstream-Client oder -Dienst erfasst wurden.

Tracing für einen externen Load Balancer konfigurieren

In diesem Beispiel wird die probabilistische Stichprobenerhebung für die Weiterleitungsregel eines globalen externen Application Load Balancers für einen E-Commerce-Storefront konfiguriert. Bei einer Abtastrate von 0.01 wird 1 % der Anfragen erfasst. So werden Edge-Latenz und Fehler erfasst, während die Cloud Trace-Aufnahmekosten bei hohem Traffic vorhersehbar bleiben.

  1. Erstellen Sie eine YAML-Datei mit dem Namen storefront-tracing-policy.yaml:

    cat <<EOF > storefront-tracing-policy.yaml
    name: "projects/PROJECT_ID/locations/global/telemetryPolicies/storefront-tracing-policy"
    displayName: "Tracing policy for the storefront load balancer"
    telemetryTarget:
      resources:
        - "//compute.googleapis.com/projects/PROJECT_ID/global/forwardingRules/FORWARDING_RULE_NAME"
    tracingConfiguration:
      samplingRate: 0.01
    EOF
    

    Ersetzen Sie Folgendes:

    • PROJECT_ID: die ID IhresGoogle Cloud -Projekts
    • FORWARDING_RULE_NAME: der Name der globalen Weiterleitungsregel Ihres Load Balancers

    Ersetzen Sie bei einem regionalen externen Application Load Balancer global im Richtliniennamen durch die Region der Weiterleitungsregel und verwenden Sie das Format für regionale Weiterleitungsregeln.

  2. Importieren Sie die Telemetrie-Richtlinie mit dem Befehl gcloud beta network-services telemetry-policies import:

    gcloud beta network-services telemetry-policies import storefront-tracing-policy \
        --source=storefront-tracing-policy.yaml \
        --location=global
    

Tracing für einen internen Load Balancer konfigurieren

In diesem Beispiel wird ein regionaler interner Application Load Balancer für interne Bezahl- und Zahlungsdienste konfiguriert. Die Richtlinie verwendet die folgenden Stichprobeneinstellungen:

  • Eine Baseline-samplingRate von 0.01 (1 %) für Anfragen, die keine Upstream-Stichprobenentscheidung enthalten.
  • Übergeordnetes Sampling mit einem samplingRate von 1.0 (100 %), sodass jede Checkout-Anfrage, die bereits im Storefront oder von einem Upstream-Dienst erfasst wurde, über den internen Load Balancer verfolgt wird.

So konfigurieren Sie die Richtlinie:

  1. Erstellen Sie eine YAML-Datei mit dem Namen checkout-tracing-policy.yaml:

    cat <<EOF > checkout-tracing-policy.yaml
    name: "projects/PROJECT_ID/locations/REGION/telemetryPolicies/checkout-tracing-policy"
    displayName: "Tracing policy for the internal checkout load balancer"
    telemetryTarget:
      resources:
        - "//compute.googleapis.com/projects/PROJECT_ID/regions/REGION/forwardingRules/FORWARDING_RULE_NAME"
    tracingConfiguration:
      samplingRate: 0.01
      parentBasedSampling:
        enabled: true
        samplingRate: 1.0
    EOF
    

    Ersetzen Sie Folgendes:

    • PROJECT_ID: die ID IhresGoogle Cloud -Projekts
    • REGION: die Region der Weiterleitungsregel, z. B. us-central1
    • FORWARDING_RULE_NAME: der Name der regionalen Weiterleitungsregel Ihres Load Balancers

    Verwenden Sie für einen regionenübergreifenden internen Application Load Balancer global als Standort im Richtliniennamen und das Format für globale Weiterleitungsregeln.

  2. Importieren Sie die Telemetrie-Richtlinie:

    gcloud beta network-services telemetry-policies import checkout-tracing-policy \
        --source=checkout-tracing-policy.yaml \
        --location=REGION
    

Telemetrie-Richtlinie prüfen

Mit dem Befehl gcloud beta network-services telemetry-policies describe können Sie prüfen, ob die Telemetrie-Richtlinie vorhanden ist und auf die richtigen Weiterleitungsregeln abzielt:

gcloud beta network-services telemetry-policies describe POLICY_NAME \
    --location=LOCATION

Ersetzen Sie Folgendes:

  • POLICY_NAME: der Name der Telemetrie-Richtlinie
  • LOCATION: global oder die Region der Telemetrie-Richtlinie

Verwenden Sie den gcloud beta network-services telemetry-policies list-Befehl, um alle Telemetrie-Richtlinien an einem Standort aufzulisten:

gcloud beta network-services telemetry-policies list \
    --location=LOCATION

Telemetrie-Richtlinie aktualisieren

So ändern Sie die Stichprobeneinstellungen oder wenden dieselbe Richtlinie auf zusätzliche Weiterleitungsregeln an:

  1. Bearbeiten Sie die YAML-Richtliniendatei. Wenn Sie beispielsweise die Storefront-Richtlinie auf mehrere globale Weiterleitungsregeln anwenden möchten, fügen Sie jede Weiterleitungsregel der Liste telemetryTarget.resources hinzu:

    telemetryTarget:
      resources:
        - "//compute.googleapis.com/projects/PROJECT_ID/global/forwardingRules/storefront-https-fr"
        - "//compute.googleapis.com/projects/PROJECT_ID/global/forwardingRules/cart-https-fr"
    
  2. Importieren Sie die aktualisierte Richtlinie:

    gcloud beta network-services telemetry-policies import POLICY_NAME \
        --source=POLICY_FILE \
        --location=LOCATION
    

    Ersetzen Sie POLICY_FILE durch den Pfad zur YAML-Datei Ihrer Richtlinie.

Traces ansehen

Nachdem Sie das Tracing konfiguriert und Traffic über Ihren Load Balancer gesendet haben, können Sie die Traces in der Google Cloud Console aufrufen:

  1. Rufen Sie in der Google Cloud Console die Seite Trace Explorer auf.

    Trace Explorer aufrufen

  2. Wählen Sie Ihr Google Cloud Projekt aus.

  3. Geben Sie im Feld Filter einen Filter ein, um die Traces zu finden, die Sie prüfen möchten. Beispiel: Attribut-ID oder Latenzschwellenwert.

  4. Optional: Wenn Sie einen bestimmten Trace untersuchen möchten, klicken Sie in der Symbolleiste auf Trace-ID und geben Sie die Trace-ID ein.

  5. Klicken Sie auf einen Trace, um die zugehörigen Spans in der Zeitachsen- und Diagrammansicht aufzurufen.

  6. Prüfen Sie den Load-Balancer-Span, um Details wie die Gesamtdauer und das Backend zu sehen, das die Anfrage verarbeitet hat.

Weitere Informationen zur Verwendung von Trace Explorer finden Sie unter Traces suchen und untersuchen.

Traces mit Logs und Messwerten korrelieren

Sie können Trace-Spans des Load Balancers mit Anfragelogs und Messwerten korrelieren, um die Ursache von Latenz oder Fehlern zu isolieren.

Traces mit Logs korrelieren

Wenn Sie das Logging für Ihren Backend-Dienst aktivieren, fügt der Load Balancer jedem Anfrage-Logeintrag für eine Stichprobenanfrage ein trace-Feld hinzu. Das Feld hat das folgende Format:

projects/PROJECT_ID/traces/TRACE_ID

Trace aus einem Load-Balancer-Logeintrag ansehen

  1. Rufen Sie in der Google Cloud Console die Seite Log-Explorer auf.

    Zum Log-Explorer

  2. Maximieren Sie einen Logeintrag für den Load Balancer.

  3. Klicken Sie in der Zusammenfassung des Logeintrags auf das Trace-Symbol.

    Das Trace-Symbol neben einer Zusammenfassung des Logeintrags im Log-Explorer.

  4. Wählen Sie Trace-Details ansehen aus.

Der Trace wird auf der Seite Trace Explorer geöffnet.

Load-Balancer-Logs aus einem Trace ansehen

  1. Rufen Sie in der Google Cloud Console die Seite Trace Explorer auf.

    Trace Explorer aufrufen

  2. Klicken Sie auf einen Trace, um den Bereich Details zu öffnen.

  3. Klicken Sie auf Logs ansehen.

Die Load-Balancer-Logeinträge für die Anfrage werden angezeigt.

Traces mit Messwerten korrelieren

Vergleichen Sie Latenzspitzen in Load-Balancer-Messwerten mit Trace-Span-Aufschlüsselungen, um festzustellen, ob die Latenz im Load Balancer oder im Backend entsteht. Sie können diese Messwerte im Metrics Explorer in Cloud Monitoring ansehen und abfragen. Verwenden Sie die folgenden Messwerte:

  • Globaler externer Application Load Balancer: loadbalancing.googleapis.com/https/total_latencies und loadbalancing.googleapis.com/https/backend_latencies
  • Regionaler externer Application Load Balancer: loadbalancing.googleapis.com/https/external/regional/total_latencies
  • Interner Application Load Balancer: loadbalancing.googleapis.com/https/internal/total_latencies

Tracing deaktivieren

So beenden Sie das Tracing von Anfragen für einen Load Balancer:

  • Entfernen Sie die Weiterleitungsregel aus der Liste telemetryTarget.resources der Richtlinie und importieren Sie dann die aktualisierte Richtlinie.
  • Löschen Sie die Telemetrie-Richtlinie mit dem Befehl gcloud beta network-services telemetry-policies delete:

    gcloud beta network-services telemetry-policies delete POLICY_NAME \
        --location=LOCATION
    

Best Practices

Beachten Sie beim Konfigurieren des verteilten Tracings die folgenden Best Practices:

  • Abtastraten für Ihr Trafficvolumen festlegen: Verwenden Sie für Produktionsarbeitslasten mit hohem Traffic einen samplingRate-Wert von 0.01 (1 %) oder 0.001 (0,1 %), um die Beobachtbarkeit mit den Kosten für die Cloud Trace-Aufnahme in Einklang zu bringen.
  • Übergeordnete Stichprobenerhebung für mehrstufige Architekturen verwenden: Aktivieren Sie auf internen Application Load Balancern die übergeordnete Stichprobenerhebung, damit Upstream-Stichprobenanfragen über jeden internen Hop hinweg verfolgt werden.
  • Backends instrumentieren: Verwenden Sie ein OpenTelemetry SDK mit dem W3C Trace Context-Propagator in Ihren Backend-Diensten, damit Backend-Spans dem Trace beitreten, den der Load Balancer startet.

Fehlerbehebung

In diesem Abschnitt werden häufige Probleme und ihre Lösungen beschrieben.

Traces werden nicht in Cloud Trace angezeigt

Wenn Traces nicht in Cloud Trace angezeigt werden, gehen Sie so vor:

  1. Prüfen Sie, ob die Cloud Trace API in Ihrem Projekt aktiviert ist:

    gcloud services enable cloudtrace.googleapis.com \
        --project=PROJECT_ID
    
  2. Prüfen Sie, ob die Rolle „Cloud Trace-Agent“ (roles/cloudtrace.agent) den unter Erforderliche Rollen aufgeführten Dienstkonten zugewiesen ist.

  3. Prüfen Sie, ob die Telemetrie-Richtlinie am richtigen Speicherort vorhanden ist und auf die richtige Weiterleitungsregel verweist. Weitere Informationen finden Sie unter Telemetrie-Richtlinie prüfen.

  4. Prüfen Sie die konfigurierte samplingRate. Wenn das Trafficvolumen oder die Abtastrate niedrig ist, erfasst der Load Balancer Traces möglicherweise nicht sofort. Wenn Sie prüfen möchten, ob das Tracing funktioniert, setzen Sie samplingRate vorübergehend auf 1.0 und stellen Sie nach Abschluss des Tests die Produktionsrate wieder her.

Trace-Spans sind getrennt oder unvollständig

Wenn Load-Balancer-Spans als separate Root-Traces und nicht als Teil der Traces Ihrer Anwendung angezeigt werden, gehen Sie so vor:

  1. Prüfen Sie bei internen Application Load Balancern, ob die übergeordnete Stichprobenerhebung (parentBasedSampling.enabled: true) in der Telemetrie-Richtlinie aktiviert ist.

  2. Prüfen Sie, ob die Dienstkonten Ihrer Client- und Backend-Arbeitslasten die Rolle „Cloud Trace-Agent“ (roles/cloudtrace.agent) haben, damit ihre Spans nach Cloud Trace exportiert werden können.

  3. Prüfen Sie, ob Ihre Anwendungen ein OpenTelemetry SDK mit aktivierter W3C Trace Context-Weitergabe verwenden, damit der Header traceparent über Dienstgrenzen hinweg weitergegeben wird. Weitere Informationen finden Sie in der OpenTelemetry-Dokumentation zur Kontextweitergabe.

Nächste Schritte