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 den folgenden Plattformen verfügbar:
- GKE in Google Cloud
- Lokale GKE Enterprise-Cluster, wenn Sie mit der Anthos Service Mesh-Zertifizierungsstelle (Mesh CA) installiert haben
Beachten Sie, dass Cloud Trace standardmäßig deaktiviert ist. Nach der Aktivierung enthalten die Cloud Service Mesh-Seiten in der Google Cloud Console einen Link zu den Traces auf der Cloud Trace-Seite . Ausführliche Preisinformationen finden Sie auf der Preisseite für Cloud Trace.
Cloud Trace aktivieren
In diesem Abschnitt erfahren Sie, wie Sie Cloud Trace aktivieren.
Verwaltet (TD)
In diesem Abschnitt wird beschrieben, wie Sie Cloud Trace in Cloud Service Mesh mit einer verwalteten Traffic Director-Steuerungsebene aktivieren.
Aktivieren Sie Cloud Trace mit dem folgenden Befehl:
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 mit der verwalteten Istiod-Steuerungsebene aktivieren.
mesh:
aufnehmen, um Ihre Änderungen zu behalten.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
oderasm-managed-rapid
).Führen Sie den folgenden Befehl aus, um die ConfigMap aufzurufen:
kubectl get configmap istio-release-channel -n istio-system -o yaml
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:{} ...
Starten Sie die Proxys neu.
Beachten Sie, dass die Tracer-Konfiguration Teil der Proxy-Bootstrap-Konfiguration ist. Daher muss jeder Pod neu gestartet und wieder eingefügt werden, um die Tracer-Aktualisierung aufzunehmen. Sie können beispielsweise den folgenden Befehl verwenden, um Pods, die zu einer Bereitstellung gehören, neu zu starten:
kubectl rollout restart deployment -n NAMESPACE DEPLOYMENT_NAME
Clusterintern
In diesem Abschnitt wird beschrieben, wie Sie Cloud Trace in Cloud Service Mesh mit der clusterinternen Steuerungsebene aktivieren.
Stellen Sie die vom Kunden verwaltete Steuerungsebene mithilfe der folgenden Overlay-Datei noch einmal bereit, um Cloud Trace zu aktivieren. Weitere Informationen zu Overlay-Dateien finden Sie unter Informationen zu Overlay-Dateien.
asmcli install
wird die vorhandene Konfiguration der Steuerungsebene überschrieben. Wenn Sie für eine vorhandene Installation optionale Features aktivieren, geben Sie alle Dateien an, die Sie in der ursprünglichen Konfiguration beibehalten möchten, sowie die Overlay-Dateien für die Features, die Sie aktivieren möchten. Wir empfehlen, die für die Installation verwendeten Overlay-Dateien in der Versionsverwaltung zu speichern, damit Sie bei Upgrades oder beim Aktivieren zusätzlicher optionaler Funktionen dieselben Konfigurationen auf Ihre Steuerungsebene anwenden können.Standard
Aktivieren Sie Cloud Trace mit dem folgenden Befehl:
./asmcli install \
OTHER_FLAGS \
--option cloud-trace
Dieser Befehl wendet die folgende Overlay-Datei an, um das Tracing mit Standardoptionen zu aktivieren. Die Standardabtastrate beträgt 1%. Wenn Sie die Standardeinstellung überschreiben möchten, 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 findest du im Paket anthos-service-mesh
.
Benutzerdefiniert
Sie können den Standardwert überschreiben, indem Sie einen tracing.sampling
-Wert angeben. Der Wert muss im Bereich von 0,0 bis 100,0 mit einer Genauigkeit von 0,01 liegen. Wenn Sie beispielsweise 5 Anfragen von 10.000 Anfragen verfolgen möchten, verwenden Sie 0,05.
Das folgende Beispiel zeigt eine Abtastrate von 100% (was Sie nur zu Demozwecken oder zur Fehlerbehebung tun würden).
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
spec:
meshConfig:
enableTracing: true
defaultConfig:
tracing:
sampling: 100
values:
global:
proxy:
tracer: stackdriver
Aktivieren Sie Cloud Trace mit dem folgenden Befehl:
./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 eingeschleust werden, um die Tracer-Aktualisierung aufzunehmen. Verwenden Sie den folgenden Befehl, um Pods, die zu einer Bereitstellung gehören, neu zu starten:
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 entsprechenden Header von der eingehenden Anfrage erfassen und an alle ausgehenden Anfragen weitergeben. Die Stackdriver Tracing-Konfiguration von Cloud Service Mesh akzeptiert eines der folgenden Header-Formate und gibt alle der folgenden Formate an:
- 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 im zurückgegebenen Satz von Anfrageheadern alle Trace-Kontext-Header enthalten 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.
DISABLE_TRACING
-Variablen konfiguriert werden.Zugriffs-Traces
Trace-Beispiele für einen Dienst ansehen
So rufen Sie eine Stichprobe von Traces für einen Dienst in Ihrer App auf:
Rufen Sie in der Google Cloud Console die Seite Cloud Service Mesh auf.
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.Klicken Sie unter Traces anfordern auf einen Trace, um weitere Informationen zu erhalten.
Der folgende Screenshot zeigt ein Beispiel für den untergeordneten Bereich „Trace-Anfrage“.
Alle Traces ansehen
So rufen Sie alle Traces für einen Dienst auf:
Rufen Sie in der Google Cloud Console die Seite Cloud Service Mesh auf.
Wählen Sie unter Dienste den Namen des Dienstes aus, den Sie prüfen möchten.
Rufen Sie die Seite Messwerte auf.
Geben Sie im Drop-down Zeitspanne einen Zeitraum an oder legen Sie eine benutzerdefinierte Zeitspanne mit der Zeitachse fest.
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
.