Cloud Trace und Cloud Service Mesh

Cloud Trace ist ein verteiltes Tracing-System, das Latenzdaten von den Anwendungen erfasst und nahezu in Echtzeit anzeigt. Sie können damit eine Beispielanfrage über Ihr verteiltes System verfolgen, Netzwerkaufrufe beobachten und ein Profil für ein End-to-End-System erstellen.

Cloud Trace ist für Cloud Service Mesh-Installationen auf der folgenden Plattformen:

  • GKE in Google Cloud
  • Lokale GKE Enterprise-Cluster, wenn Sie mit Cloud Service Mesh-Zertifizierungsstelle

Beachten Sie, dass Cloud Trace standardmäßig deaktiviert ist. Nach der Aktivierung Die Cloud Service Mesh-Seiten in der Google Cloud Console enthalten einen Link zum auf der Cloud Trace-Seite . Ausführliche Preisinformationen finden Sie auf der Seite „Cloud Trace – Preise“.

Cloud Trace aktivieren

In diesem Abschnitt erfahren Sie, wie Sie Cloud Trace aktivieren.

Verwaltet (TD)

In diesem Abschnitt erfahren Sie, wie Sie Cloud Trace in Cloud Service Mesh aktivieren mit einer verwalteten Cloud Service Mesh-Steuerungsebene.

  1. Führen Sie den folgenden Befehl aus, um Cloud Trace zu aktivieren:

    cat <<EOF | kubectl apply -n istio-system -f -
    apiVersion: telemetry.istio.io/v1alpha1
    kind: Telemetry
    metadata:
       name: enable-cloud-trace
       namespace: istio-system
    spec:
       tracing:
       - providers:
         - name: stackdriver
    EOF
    

Verwaltet (Istiod)

In diesem Abschnitt erfahren Sie, wie Sie Cloud Trace in Cloud Service Mesh aktivieren mit der verwalteten Istio-Steuerungsebene.

  1. Führen Sie dazu diesen Befehl aus:

    cat <<EOF | kubectl apply -f -
    apiVersion: v1
    data:
       mesh: |-
          defaultConfig:
            tracing:
              stackdriver: {}
    kind: ConfigMap
    metadata:
       name: istio-release-channel
       namespace: istio-system
    EOF
    

    Dabei ist release-channel Ihre Release-Version (asm-managed, asm-managed-stable oder asm-managed-rapid).

  2. Führen Sie den folgenden Befehl aus, um die ConfigMap aufzurufen:

    kubectl get configmap istio-release-channel -n istio-system -o yaml
    
  3. Prüfen Sie, ob folgende Zeilen im Abschnitt mesh: angezeigt werden, um sicher zu sein, dass Cloud Trace aktiviert ist.

    ...
    apiVersion: v1
    data:
       mesh: |
       ....
       defaultConfig:
          tracing:
             stackdriver:{}
    ...
    
  4. Starten Sie die Proxys neu.

    Beachten Sie, dass die Tracer-Konfiguration Teil der Proxy-Bootstrap-Konfiguration ist. Deshalb muss jeder einzelne Pod neu gestartet und wieder eingefügt werden, um die Tracer-Aktualisierung zu übernehmen. Sie können beispielsweise den folgenden Befehl verwenden, um Pods, die zu einem Deployment gehören:

    kubectl rollout restart deployment -n NAMESPACE DEPLOYMENT_NAME

Clusterintern

In diesem Abschnitt wird beschrieben, wie Sie Cloud Trace in Cloud Service Mesh mit einer clusterinternen Steuerungsebene aktivieren.

Zum Aktivieren von Cloud Trace stellen Sie die vom Kunden verwaltete Steuerungsebene mithilfe der folgenden Overlay-Datei noch einmal bereit. Weitere Informationen über Overlay-Dateien finden Sie unter Informationen zu Overlay-Dateien

.

Standard

Führen Sie den folgenden Befehl aus, um Cloud Trace zu aktivieren:

 ./asmcli install \
    OTHER_FLAGS \
    --option cloud-trace

Dieser Befehl wendet die folgende Overlay-Datei an, um das Tracing mit Standardoptionen. Die Standardabtastrate beträgt 1 %. Wenn Sie die Standardeinstellung überschreiben, müssen Sie stattdessen --custom-overlay verwenden.

 apiVersion: install.istio.io/v1alpha1
 kind: IstioOperator
 spec:
   meshConfig:
     enableTracing: true
   values:
     global:
       proxy:
         tracer: stackdriver

Eine Liste der Optionen finden Sie in der anthos-service-mesh-Paket.

Benutzerdefiniert

Sie können den Standardwert überschreiben, indem Sie einen tracing.sampling-Wert angeben. Die Wert muss zwischen 0,0 und 100,0 mit einer Genauigkeit von 0,01 liegen. Wenn Sie beispielsweise fünf Anfragen pro 10.000 Anfragen verfolgen möchten, verwenden Sie 0,05.

Das folgende Beispiel zeigt eine Stichprobenrate von 100% (was Sie nur zu Demozwecken oder zur Fehlerbehebung).

 apiVersion: install.istio.io/v1alpha1
 kind: IstioOperator
 spec:
   meshConfig:
     enableTracing: true
     defaultConfig:
        tracing:
        sampling: 100
   values:
     global:
       proxy:
         tracer: stackdriver

Führen Sie den folgenden Befehl aus, um Cloud Trace zu aktivieren:

 ./asmcli install \
    OTHER_FLAGS \
    --custom_overlay PATH_TO_FILE

Beachten Sie, dass die Tracer-Konfiguration Teil der Proxy-Bootstrap-Konfiguration ist. Daher müssen Pods neu gestartet und wieder eingefügt werden, um die Tracer-Aktualisierung zu übernehmen. Verwenden Sie den folgenden Befehl, um Pods neu zu starten, die zu einer Bereitstellung gehören:

kubectl rollout restart deployment -n NAMESPACE DEPLOYMENT_NAME

Weitergabe von Trace-Kontext

Auch wenn die Sidecar-Proxys automatisch Trace-Spans senden können, benötigen sie einige Hinweise, um den gesamten Trace zu verknüpfen. Anwendungen müssen die entsprechenden HTTP-Header weiterleiten, sodass die Spans einem einzigen Trace korrekt zugeordnet werden können, wenn die Proxys die Spaninformationen senden.

Dazu muss eine Anwendung die erforderlichen Header aus der eingehenden Anfrage erfassen und an alle ausgehenden Anfragen weiterleiten. Die Die Stackdriver-Tracing-Konfiguration von Cloud Service Mesh akzeptiert alle folgenden Header-Formaten hinzugefügt und alle der folgenden Formate werden weitergegeben:

  • B3 (x-b3-traceid, x-b3-spanid, x-b3parentspanid, x-b3-sampled, x-b3-flags)
  • W3C TraceContext (traceparent)
  • Google Cloud Trace (x-cloud-trace-context)
  • gRPC TraceBin (grpc-trace-bin)

Dies bedeutet, dass Ihre Anwendungen ein beliebiges dieser Formate nutzen können, um Tracing-Kontext zu übertragen; die Traces werden generiert und korrekt auf Stackdriver eingestellt.

Beispiel

Hier ist ein Beispiel für eine HTTP-Get-Anfrage mit einem traceparent-Header in der ursprünglichen Anfrage. Beachten Sie die zusätzlichen Trace-Kontextheader, die vom Proxy hinzugefügt wurden.

$ kubectl exec -it sleep-557747455f-n6flv -- curl "httpbin:8000/anything?freeform=" -H "accept: application/json" -H "Traceparent: 00-7543d15e09e5d61801d4f74cde1269b8-604ef051d35c5b3f-01" -vv
*   Trying 10.12.3.52:8000...
* Connected to httpbin (10.12.3.52) port 8000 (#0)
> GET /anything?freeform= HTTP/1.1
> Host: httpbin:8000
> User-Agent: curl/7.80.0-DEV
> accept: application/json
> Traceparent: 00-7543d15e09e5d61801d4f74cde1269b8-604ef051d35c5b3f-01
>
* Mark bundle as not supporting multiuse
< HTTP/1.1 200 OK
< server: envoy
< date: Wed, 10 Nov 2021 20:36:04 GMT
< content-type: application/json
< content-length: 1032
< access-control-allow-origin: *
< access-control-allow-credentials: true
< x-envoy-upstream-service-time: 5
<
{
  "args": {
    "freeform": ""
  },
  "data": "",
  "files": {},
  "form": {},
  "headers": {
    "Accept": "application/json",
    "Grpc-Trace-Bin": "AAB1Q9FeCeXWGAHU90zeEmm4AaDHmGRtdM7wAgE",
    "Host": "httpbin:8000",
    "Traceparent": "00-7543d15e09e5d61801d4f74cde1269b8-a0c798646d74cef0-01",
    "User-Agent": "curl/7.80.0-DEV",
    "X-B3-Sampled": "1",
    "X-B3-Spanid": "a0c798646d74cef0",
    "X-B3-Traceid": "7543d15e09e5d61801d4f74cde1269b8",
    "X-Cloud-Trace-Context": "7543d15e09e5d61801d4f74cde1269b8/11585396123534413552;o=1",
    "X-Envoy-Attempt-Count": "1",
    "X-Forwarded-Client-Cert": "<REDACTED>"
  },
  "json": null,
  "method": "GET",
  "origin": "127.0.0.6",
  "url": "http://httpbin:8000/anything?freeform="
}

Beachten Sie, dass in den zurückgegebenen Anfrageheadern der vollständige Satz von Trace Kontextüberschriften vorhanden sind.

Weitere Beispiele für die Weitergabe der Header finden Sie unter Weitergabe von Trace-Kontext.

Trace von einem Client mit benutzerdefinierter ID erstellen

Verwenden Sie zum Erstellen eines Trace von einem Client mit einer benutzerdefinierten ID den Befehl curl, um eine Anfrage mit einem externen Client zu erstellen und die Anzeige eines Trace zu erzwingen. Beispiel:

curl $URL --header "x-client-trace-id: 105445aa7843bc8bf206b12000100000"

Weitere Informationen zu x-client-trace-id finden Sie in der Envoy-Dokumentation.

Zugriffs-Traces

Trace-Beispiele für einen Dienst ansehen

So rufen Sie eine Stichprobe von Traces für einen Dienst in Ihrer App auf:

  1. Rufen Sie in der Google Cloud Console die Seite Cloud Service Mesh auf.

    Zur Seite „Cloud Service Mesh“

  2. Wählen Sie unter Dienste den Namen des Dienstes aus, den Sie prüfen möchten.

    Der folgende Screenshot zeigt ein Beispiel für einen frontend-Dienst.

    Cloud Service Mesh-Trace-Diagramm

  3. Klicken Sie unter Traces anfordern auf einen Trace, um weitere Informationen zu erhalten.

    Der folgende Screenshot zeigt ein Beispiel für das Teilfeld der Trace-Anfrage.

    Cloud Service Mesh-Unterbereich für Traces

Alle Traces ansehen

So rufen Sie alle Traces für einen Dienst auf:

  1. Rufen Sie in der Google Cloud Console die Seite Cloud Service Mesh auf.

    Zur Seite „Cloud Service Mesh“

  2. Wählen Sie unter Dienste den Namen des Dienstes aus, den Sie prüfen möchten.

  3. Rufen Sie die Seite Messwerte auf.

  4. Geben Sie im Drop-down Zeitspanne einen Zeitraum an oder legen Sie eine benutzerdefinierte Zeitspanne mit der Zeitachse fest.

  5. Klicken Sie auf Traces anzeigen.

Die Traces für einen Dienst in Cloud Service Mesh enthalten die folgenden Informationen:

  • Anfragelatenzen für verschiedene Dienste im Mesh-Netzwerk
  • HTTP-Anfrageattribute, einschließlich ID, URL, Größe, Latenz und Protokoll
  • Dienstname, Namespace und Mesh-ID als Teil der Labels istio.canonical_service, istio.namespace bzw. istio.mesh_id.

Nächste Schritte