Latenz von Anwendungsanfragen ansehen

Hier erfahren Sie, wie Sie Latenzdaten Ihrer Anwendungen erfassen und aufrufen:

  1. Erstellen Sie mit der Google Cloud CLI einen GKE-Cluster (Google Kubernetes Engine).

  2. Beispielanwendung herunterladen und im Cluster bereitstellen

  3. Erstellen Sie einen Trace, indem Sie eine HTTP-Anfrage an die Beispielanwendung senden.

  4. Sehen Sie sich die Latenzinformationen des von Ihnen erstellten Trace an.

  5. bereinigen.


Klicken Sie auf Anleitung, um die Schritt-für-Schritt-Anleitung für diese Aufgabe direkt in der Google Cloud Console auszuführen:

Anleitung


Hinweise

  1. Von Ihrer Organisation definierte Sicherheitsbeschränkungen verhindern möglicherweise, dass die folgenden Schritte ausgeführt werden. Informationen zur Fehlerbehebung finden Sie unter Anwendungen in einer eingeschränkten Google Cloud-Umgebung entwickeln.

  2. Melden Sie sich bei Ihrem Google Cloud-Konto an. Wenn Sie mit Google Cloud noch nicht vertraut sind, erstellen Sie ein Konto, um die Leistungsfähigkeit unserer Produkte in der Praxis sehen und bewerten zu können. Neukunden erhalten außerdem ein Guthaben von 300 $, um Arbeitslasten auszuführen, zu testen und bereitzustellen.
  3. Wählen Sie in der Google Cloud Console auf der Seite der Projektauswahl ein Google Cloud-Projekt aus oder erstellen Sie eines.

    Zur Projektauswahl

  4. Die Abrechnung für das Google Cloud-Projekt muss aktiviert sein.

  5. Google Kubernetes Engine and Cloud Trace APIs aktivieren.

    Aktivieren Sie die APIs

  6. Wählen Sie in der Google Cloud Console auf der Seite der Projektauswahl ein Google Cloud-Projekt aus oder erstellen Sie eines.

    Zur Projektauswahl

  7. Die Abrechnung für das Google Cloud-Projekt muss aktiviert sein.

  8. Google Kubernetes Engine and Cloud Trace APIs aktivieren.

    Aktivieren Sie die APIs

GKE-Cluster erstellen

  1. Klicken Sie in der Symbolleiste auf Cloud Shell aktivieren und führen Sie dann die folgenden Schritte in Cloud Shell aus.

  2. Erstellen Sie einen Cluster.

    gcloud container clusters create cloud-trace-demo --zone us-central1-c
    

    Mit dem vorherigen Befehl, der einige Minuten dauern kann, wird ein Standardcluster mit dem Namen cloud-trace-demo in der Zone us-central1-c erstellt.

  3. Konfigurieren Sie kubectl so, dass die Anmeldedaten automatisch aktualisiert werden, um dieselbe Identität wie die Google Cloud CLI zu verwenden:

    gcloud container clusters get-credentials cloud-trace-demo --zone us-central1-c
    
  4. Prüfen Sie den Zugriff auf den Cluster:

    kubectl get nodes
    

    Hier ein Beispiel für diesen Befehl:

    NAME                                              STATUS   ROLES    AGE   VERSION
    gke-cloud-trace-demo-default-pool-063c0416-113s   Ready    <none>   78s   v1.22.12-gke.2300
    gke-cloud-trace-demo-default-pool-063c0416-1n27   Ready    <none>   79s   v1.22.12-gke.2300
    gke-cloud-trace-demo-default-pool-063c0416-frkd   Ready    <none>   78s   v1.22.12-gke.2300
    

Download und Bereitstellung und Anwendung

Laden Sie eine Python-Anwendung herunter und stellen Sie diese bereit, die das Prometheus-Framework und das OpenTelemetry-Paket verwendet. Die Anwendung wird im Abschnitt Über die App auf dieser Seite beschrieben.

Führen Sie in Cloud Shell die folgenden Schritte aus:

  1. Klonen Sie eine Python-Anwendung aus GitHub:

    git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
    
  2. Führen Sie den folgenden Befehl aus, um die Beispielanwendung bereitzustellen:

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

    Das Script setup.sh kann mehrere Minuten dauern.

    Das Skript konfiguriert drei Dienste mithilfe eines vordefinierten Image und wartet dann, bis alle Ressourcen bereitgestellt wurden. Die Arbeitslasten heißen cloud-trace-demo-a, cloud-trace-demo-b und cloud-trace-demo-c.

    Hier ein Beispiel für diesen Befehl:

    deployment.apps/cloud-trace-demo-a is created
    service/cloud-trace-demo-a is created
    deployment.apps/cloud-trace-demo-b is created
    service/cloud-trace-demo-b is created
    deployment.apps/cloud-trace-demo-c is created
    service/cloud-trace-demo-c is created
    
    Wait for load balancer initialization complete......
    Completed.
    

Trace-Daten erstellen

Ein trace beschreibt, wie lange eine Anwendung benötigt, um einen einzelnen Vorgang abzuschließen.

Führen Sie zum Erstellen eines Trace in Cloud Shell den folgenden Befehl aus:

curl $(kubectl get svc -o=jsonpath='{.items[?(@.metadata.name=="cloud-trace-demo-a")].status.loadBalancer.ingress[0].ip}')

Die Antwort auf den vorherigen Befehl sieht so aus:

Hello, I am service A
And I am service B
Hello, I am service C

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

Latenzdaten ansehen

  1. Wählen Sie im Navigationsbereich der Google Cloud Console Trace und dann Trace Explorer aus:

    Zum Trace Explorer

    Jeder Trace wird durch einen Punkt im Diagramm und eine Zeile in der Tabelle dargestellt.

    Im folgenden Screenshot sehen Sie mehrere Traces:

    Trace Explorer-Fenster für die Kurzanleitung.

  2. Wählen Sie einen Punkt im Diagramm oder eine Zeile in der Tabelle aus, um sich einen Trace im Detail anzusehen.

    Das Streudiagramm wird aktualisiert und der ausgewählte Punkt wird mit einem Kreis um den Punkt herum hervorgehoben. Alle anderen Punkte, die alle anderen Traces darstellen, werden gedimmt.

    Ein Gantt-Diagramm enthält Informationen zum ausgewählten Trace. Die erste Zeile im Gantt-Diagramm ist für das Trace und es gibt eine Zeile für jeden Span im Trace. Ein Span beschreibt, wie lange es dauert, einen vollständigen Untervorgang auszuführen.

    Weitere Details zu jedem Span werden im Detailbereich angezeigt.

  3. Wenn Sie detaillierte Informationen zu einem Span ansehen möchten, wählen Sie im Gantt-Diagramm den Span aus.

Ü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 ist in Python geschrieben, verwendet das Prometheus-Framework und die OpenTelemetry-Pakete und wird in einem GKE-Cluster ausgeführt.

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 Anwendung importiert mehrere OpenTelemetry-Pakete:

    from opentelemetry import trace
    from opentelemetry.exporter.cloud_trace import CloudTraceSpanExporter
    from opentelemetry.instrumentation.flask import FlaskInstrumentor
    from opentelemetry.instrumentation.requests import RequestsInstrumentor
    from opentelemetry.propagate import set_global_textmap
    from opentelemetry.propagators.cloud_trace_propagator import CloudTraceFormatPropagator
    from opentelemetry.sdk.trace import TracerProvider
    from opentelemetry.sdk.trace.export import BatchSpanProcessor
    
  • Die Anwendung instrumentiert Webanfragen mit Trace-Kontext und führt automatisch ein Trace für Surface-Handler und Anfragen an andere Dienste durch:

    app = flask.Flask(__name__)
    FlaskInstrumentor().instrument_app(app)
    RequestsInstrumentor().instrument()
  • Die Anwendung konfiguriert den Cloud Trace-Exporter als Trace-Anbieter, der den Trace-Kontext im Cloud Trace-Format weitergibt:

    def configure_exporter(exporter):
        """Configures OpenTelemetry context propagation to use Cloud Trace context
    
        Args:
            exporter: exporter instance to be configured in the OpenTelemetry tracer provider
        """
        set_global_textmap(CloudTraceFormatPropagator())
        tracer_provider = TracerProvider()
        tracer_provider.add_span_processor(BatchSpanProcessor(exporter))
        trace.set_tracer_provider(tracer_provider)
    
    configure_exporter(CloudTraceSpanExporter())
    tracer = trace.get_tracer(__name__)
  • Das folgende Code-Snippet zeigt, wie Anfragen in Python gesendet werden. OpenTelemetry übergibt den Trace-Kontext implizit für Sie bei Ihren ausgehenden Anfragen:

    if endpoint is not None and endpoint != "":
        data = {"body": keyword}
        response = requests.get(
            endpoint,
            params=data,
        )
        return keyword + "\n" + response.text
    else:
        return keyword, 200
    
    

Funktionsweise der Anwendung

Zur besseren Übersichtlichkeit wird in diesem Abschnitt cloud-trace-demo aus den Dienstnamen weggelassen. Beispiel: Der Dienst cloud-trace-demo-c wird als c bezeichnet.

Diese Anwendung erstellt drei Dienste mit den Namen a, b und c. Der Dienst a ist für den Aufruf des Dienstes b konfiguriert, der Dienst b ist für den Aufruf des Dienstes c konfiguriert. 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 a gesendet haben, haben Sie den folgenden curl-Befehl verwendet:

curl $(kubectl get svc -o=jsonpath='{.items[?(@.metadata.name=="cloud-trace-demo-a")].status.loadBalancer.ingress[0].ip}')

Der Befehl curl funktioniert so:

  1. kubectl ruft die IP-Adresse des Dienstes cloud-trace-demo-a ab.
  2. Der Befehl curl sendet dann die HTTP-Anfrage an den Dienst a.
  3. Dienst a empfängt die HTTP-Anfrage und sendet eine Anfrage an den Dienst b.
  4. Dienst b empfängt die HTTP-Anfrage und sendet eine Anfrage an den Dienst c.
  5. Der Dienst c empfängt die HTTP-Anfrage vom Dienst b und gibt den String Hello, I am service C an den Dienst b zurück.
  6. Der Dienst b empfängt die Antwort vom Dienst c, hängt sie an den String And I am service B an und gibt das Ergebnis an den Dienst a zurück.
  7. Der Dienst a empfängt die Antwort vom Dienst b und hängt sie an den String Hello, I am service A an.
  8. Die Antwort vom Dienst a wird in Cloud Shell ausgegeben.

Bereinigen

Mit den folgenden Schritten vermeiden Sie, dass Ihrem Google Cloud-Konto die auf dieser Seite verwendeten Ressourcen in Rechnung gestellt werden.

Wenn Sie ein neues Projekt erstellt haben und es nicht mehr benötigen, löschen Sie es.

Wenn Sie ein vorhandenes Projekt verwendet haben, gehen Sie so vor:

  1. Führen Sie zum Löschen des Clusters in Cloud Shell den folgenden Befehl aus:

    gcloud container clusters delete cloud-trace-demo --zone us-central1-c

Nächste Schritte