Quickstart

In dieser Kurzanleitung verwenden Sie Cloud Shell, um eine Beispielanwendung in einem Google Kubernetes Engine-Cluster (GKE) bereitzustellen. Die Anwendung ist in Python geschrieben. Nach der Bereitstellung verwenden Sie curl, um eine HTTP-Anfrage zu senden. Diese Aktion führt dazu, dass ein Trace erfasst und an Ihr Google Cloud-Projekt gesendet wird. Schließlich verwenden Sie die Cloud Trace-Oberfläche, um die Latenzinformationen des von Ihnen generierten Trace anzuzeigen.

Hinweis

  1. Melden Sie sich bei Ihrem Google-Konto an.

    Wenn Sie noch kein Konto haben, melden Sie sich hier für ein neues Konto an.

  2. Wählen Sie in der Cloud Console auf der Seite für die Projektauswahl ein Cloud-Projekt aus oder erstellen Sie eines.

    Zur Projektauswahl

  3. Die Abrechnung für das Google Cloud-Projekt muss aktiviert sein. So prüfen Sie, ob die Abrechnung für Ihr Projekt aktiviert ist.

Ihre Anwendung herunterladen und bereitstellen

So laden Sie die Anwendung herunter und stellen sie bereit:

  1. Klicken Sie in der Symbolleiste der Google Cloud Console auf Cloud Shell aktivieren, um Cloud Shell zu öffnen:

    Cloud Shell aktivieren

    Nach kurzer Zeit wird in der Google Cloud Console eine Cloud Shell-Sitzung geöffnet:

    Cloud Shell-Sitzung

  2. Führen Sie den folgenden Befehl aus, um den Quellcode von GitHub herunterzuladen:

    git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
    
  3. Führen Sie den folgenden Befehl in Cloud Shell aus, um die Google Kubernetes Engine API zu aktivieren:

    gcloud services enable container.googleapis.com
    
  4. Führen Sie den folgenden Befehl in Cloud Shell aus, um den GKE-Cluster mit dem Namen demo zu erstellen:

    gcloud container clusters create demo --zone us-west1-b
    

    Die Ausführung dieses Befehls dauert drei bis fünf Minuten. Nach erfolgreichem Abschluss enthält Ihr Google Cloud-Projekt den GKE-Cluster namens demo. Sie müssen die Berechtigung zum Erstellen von Clustern mit externem Zugriff in Ihrem Google Cloud-Projekt haben. Wenn sich Ihre Google Cloud in einer Organisation oder einem Ordner befindet, haben Sie möglicherweise nicht diese Berechtigungen, auch wenn Sie der Projektinhaber sind. Wenn dieser Befehl fehlschlägt, wenden Sie sich an Ihren Systemadministrator.

  5. Führen Sie den folgenden kubectl-Befehl aus, um die erfolgreiche Erstellung zu prüfen:

    kubectl get nodes
    

    Eine Beispielausgabe dieses Befehls ist:

    NAME                                  STATUS   ROLES    AGE   VERSION
    gke-demo-default-pool-24680f3d-bzvg   Ready    <none>   26m   v1.14.10-gke.27
    gke-demo-default-pool-24680f3d-hfnq   Ready    <none>   26m   v1.14.10-gke.27
    gke-demo-default-pool-24680f3d-qnh6   Ready    <none>   26m   v1.14.10-gke.27
    
  6. Stellen Sie die Beispielanwendung mit dem folgenden Befehl bereit:

    cd python-docs-samples/trace/cloud-trace-demo-app && ./setup.sh
    

    Mit dem Skript setup.sh, das Teil dieses Projekts ist, werden drei verschiedene Dienste mit den Labels cloud-trace-demo-a, cloud-trace-demo-b und cloud-trace-demo-c konfiguriert. Da das Einrichtungsskript jeweils nur einen Dienst konfiguriert, dauert die Konfiguration mehrere Minuten. Das folgende Beispiel zeigt, was das Skript während der Ausführung an Cloud Shell ausgibt:

     Creating service a
     deployment.apps/cloud-trace-demo-a unchanged
     service/cloud-trace-demo-a unchanged
     Fetching the external IP of service a
     Passing external IP for the first service 34.82.132.95 to the second service template
     deployment.apps/cloud-trace-demo-b created
     service/cloud-trace-demo-b created
     Fetching the external IP of service b
     Passing external IP for the service b 35.230.0.131 to the service c
     deployment.apps/cloud-trace-demo-c created
     service/cloud-trace-demo-c created
     

Trace erstellen

Ein Trace beschreibt die Zeit, die eine Anwendung benötigt, um einen einzelnen Vorgang abzuschließen. Jeder Trace besteht aus einem oder mehreren Spans. Ein Span beschreibt, wie lange es dauert, einen vollständigen Untervorgang auszuführen. Ein Trace kann beispielsweise beschreiben, wie lange es dauert, eine eingehende Anfrage von einem Nutzer zu verarbeiten und eine Antwort zurückzugeben. Ein Span kann beschreiben, wie lange ein bestimmter RPC-Aufruf dauert. Weitere Informationen finden Sie im Datenmodell von Cloud Trace.

Führen Sie den folgenden Befehl aus, um einen Trace zu erstellen:

curl $(kubectl get svc cloud-trace-demo-c -ojsonpath='{.status.loadBalancer.ingress[0].ip}')

Der Befehl curl generiert eine HTTP-GET-Anfrage und gibt die Anfrage an den Dienst cloud-trace-demo-c aus. Wenn diese Anfrage abgeschlossen ist, wird Helloworld! an die Shell ausgegeben.

Sie können den Befehl curl mehrmals ausführen, um mehrere Traces zu generieren.

Trace-Daten ansehen

Klicken Sie zum Öffnen der Cloud Trace-Oberfläche in der Google Cloud Console auf Navigationsmenü und wählen Sie Trace aus oder klicken Sie auf die folgende Schaltfläche:

Zu Trace

Fenster "Übersicht"

Das Fenster Übersicht ist die Standardansicht in Trace. In diesem Fenster werden Latenzdaten und zusammenfassende Informationen einschließlich eines Analyseberichts angezeigt. Wenn Sie ein neues Projekt erstellt haben, ist der interessanteste Bereich des Fensters Übersicht der Bereich Aktuelle Traces:

Bereich

In diesem Bereich werden die neuesten Traces und ihre Latenz aufgelistet. Klicken Sie auf den entsprechenden Link, um die Details eines Trace anzuzeigen.

Fenster "Trace-Liste"

Klicken Sie im Trace-Navigationsbereich auf Trace-Liste:

Kurzanleitung Fenster

In diesem Fenster werden eine Grafik und eine Tabelle angezeigt. Jeder Punkt in der Grafik stellt einen Trace dar. Jeder Punkt entspricht auch einer Zeile in der Tabelle. Im vorherigen Screenshot sind mehrere Traces aufgeführt, was darauf hinweist, dass der Befehl curl mehrmals ausgeführt wurde.

Um einen Trace im Detail anzuzeigen, wählen Sie einen Punkt in der Grafik oder eine Zeile in der Tabelle aus. Dadurch werden zwei Fenster geöffnet, in denen die Details des ausgewählten Trace angezeigt werden:

Kurzanleitung

In einem Bereich werden der Trace in einer Wasserfallgrafik angezeigt und die Details werden im Bereich angezeigt. Jede Zeile in der Wasserfallgrafik entspricht einem Span. Die Details des Spans, z. B. Trace-Labels, Methode und zusammenfassende Informationen zur Befehlslatenz, werden in der Detailtabelle angezeigt. Um Details zu einem Span anzuzeigen, klicken Sie auf die entsprechende Zeile in der Wasserfallgrafik. Beachten Sie, dass die Spans für drei verschiedene IP-Adressen gelten. Diese entsprechen den IP-Adressen der drei Dienste. Anhand dieses Trace können Sie sehen, dass eine HTTP-Anfrage mit dem Dienstnamen cloud-trace-demo-c an den Dienst cloud-trace-demo-b und dann an cloud-trace-demo-a weitergeleitet wird.

Die Detailtabelle kann einen Link zu Daten enthalten, die an Cloud Logging gesendet wurden. Zum Anzeigen der Informationen in der Cloud Logging-Oberfläche klicken Sie auf Ansicht. Der folgende Screenshot zeigt ein Beispiel eines Logs, das von Trace-Daten generiert wurde:

LogEntry für einen Trace aus der Kurzanleitung.

Beachten Sie, dass die in der Wasserfallansicht angezeigten IP-Adressen den IP-Adressen der Dienste cloud-trace-demo-a und cloud-trace-demo-b entsprechen.

Fenster "Analyseberichte"

Klicken Sie im Navigationsbereich Trace auf Analyseberichte, um einen Bericht anzuzeigen oder zu erstellen. Trace erstellt automatisch tägliche Berichte. Für dieses Projekt sind nicht genügend Daten vorhanden, um einen neuen Bericht zu erstellen.

Über die Anwendung

Die in dieser Kurzanleitung verwendete Beispielanwendung ist in einem GitHub-Repository verfügbar. Dieses Repository enthält Informationen zur Verwendung der Anwendung in anderen Umgebungen als Cloud Shell. Die Beispielanwendung wurde in Python geschrieben, verwendet das Flask-Framework und OpenCensus-Pakete und wird in einem Google Kubernetes Engine-Cluster ausgeführt.

Die Anwendungsautoren entschieden sich für das Flask-Framework, da es die Anwendungsentwicklung vereinfacht und sie die OpenCensus Flask-Middleware verwenden wollten. Sie müssen das Flask-Framework nicht verwenden, wenn Sie Python ausführen.

Instrumentierung

Die Datei app.py im GitHub-Repository enthält die Instrumentierung, die zum Erfassen und Senden von Trace-Daten an Ihr Google Cloud-Projekt erforderlich ist:

  • Die Importanweisungen der Anwendung enthalten eine Anweisung für Flask und für mehrere OpenCensus-Pakete. StackdriverExporter ist das Objekt, das Trace-Daten an Ihr Google Cloud-Projekt sendet:

    from flask import Flask
    from opencensus.ext.flask.flask_middleware import FlaskMiddleware
    from opencensus.ext.stackdriver.trace_exporter import StackdriverExporter
    from opencensus.trace import execution_context
    from opencensus.trace.propagation import google_cloud_format
    from opencensus.trace.samplers import AlwaysOnSampler
  • Die Anwendung erstellt eine Middleware-Komponente, die Flask als HTTP-Framework verwendet:

    propagator = google_cloud_format.GoogleCloudFormatPropagator()
    
    def createMiddleWare(exporter):
        # Configure a flask middleware that listens for each request and applies automatic tracing.
        # This needs to be set up before the application starts.
        middleware = FlaskMiddleware(
            app,
            exporter=exporter,
            propagator=propagator,
            sampler=AlwaysOnSampler())
        return middleware

    In dieser Anwendung wird das Feld sampler von der OpenCensus-Methode AlwaysOnSampler() festgelegt. Diese Methode gibt für jede Stichprobenentscheidung True zurück und stellt sicher, dass 100 % der Anfragen verfolgt werden. In einer Produktionsumgebung wird die Stichprobenerfassung aller Anfragen nicht empfohlen. Weitere Informationen finden Sie unter Sampling-Rate.

  • Erstellen Sie in der main-Funktion der Anwendung die Flask-Middleware, die StackdriverExporter() verwendet:

    createMiddleWare(StackdriverExporter())
  • Die Anwendung enthält eine weitere Änderung, die nicht erforderlich ist. Stattdessen dient diese Änderung der Veranschaulichung. In der Anwendung enthält die Antwort auf die Route / den Header X-Cloud-Trace-Context:

    trace_context_header = propagator.to_header(execution_context.get_opencensus_tracer().span_context)
    response = requests.get(
        url,
        params=data,
        headers={
          'X-Cloud-Trace-Context' : trace_context_header}
    )

    Der X-Cloud-Trace-Context-Header ist ein HTTP-Header, der Informationen zum aktuellen Trace einschließlich der Trace-ID enthält. Damit verschiedene Dienste Span-Informationen zum selben Trace hinzufügen können, müssen diese Dienste die Trace-ID identifizieren können. Standardmäßig enthält das OpenCensus-Paket diesen Kontext in den Antwortheadern.

Funktionsweise der Anwendung

Der Übersichtlichkeit halber wird in diesem Abschnitt cloud-trace-demo in den Dienstnamen weggelassen. Beispielsweise wird der Dienst cloud-trace-demo-c als c referenziert.

Diese Anwendung erstellt drei Dienste mit den Namen a, b und c. Sie konfiguriert den Dienst c für den Aufruf des Dienstes b und für den Dienst b zum Aufrufen des Dienstes a. Weitere Informationen zur Konfiguration der Dienste finden Sie in den YAML-Dateien im GitHub-Repository.

Wenn Sie in diesem Schnellstart eine HTTP-Anfrage an den Dienst c gesendet haben, haben Sie den folgenden curl-Befehl verwendet:

curl $(kubectl get svc cloud-trace-demo-c -ojsonpath='{.status.loadBalancer.ingress[0].ip}')

Der Befehl curl funktioniert so:

  1. kubectl ruft die IP-Adresse des Dienstes cloud-trace-demo-c ab.
  2. Der Befehl curl sendet dann die HTTP-Anfrage an den Dienst c.
  3. Der Dienst c empfängt die HTTP-Anfrage und sendet eine Anfrage an den Dienst b.
  4. Der Dienst b empfängt die HTTP-Anfrage und sendet eine Anfrage an den Dienst a.
  5. Der Dienst a empfängt die Anfrage und gibt den String Hello zurück. Der String Hello ist ein Schlüsselwort, das als Standardargument an diesen Dienst übergeben wird.
  6. Der Dienst b empfängt die Antwort vom Dienst a, hängt den String world an und gibt dann Helloworld zurück. Der String world ist ein Schlüsselwort, das als Standardargument an diesen Dienst übergeben wird.
  7. Der Dienst c empfängt die Antwort vom Dienst b, hängt ! an und gibt dann Helloworld! zurück.
  8. Die Antwort des Dienstes c wird in Cloud Shell ausgegeben.

Clean-up

So vermeiden Sie, dass Ihrem Google Cloud-Konto die in dieser Kurzanleitung verwendeten Ressourcen in Rechnung gestellt werden:

  • Wenn Sie für diese Kurzanleitung ein neues Google Cloud-Projekt erstellt haben, löschen Sie das Projekt, damit keine Gebühren mehr anfallen. So löschen Sie Ihr Projekt:

    1. Klicken Sie in der Google Cloud Console auf Navigationsmenü und wählen Sie Startseite aus.
    2. Klicken Sie im Bereich Projektinformationen auf Zu den Projekteinstellungen.
    3. Klicken Sie im Fenster Einstellungen auf Beenden und führen Sie die verbleibenden Schritte aus.
  • Wenn Sie für diesen Schnellstart kein neues Google Cloud-Projekt erstellt haben, löschen Sie den Google Kubernetes Engine-Cluster demo mit dem folgenden Befehl:

    gcloud container clusters delete demo --zone us-west1-b
    

Nächste Schritte