Observabilidad con Envoy

En este documento, se muestra cómo generar seguimiento y registro para el proxy Envoy. También se muestra cómo exportar la información a Cloud Trace y Cloud Logging.

El uso de una malla de servicios te permite observar el tráfico hacia los servicios, y desde ellos, lo que permite una mejor supervisión y depuración sin cambios de código en el servicio. En la arquitectura de proxy de sidecar que usa Cloud Service Mesh, el proxy es el componente que procesa las solicitudes y proporciona la información de telemetría necesaria. La información de telemetría debe ser se recopilan y almacenan en una ubicación centralizada para su uso posterior, como datos análisis, alertas y solución de problemas.

Configuración de demostración

En esta guía, se usa la siguiente configuración para demostrar el seguimiento y el registro:

  • Una sola aplicación que escucha en el puerto HTTP y muestra el nombre de host de la instancia de máquina virtual (VM) que entregó la solicitud. En el diagrama, esta aplicación se encuentra en la esquina superior derecha, con la etiqueta Servicios HTTP (10.10.10.10.80). Una o más VM pueden proporcionar este servicio.
  • Una sola VM de Compute Engine que ejecuta un consumidor de este servicio. En el diagrama, tiene la etiqueta VM de demostración de Compute Engine.
  • Un proxy de sidecar de Envoy instalado y configurado por Cloud Service Mesh. En el diagrama, tiene la etiqueta Envoy.
  • Una aplicación de consumidor de servicios, que se muestra en el cuadro de la izquierda, es el consumidor del servicio HTTP que se ejecuta en 10.10.10.10:80.
Aplicación de demostración de la supervisión y el registro de Envoy.
Aplicación de demostración de la supervisión y el registro para Envoy (haz clic para ampliar)

Los siguientes pasos corresponden a las etiquetas numeradas en el diagrama:

  1. Cloud Service Mesh configura el proxy de Envoy para que realice las siguientes acciones:

    • Balancear cargas de tráfico para el servicio 10.10.10.10:80
    • Almacenar información de registro de acceso para cada solicitud emitida para este servicio
    • Generar información de seguimiento para el servicio
  2. Después de que el consumidor envía una solicitud a 10.10.10.10, el proxy de sidecar enruta la solicitud al destino correcto.

  3. El proxy de sidecar también genera la información de telemetría necesaria:

    1. Agrega una entrada al registro de acceso en el disco local con información adicional sobre la solicitud.
    2. Genera una entrada de seguimiento y la envía a Trace mediante el seguimiento de OpenCensus de Envoy.
  4. El agente de registro exporta estos datos a la API de Cloud Logging para que estén disponibles en la interfaz de Cloud Logging.

Requisitos previos

Antes de completar los pasos de configuración, asegúrate de que se cumpla lo siguiente:

  1. La API de Traffic Director esté habilitada y se cumplan otros requisitos previos, como se describe en Prepárate para configurar con cargas de trabajo sin proxy y VM
  2. La API de Cloud Trace esté habilitada
  3. La cuenta de servicio que usa la VM de Compute Engine tenga configuradas los siguientes roles de Identity and Access Management (IAM):
  4. Las reglas de firewall permitan el tráfico a la VM que establezcas como parte de esta configuración

Configura el servicio de demostración y Cloud Service Mesh

En esta guía, se usan varias secuencias de comandos de shell para realizar los pasos necesarios a fin de configurar el servicio de demostración. Revisa las secuencias de comandos para comprender los pasos específicos que realizan.

  1. Inicia una VM de Compute Engine y configura el servicio HTTP en la VM.

    curl -sSO https://storage.googleapis.com/traffic-director/demo/observability/setup_demo_service.sh
    chmod 755 setup_demo_service.sh && ./setup_demo_service.sh
    

    La secuencia de comandos setup_demo_service.sh crea una plantilla de VM que inicia apache2 cuando se inicia una VM y un grupo de instancias administrado que usa esta plantilla. La secuencia de comandos inicia una instancia única sin el ajuste de escala automático habilitado.

  2. Usa Cloud Service Mesh para configurar el enrutamiento del servicio 10.10.10.10:

    curl -sSO https://storage.googleapis.com/traffic-director/demo/observability/setup_demo_trafficdirector.sh
    chmod 755 setup_demo_trafficdirector.sh && ./setup_demo_trafficdirector.sh
    

    La secuencia de comandos setup_demo_trafficdirector.sh configura los parámetros para el servicio administrado de Cloud Service Mesh.

  3. Inicia una VM de Compute Engine que ejecute un consumidor del servicio HTTP, con el proxy de sidecar instalado y configurado en la VM. En el siguiente comando, reemplaza PROJECT_ID por el ID del proyecto al que se debe enviar la información de Trace. Por lo general, este es el mismo proyecto de Google Cloud al que pertenece tu VM.

    curl -sSO https://storage.googleapis.com/traffic-director/demo/observability/setup_demo_client.sh
    chmod 755 setup_demo_client.sh && ./setup_demo_client.sh PROJECT_ID
    

    La secuencia de comandos setup_demo_client.sh crea una VM de Compute Engine que tiene un El proxy de Envoy está preconfigurado para usar Cloud Service Mesh.

La siguiente configuración adicional habilita el seguimiento y el registro:

Después de ejecutar estas secuencias de comandos, puedes acceder a la VM td-observability-demo-client y al servicio HTTP disponible en 10.10.10.10:

curl http://10.10.10.10

En este punto, Envoy genera información de registro de acceso y seguimiento. En la siguiente sección, se describe cómo exportar la información de seguimiento y registro.

Configura la exportación de seguimiento a Cloud Trace

La configuración de arranque de Envoy que creaste cuando ejecutaste la secuencia de comandos setup-demo-client.sh es suficiente para generar información de seguimiento. Todas las demás configuraciones son opcionales. Si deseas configurar parámetros adicionales, consulta la página de configuración de OpenCensus de Envoy y modifica las opciones de seguimiento en la configuración de arranque de Envoy.

Después de emitir una solicitud de muestra al servidor de demostración (curl 10.10.10.10), en la consola de Google Cloud, ve a la interfaz de Trace (Trace > Lista de seguimientos). Verás un registro de seguimiento que corresponde a la solicitud que emitiste.

Para obtener más información sobre cómo usar Trace, consulta la documentación de Cloud Trace.

Configura la exportación de registros de acceso a Logging

En esta etapa, Envoy debe registrar la información de registro de acceso en el disco local de la VM en la que se ejecuta. Para exportar estos registros a Logging, debes instalar el agente de Logging de forma local. Esto requiere que instales y configures el agente de Logging.

Instala el agente de Logging.

Instala el agente de Logging en la VM desde la que se exporta la información de registro. Para esta configuración de ejemplo, la VM es td-observability-demo-vm.

curl -sSO https://dl.google.com/cloudagents/add-logging-agent-repo.sh
sudo bash add-logging-agent-repo.sh --also-install

Para obtener más información, consulta Instala el agente de Cloud Logging en una sola VM.

Configurar el agente de Logging

Puedes exportar los registros de Envoy como texto estructurado o sin estructurar.

Exporta los registros de Envoy como texto sin estructurar

Con esta opción, se exportan los registros de acceso a Cloud Logging como texto sin procesar. Cada entrada en el registro de acceso se exporta como una única entrada a Logging. Esta configuración es más fácil de instalar porque se basa en un analizador que se distribuye con la versión actual del agente de Logging. Sin embargo, es más difícil filtrar y procesar entradas de registro de texto sin procesar cuando se usa esta opción.

  1. Descarga y, luego, instala el archivo de configuración de exportación sin estructurar del registro de acceso de Envoy.

    curl -sSO https://storage.googleapis.com/traffic-director/demo/observability/envoy_access_fluentd_unstructured.conf
    sudo cp envoy_access_fluentd_unstructured.conf /etc/google-fluentd/config.d/envoy_access.conf
    
  2. Reinicia el agente. Los cambios se aplicarán cuando se inicie el agente:

    sudo service google-fluentd restart
    

Exporta los registros de Envoy como texto estructurado

  1. Instala el analizador de registros de acceso de Envoy desde GitHub:

    sudo /opt/google-fluentd/embedded/bin/gem install fluent-plugin-envoy-parser
    
  2. Descarga y, luego, instala el archivo de configuración para exportar los registros de acceso de Envoy en un formato estructurado:

    curl -sSO https://storage.googleapis.com/traffic-director/demo/observability/envoy_access_fluentd_structured.conf
    sudo cp envoy_access_fluentd_structured.conf /etc/google-fluentd/config.d/envoy_access.conf
    
  3. Reinicia el agente. Los cambios se aplicarán cuando se inicie el agente:

    sudo service google-fluentd restart
    

Para obtener más información, consulta Configura el agente de Logging.

Verifica la configuración

  1. Desde la VM del proxy de sidecar, genera una solicitud para el servicio de demostración. Esto crea un nuevo registro local. Por ejemplo, puedes ejecutar curl 10.10.10.10:
  2. En la consola de Google Cloud, ve a Logging > Explorador de registros. En el menú desplegable, selecciona el tipo de registro envoy-access. Verás una entrada de registro para la solicitud más reciente en formato sin estructurar o estructurado, según el tipo de configuración que elegiste antes.

Soluciona problemas

Lee las siguientes secciones para obtener información sobre cómo solucionar problemas de problemas de observabilidad con Envoy.

Configura el seguimiento en varios proyectos

Si deseas realizar un seguimiento de las solicitudes en los Envoy que se implementaron en varios proyectos, ten en cuenta lo siguiente:

  • Cada Envoy debe configurarse con las credenciales del proyecto en el que se ejecuta.
  • Cada Envoy envía datos de seguimiento al proyecto que corresponde a las credenciales con las que se ejecuta.
  • Puedes ver intervalos de seguimiento para solicitudes entre proyectos si tus aplicaciones conservan el valor del encabezado HTTP X-Cloud-Trace-Context cuando se realizan solicitudes.

Compatibilidad de seguimiento con aplicaciones de gRPC sin proxy

La configuración del rastreador de OpenCensus de Envoy permite que los seguimientos exportados desde aplicaciones de gRPC sin proxy y proxies de Envoy sean totalmente compatibles dentro de una malla de servicios. Por compatibilidad, el arranque de Envoy debe configurar el contexto de seguimiento para incluir el formato de seguimiento GRPC_TRACE_BIN en su OpenCensusConfig, de la siguiente manera:

tracing:
  http:
      name: envoy.tracers.opencensus
      typed_config:
        "@type": type.googleapis.com/envoy.config.trace.v2.OpenCensusConfig
        stackdriver_exporter_enabled: "true"
        stackdriver_project_id: "PROJECT_ID"
        incoming_trace_context: ["CLOUD_TRACE_CONTEXT", "GRPC_TRACE_BIN"]
        outgoing_trace_context: ["CLOUD_TRACE_CONTEXT", "GRPC_TRACE_BIN"]

Si la configuración está completa, pero no ves las entradas de seguimiento o de registro disponible, verifica lo siguiente:

  1. Las cuentas de servicio para la VM de Compute Engine tienen los permisos necesarios de IAM de Trace y Logging, como se especifica en los requisitos previos. Para obtener más información sobre los permisos de IAM de Trace, consulta Control de acceso. Para obtener información sobre los permisos de Logging, consulta Control de acceso.
  2. Para Logging: asegúrate de que no haya errores en /var/log/google-fluentd/google-fluentd.log.
  3. Para Logging: asegúrate de que las entradas nuevas aparezcan en el archivo de registro de acceso local cuando se emiten solicitudes.

¿Qué sigue?