Usa Cloud Trace con Zipkin

En esta página, se describe cómo usar un servidor Zipkin para recibir seguimientos de clientes Zipkin y reenviar esos seguimientos a Cloud Trace para analizarlos.

Se recomienda usar un servidor Zipkin si tu aplicación está instrumentada con Zipkin y no deseas ejecutar tu propio backend de seguimiento o deseas acceder a las herramientas de análisis avanzado de Cloud Trace.

En esta página, se describen varias formas de configurar tu servidor Zipkin:

Cómo usar una imagen de contenedor para configurar el servidor

Una imagen de contenedor del colector Zipkin de Cloud Trace está disponible en GitHub. Este repositorio contiene la definición y las capas de compilación de Docker que admite Google Cloud en la imagen base de Docker para Zipkin, además de los pasos de configuración detallados.

Puedes ejecutar esta imagen en el host de contenedor que prefieras, incluido Google Kubernetes Engine.

Para ejecutar la imagen:

$ docker run -d -p 9411:9411 \
-e STORAGE_TYPE=stackdriver \
-e GOOGLE_APPLICATION_CREDENTIALS=/root/.gcp/credentials.json \
-e STACKDRIVER_PROJECT_ID=your_project \
-v $HOME/.gcp:/root/.gcp:ro \
openzipkin/zipkin-gcp

Si estás ejecutando este contenedor dentro de Google Cloud, como en una instancia de Compute Engine o un clúster de Google Kubernetes Engine, las credenciales predeterminadas del entorno se capturan automáticamente y los seguimientos se envían automáticamente a Cloud Trace.

Para ver el proceso de configuración completo, ve al repositorio de GitHub de la imagen de Zipkin de Docker.

Como se describe en esta página, también debes configurar los rastreadores de Zipkin.

Ejecuta tu servidor fuera de Google Cloud

Si deseas compilar y ejecutar el colector fuera de Google Cloud, como en un servidor físico que se ejecuta de forma local, completa los siguientes pasos:

Crea o selecciona un proyecto

  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

No se requiere una cuenta de facturación porque el colector no se está ejecutando en Google Cloud.

Crea una cuenta de servicio

Para permitir que tu servicio se autentique en la API de Cloud Trace, haz lo siguiente:

  1. Crea una cuenta de servicio.
    1. Asegúrate de que se haya concedido una función de editor del proyecto a la cuenta de servicio nueva, de manera que pueda escribir datos en la API de Trace.
    2. Selecciona Proporcionar una clave privada nueva y elige JSON.
    3. Guarda el archivo de credenciales de JSON en un directorio de la máquina que ejecute el servicio de recopilación.

Configura el firewall

Configura los ajustes de red con el fin de permitir el tráfico de TCP en el puerto 9411 para pasar a la máquina que ejecuta el recopilador Zipkin.

Si tus aplicaciones están alojadas fuera del firewall, ten en cuenta que el tráfico del rastreador de colector Zipkin no está encriptado o autenticado. Las conexiones entre el colector Zipkin de Cloud Trace y la API de Cloud Trace están encriptadas y autenticadas, así como lo están las conexiones que se originan en las bibliotecas de instrumentación de Cloud Trace.

Configura el servidor con la imagen de contenedor

Para obtener más información, consulta Usa una imagen de contenedor.

Configura los rastreadores Zipkin

Sigue las instrucciones de la sección Configura rastreadores de Zipkin de esta página.

Cómo modificar un servidor Zipkin existente

El proyecto Zipkin mantiene instrucciones sobre cómo usar Cloud Trace como un destino de almacenamiento para un servidor Zipkin existente. Estas instrucciones están disponibles en el repositorio de GitHub para la imagen de Docker de Zipkin.

Cómo configurar los rastreadores Zipkin

Independientemente de cómo alojes el colector Zipkin de Cloud Trace, debes configurar tus rastreadores Zipkin para enviarle datos.

Para hacer referencia al colector, usa su dirección IP interna, la dirección IP externa (si recibe seguimientos de aplicaciones alojadas fuera de Google Cloud) o el nombre de host. Cada rastreador Zipkin se configura de diferentes maneras; por ejemplo, para dirigir un rastreador Brave hacia un recopilador con la dirección IP 1.2.3.4, se deben agregar las siguientes líneas a la base de código Java:

    Reporter reporter = AsyncReporter.builder(OkHttpSender.create("1.2.3.4:9411/api/v1/spans")).build();
    Brave brave = Brave.Builder("example").reporter(reporter).build()

Preguntas frecuentes

P: ¿Qué limitaciones tiene?

Esta versión tiene dos limitaciones conocidas:

  1. Los rastreadores Zipkin deben admitir la semántica de Zipkin correcta para tiempo y duración. Para obtener más información, ve a Instrumenta una biblioteca y desplázate hacia abajo hasta la sección Marcas de tiempo y duración.

  2. Los rastreadores Zipkin y las bibliotecas de instrumentación de Cloud Trace no pueden agregar intervalos a los mismos seguimientos porque utilizan diferentes formatos para propagar el contexto de seguimiento entre los servicios. El resultado es que los seguimientos que captura una biblioteca no contienen intervalos para servicios instrumentados por la otra biblioteca.

    Por este motivo, recomendamos que los proyectos que deseen usar Cloud Trace usen exclusivamente los rastreadores compatibles con Zipkin junto con el colector Zipkin o usan bibliotecas de instrumentación que funcionan con Cloud Trace. Para obtener más información sobre las bibliotecas de Cloud Trace, consulta Node.js, Java y Go.

    Por ejemplo:

    Ilustración de las limitaciones del intervalo.

    Las solicitudes realizadas a la aplicación web de Node.js se rastrean con la biblioteca Zipkin y se envían a Cloud Trace. Sin embargo, estos seguimientos no contienen intervalos generados por la aplicación de la API de ASP.NET. Los seguimientos capturados por la biblioteca de Zipkin tampoco contienen intervalos para las llamadas RPC que la aplicación a la API de APS.NET hace en su base de datos MySQL.

P: ¿Esta característica funciona como un servidor Zipkin completo?

No, esta característica solo escribe datos en Cloud Trace.