Visualiza la latencia de las solicitudes de la app

Aprende a recopilar y ver datos de latencia de tus aplicaciones:

  1. Crea un clúster de Google Kubernetes Engine (GKE) con Google Cloud CLI.

  2. Descarga y, luego, implementa una aplicación de ejemplo en tu clúster.

  3. Enviar una solicitud HTTP a la aplicación de ejemplo para crear un seguimiento.

  4. Visualiza la información de latencia del seguimiento que creaste.

  5. Realizar una limpieza


Para seguir la guía paso a paso sobre esta tarea directamente en la consola Google Cloud , haz clic en Guiarme:

GUIARME


Antes de comenzar

  1. Es posible que las restricciones de seguridad que define tu organización no te permitan completar los siguientes pasos. Para obtener información sobre la solución de problemas, consulta Desarrolla aplicaciones en un entorno Google Cloud restringido.

  2. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  3. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  4. Make sure that billing is enabled for your Google Cloud project.

  5. Enable the Google Kubernetes Engine and Cloud Trace APIs.

    Enable the APIs

  6. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  7. Make sure that billing is enabled for your Google Cloud project.

  8. Enable the Google Kubernetes Engine and Cloud Trace APIs.

    Enable the APIs

  9. Crea un clúster de GKE

    En esta guía, se crea un clúster de GKE estándar. Si usas el modo Autopilot para Google Kubernetes Engine o si habilitas la federación de identidades para cargas de trabajo para GKE, debes configurar tu aplicación para que use la federación de identidades para cargas de trabajo para GKE.

    1. En la barra de herramientas, haz clic en Activar Cloud Shell y, luego, realiza los siguientes pasos en Cloud Shell.

    2. Crea un clúster:

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

      El comando anterior, que tarda varios minutos en completarse, crea un clúster estándar con el nombre cloud-trace-demo en la zona us-central1-c.

    3. Configura kubectl para que actualice sus credenciales de forma automática a fin de usar la misma identidad que Google Cloud CLI:

      gcloud container clusters get-credentials cloud-trace-demo --zone us-central1-c
      
    4. Verifica el acceso a tu clúster:

      kubectl get nodes
      

      El siguiente es un resultado de ejemplo de este comando:

      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
      

    Descarga e implementa una aplicación

    Descarga e implementa una aplicación de Python que usa el framework de Flask y el paquete de OpenTelemetry. La aplicación se describe en la sección Acerca de la app de esta página.

    En Cloud Shell, haz lo siguiente:

    1. Clona una app de Python desde GitHub:

      git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
      
    2. Ejecuta el siguiente comando para implementar la aplicación de muestra:

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

      La secuencia de comandos setup.sh tarda varios minutos en completarse.

      La secuencia de comandos configura tres servicios con una imagen precompilada con anterioridad y, luego, espera a que se aprovisionen todos los recursos. Las cargas de trabajo se llaman cloud-trace-demo-a, cloud-trace-demo-b y cloud-trace-demo-c.

      El siguiente es un resultado de ejemplo de este comando:

      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.
      

    Cómo crear datos de seguimiento

    Un seguimiento describe el tiempo que tarda una aplicación en completar una sola operación.

    Para crear un seguimiento, ejecuta el siguiente comando en Cloud Shell:

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

    La respuesta del comando anterior se ve de la siguiente manera:

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

    Puedes ejecutar el comando curl varias veces para generar múltiples seguimientos.

    Consulta los datos de latencia

    1. En la consola de Google Cloud , ve a la página Explorador de seguimiento:

      Ve al Explorador de seguimiento

      También puedes usar la barra de búsqueda para encontrar esta página.

      En la siguiente captura de pantalla, se muestra el resultado de ejecutar el comando curl varias veces. En el gráfico, se muestran los datos de latencia agregados de los intervalos, que describen las suboperaciones de seguimiento.

      Revisa la ventana del Explorador de Trace para obtener una guía de inicio rápido.

    2. Para ver un seguimiento en detalle, selecciona un intervalo en el gráfico o una fila en la tabla.

      Se abrirá el diálogo de detalles de seguimiento, como se muestra en la siguiente captura de pantalla:

      La información adicional sobre cada intervalo se muestra en el panel de detalles.

      Un diagrama de Gantt muestra información sobre el seguimiento seleccionado. La primera fila en el diagrama de Gantt es para el seguimiento, y cada fila siguiente es un intervalo dentro del seguimiento.

    3. Para ver información detallada sobre un intervalo, selecciona el intervalo en el diagrama de Gantt.

    Acerca de la aplicación

    La aplicación de muestra que se usa en esta guía de inicio rápido está disponible en un repositorio de GitHub. Este repositorio contiene información sobre cómo usar la aplicación en entornos distintos de Cloud Shell. La aplicación de muestra está escrita en Python, usa el framework de Flask y los paquetes de OpenTelemetry, y se ejecuta en un clúster de GKE.

    En esta guía, se crea un clúster de GKE estándar. Si usas el modo Autopilot para Google Kubernetes Engine o si habilitas la federación de identidades para cargas de trabajo para GKE, debes configurar tu aplicación para que use la federación de identidades para cargas de trabajo para GKE.

    Instrumentación

    El archivo app.py en el repositorio de GitHub contiene la instrumentación necesaria para capturar y enviar datos de seguimiento a tu proyecto Google Cloud :

    • La aplicación importa varios paquetes de OpenTelemetry:

      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
      
    • La aplicación instrumenta las solicitudes web con el contexto de seguimiento y realiza automáticamente el seguimiento de los controladores de Flask y las solicitudes a otros servicios:

      app = flask.Flask(__name__)
      FlaskInstrumentor().instrument_app(app)
      RequestsInstrumentor().instrument()
    • La aplicación configura el exportador de Cloud Trace como un proveedor de seguimiento, que propaga el contexto de seguimiento en el formato de Cloud Trace:

      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__)
    • En el siguiente fragmento de código, se muestra cómo enviar solicitudes en Python. OpenTelemetry propaga de forma implícita el contexto de seguimiento para ti con tus solicitudes salientes:

      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
      
      

    Cómo funciona la aplicación

    Para mayor claridad, en esta sección, cloud-trace-demo se omite de los nombres de servicio. Por ejemplo, al servicio cloud-trace-demo-c se le hace referencia como c.

    Esta aplicación crea tres servicios llamados a, b y c. El servicio a está configurado para llamar al servicio b, y el servicio b está configurado para llamar al servicio c. Para obtener más detalles sobre la configuración de los servicios, consulta los archivos YAML en el repositorio de GitHub.

    Cuando emitiste una solicitud HTTP al servicio a en esta guía de inicio rápido, usaste el siguiente comando de curl:

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

    El comando curl funciona de la siguiente manera:

    1. kubectl recupera la dirección IP del servicio llamada cloud-trace-demo-a.
    2. Luego, el comando curl envía la solicitud HTTP al servicio a.
    3. El servicio a recibe la solicitud HTTP y envía una solicitud al servicio b.
    4. El servicio b recibe la solicitud HTTP y envía una solicitud al servicio c.
    5. El servicio c recibe la solicitud HTTP del servicio b y devuelve la cadena Hello, I am service C al servicio b.
    6. El servicio b recibe la respuesta del servicio c, la agrega a la cadena And I am service B y devuelve el resultado al servicio a.
    7. El servicio a recibe la respuesta del servicio b y la agrega a la cadena Hello, I am service A.
    8. La respuesta del servicio a se muestra en Cloud Shell.

Limpia

Sigue estos pasos para evitar que se apliquen cargos a tu cuenta de Google Cloud por los recursos que usaste en esta página.

Si creaste un proyecto nuevo y ya no lo necesitas, bórralo.

Si usaste un proyecto existente, haz lo siguiente:

  1. Para borrar tu clúster, ejecuta el siguiente comando en Cloud Shell:

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

¿Qué sigue?