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 genera un seguimiento que se captura y se envía a tu proyecto de Google Cloud. Por último, utiliza 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 Selector 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 requiere entre 3 y 5 minutos para completarse. Después de que se complete con éxito, 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 que la creación se haya realizado correctamente, ejecuta el siguiente comando 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. Implementa la aplicación de muestra con el siguiente comando:

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

    La secuencia de comandos setup.sh, que forma parte de este proyecto, configura tres servicios diferentes, etiquetados como 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. 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
     

Cómo crear un seguimiento

Un seguimiento describe el tiempo que tarda una aplicación en completar una operación única. Cada seguimiento consta de uno o más intervalos. Un intervalo describe cuánto tiempo se tarda en realizar una operación secundaria. Por ejemplo, un seguimiento puede describir cuánto tiempo se tarda en 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 varios 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. Esta ventana muestra datos de latencia e información de resumen, 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 etiquetado como Seguimientos recientes:

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

En este panel, se enumeran los seguimientos más recientes y su latencia. Para ver los detalles de un seguimiento, haz clic en su vínculo.

Ventana de lista de seguimientos

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

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 de la tabla. En la captura de pantalla anterior, se enumeran 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 da como resultado que se abran dos paneles que muestran 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. En la tabla de detalles, se muestran los detalles del intervalo, como las etiquetas de seguimiento, los métodos y la información de resumen sobre la latencia del comando. Para ver los detalles de un intervalo, haz clic en la fila correspondiente en el gráfico de cascada. Observe que los intervalos son para tres direcciones IP diferentes. estos corresponden a las direcciones IP de los tres servicios. Desde este seguimiento, puedes ver que una solicitud HTTP recibida por el nombre de servicio cloud-trace-demo-c se pasa al servicio cloud-trace-demo-b y, luego, a cloud-trace-demo-a.

La tabla de detalles puede 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 generado por 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 Trace, haga 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 utilizada 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 se escribe 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 declaraciones de importación de la aplicación incluyen una declaración para Flask y para varios paquetes de OpenCensus. 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 configura con el método OpenCensus AlwaysOnSampler(). Este método muestra True para cada decisión de muestreo y garantiza que se realice el seguimiento del 100% de las solicitudes. No se recomienda el muestreo de 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 usa el StackdriverExporter():

    createMiddleWare(StackdriverExporter())
  • La aplicación contiene una modificación más que no es necesaria. 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, se hace referencia al servicio cloud-trace-demo-c como c.

Esta aplicación crea tres servicios llamados a, b y c. Configura el servicio c para llamar al servicio b y al servicio b que llama al servicio a. Para obtener detalles sobre la configuración de los servicios, consulta los archivos YAML en el repositorio de GitHub.

Cuando emites una solicitud HTTP para el servicio c en esta guía de inicio rápido, usaste el siguiente comando 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 llamado cloud-trace-demo-c.
  2. El comando curl luego 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 que se pasa como 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 a fin de 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