Guía de inicio rápido

En esta guía de inicio rápido, usarás Cloud Shell para implementar una aplicación de muestra en un clúster de Google Kubernetes Engine (GKE). La aplicación está escrita en Python. Después de la implementación, usa curl para emitir una solicitud HTTP. Esta acción hace que se capture y se envíe un seguimiento a tu proyecto de Google Cloud. Por último, debes usar la interfaz de Cloud Trace para ver la información de latencia del seguimiento que generaste.

Antes de comenzar

  1. Accede a tu Cuenta de Google.

    Si todavía no tienes una cuenta, regístrate para obtener una nueva.

  2. En la página de selección de proyectos de Cloud Console, selecciona o crea un proyecto de Cloud.

    Ir a la página Selector de proyectos

  3. Asegúrate de que la facturación esté habilitada para tu proyecto de Google Cloud. Obtén información sobre cómo confirmar que tienes habilitada la facturación para tu proyecto.

Descarga y, también, implementa tu aplicación

Para descargar y, también, implementar la aplicación, haz lo siguiente:

  1. Para abrir Cloud Shell, haz clic en Activar Cloud Shell en la barra de herramientas de Google Cloud Console:

    Activa Cloud Shell.

    Después de unos momentos, se abrirá una sesión de Cloud Shell en Google Cloud Console:

    Sesión de Cloud Shell

  2. Para descargar el código fuente de GitHub, ejecuta el siguiente comando:

    git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
    
  3. Para habilitar la API de Google Kubernetes Engine, ejecuta el siguiente comando en Cloud Shell:

    gcloud services enable container.googleapis.com
    
  4. Para crear el clúster de GKE llamado demo, ejecuta el siguiente comando en Cloud Shell:

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

    Este comando tarda entre 3 y 5 minutos en completarse. Una vez que se completa de forma correcta, tu proyecto de Google Cloud contiene el clúster de GKE llamado demo. Debes tener permiso para crear clústeres que tengan acceso externo en tu proyecto de Google Cloud. Si Google Cloud está en una organización o en una carpeta, es posible que no tengas estos permisos incluso si eres el propietario del proyecto. Si este comando falla, comunícate con el administrador del sistema.

  5. Para verificar si se creó correctamente, ejecuta el siguiente comando de kubectl:

    kubectl get nodes
    

    El siguiente es un resultado de muestra de este comando:

    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. Para implementar la aplicación de muestra, ejecuta el siguiente comando:

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

    La secuencia de comandos setup.sh, que es parte de este proyecto, configura tres servicios diferentes, etiquetados cloud-trace-demo-a, cloud-trace-demo-b y cloud-trace-demo-c. Debido a que la secuencia de comandos de configuración configura un servicio a la vez, la configuración requiere varios minutos para completarse. El siguiente es un ejemplo de lo que la secuencia de comandos imprime en Cloud Shell durante su ejecución:

     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
     

Crea un seguimiento

Un seguimiento describe el tiempo que tarda una aplicación en completar una sola operación. Cada seguimiento consta de uno o más intervalos. Un intervalo describe cuánto tiempo se tarda en realizar una suboperación completa. Por ejemplo, un seguimiento puede describir cuánto tiempo lleva procesar una solicitud entrante de un usuario y mostrar una respuesta. Un intervalo puede describir cuánto tiempo requiere una llamada RPC en particular. Para obtener más información, consulta el modelo de datos de Cloud Trace.

Para crear un seguimiento, ejecuta el siguiente comando:

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

El comando curl genera una solicitud GET HTTP y emite la solicitud al servicio llamado cloud-trace-demo-c. Cuando se completa esta solicitud, se muestra Helloworld! en el shell.

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

Visualiza los datos de seguimiento

Para abrir la interfaz de Cloud Trace, en Google Cloud Console, haz clic en Menú de navegación y selecciona Trace o haz clic en el siguiente botón:

Ir a Trace

Ventana de descripción general

La ventana Descripción general es la vista predeterminada en Trace. En esta ventana, se muestran datos de latencia e información resumida, incluido un informe de análisis. Si creaste un proyecto nuevo, el panel más interesante de la ventana Descripción general es el panel Seguimientos recientes:

Panel de seguimientos recientes que muestra los seguimientos más recientes y su latencia.

Este panel enumera los seguimientos más recientes y su latencia. Para ver los detalles de un seguimiento, haz clic en el vínculo.

Ventana de lista de seguimientos

En el panel de navegación de Trace, haz clic en Lista de seguimientos:

Ventana de lista de seguimiento para la guía de inicio rápido.

Esta ventana muestra un gráfico y una tabla. Cada punto del gráfico representa un seguimiento. Cada punto también corresponde a una fila en la tabla. En la captura de pantalla anterior, se muestran varios seguimientos, lo que indica que el comando curl se ejecutó varias veces.

Para ver un seguimiento en detalle, selecciona un punto en el gráfico o una fila en la tabla. Esta acción hace que se abran dos paneles que muestren los detalles del seguimiento seleccionado:

Pantalla de cascada para la guía de inicio rápido.

Un panel muestra el seguimiento en un gráfico de cascada y el panel muestra sus detalles. Cada fila del gráfico de cascada corresponde a un intervalo. Los detalles del intervalo, como sus etiquetas de seguimiento, método e información resumida sobre la latencia del comando, se muestran en la tabla de detalles. Para ver los detalles de un intervalo, haz clic en la fila correspondiente del gráfico de cascada. Ten en cuenta que los intervalos corresponden a tres direcciones IP diferentes, que corresponden a las direcciones IP de los tres servicios. En este seguimiento, puedes ver que una solicitud HTTP recibida por el nombre del servicio cloud-trace-demo-c se pasa al servicio cloud-trace-demo-b y, luego, a cloud-trace-demo-a.

La tabla de detalles podría incluir un vínculo a los datos que se enviaron a Cloud Logging. Para ver la información en la interfaz de Cloud Logging, haz clic en Ver. En la siguiente captura de pantalla, se muestra un ejemplo de un registro que generó los datos de seguimiento:

LogEntry para un seguimiento de la guía de inicio rápido.

Ten en cuenta que las direcciones IP que se muestran en la vista de cascada corresponden a las direcciones IP de los servicios llamados cloud-trace-demo-a y cloud-trace-demo-b.

Ventana de informes de análisis

Para ver o crear un informe, en el panel de navegación de Trace, haz clic en Informes de análisis. Trace crea informes diarios automáticamente. Para este proyecto, no hay suficientes datos para crear un informe nuevo.

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 marco de trabajo de Flask y los paquetes de OpenCensus, y se ejecuta en un clúster de Google Kubernetes Engine.

Los autores de la aplicación eligieron usar el framework de Flask porque su uso simplifica el desarrollo de la aplicación y porque querían usar el middleware de OpenCensus. No tienes que usar el framework de Flask si usas Python.

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 de Google Cloud:

  • Las instrucciones de importación de la aplicación incluyen una declaración para Flask y varios paquetes de OpenCensus. El StackdriverExporter es el objeto que envía los datos de seguimiento a tu proyecto de Google Cloud:

    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
  • La aplicación crea un componente de middleware que usa Flask como framework de HTTP:

    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

    En esta aplicación, el campo sampler se establece mediante el método AlwaysOnSampler() de OpenCensus. Este método muestra True para cada decisión de muestreo y garantiza que se haga un seguimiento de todas las solicitudes. No se recomienda muestrear todas las solicitudes en un entorno de producción. Para obtener más información, consulta Tasa de muestreo.

  • En la función main de la aplicación, crea el middleware de Flask que use StackdriverExporter():

    createMiddleWare(StackdriverExporter())
  • La solicitud contiene una modificación más que no se requiere. En cambio, esta modificación es ilustrativa. En la aplicación, la respuesta a la ruta / incluye el encabezado 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}
    )

    El encabezado X-Cloud-Trace-Context es un encabezado HTTP que contiene información sobre el seguimiento actual, incluido el identificador de seguimiento. Para que diferentes servicios puedan agregar información de intervalo al mismo seguimiento, estos servicios deben poder identificar el identificador de seguimiento. De forma predeterminada, el paquete de OpenCensus incluye automáticamente este contexto en los encabezados de respuesta.

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. Configura el servicio c para que llame al servicio b y para que el servicio b llame al servicio a. 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 c en esta guía de inicio rápido, usaste el siguiente comando de curl:

curl $(kubectl get svc cloud-trace-demo-c -ojsonpath='{.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-c.
  2. Luego, el comando curl envía la solicitud HTTP al servicio c.
  3. El servicio c 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 a.
  5. El servicio a recibe la solicitud y muestra la string Hello. La string Hello es una palabra clave que se pasa como argumento predeterminado a este servicio.
  6. El servicio b recibe la respuesta del servicio a, agrega la string world y, luego, muestra Helloworld. La string world es una palabra clave pasada como un argumento predeterminado a este servicio.
  7. El servicio c recibe la respuesta del servicio b, agrega ! y, luego, muestra Helloworld!.
  8. La respuesta del servicio c 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 guía de inicio rápido.

  • Si creaste un proyecto de Google Cloud nuevo para esta guía de inicio rápido, borra el proyecto para dejar de acumular cargos. Para borrar tu proyecto, haz lo siguiente:

    1. En Google Cloud Console, haz clic en Menú de navegación y selecciona Página principal.
    2. En el panel Información del proyecto, haz clic en Ir a la configuración del proyecto.
    3. En la ventana Configuración, haz clic en Cerrar y completa los pasos restantes.
  • Si no creaste un proyecto nuevo de Google Cloud para esta guía de inicio rápido, borra el clúster de Google Kubernetes Engine llamado demo mediante la ejecución del siguiente comando:

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

Qué sigue