Observabilidad con Envoy

En este documento se muestra cómo generar registros y seguimientos del proxy de Envoy. También se explica cómo exportar la información a Cloud Trace y Cloud Logging.

Una malla de servicios te permite observar el tráfico hacia y desde los servicios, lo que te ofrece una monitorización y depuración más completas sin necesidad de cambiar el código del servicio. En la arquitectura de proxy 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 recogerse y almacenarse en una ubicación centralizada para poder utilizarla más adelante, por ejemplo, para analizar datos, enviar alertas y solucionar problemas.

Configuración de la demostración

En este documento se usa la siguiente configuración para mostrar el seguimiento y el registro:

  • Una sola aplicación que escucha en el puerto HTTP y devuelve el nombre de host de la instancia de máquina virtual (VM) que ha atendido la solicitud. En el diagrama, esta aplicación se encuentra en la esquina superior derecha y se llama Servicios HTTP (10.10.10.10:80). Una o varias VMs pueden proporcionar este servicio.
  • Una sola máquina virtual de Compute Engine que ejecute un consumidor de este servicio. En el diagrama, se denomina Demo Compute Engine VM (Máquina virtual de demostración de Compute Engine).
  • Un proxy sidecar de Envoy instalado y configurado por Cloud Service Mesh. En el diagrama, se denomina 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 para el registro y la monitorización de Envoy.
Aplicación de demostración para el registro y la monitorización de Envoy (haz clic en la imagen para ampliarla)

Los pasos siguientes corresponden a las etiquetas numeradas del diagrama:

  1. Cloud Service Mesh configura el proxy Envoy para que haga lo siguiente:

    • Equilibra la carga del tráfico del servicio 10.10.10.10:80.
    • Almacena información del registro de acceso de cada solicitud emitida para este servicio.
    • Genera información de seguimiento del servicio.
  2. Una vez que el consumidor envía una solicitud a 10.10.10.10, el proxy sidecar dirige la solicitud al destino correcto.

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

    1. Añade una entrada al registro de acceso del disco local con información adicional sobre la solicitud.
    2. Genera una entrada de traza y la envía a Trace mediante el seguimiento de OpenCensus Envoy.
  4. El agente de Logging 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 cumplen los siguientes requisitos:

  1. La API de Traffic Director está habilitada y se cumplen otros requisitos previos, tal como se describe en el artículo Prepararse para configurar con cargas de trabajo de máquinas virtuales y sin proxy.
  2. La API Cloud Trace está habilitada.
  3. La cuenta de servicio que usa la VM de Compute Engine tiene configurados los siguientes roles de gestión de identidades y accesos (IAM):
  4. Las reglas de cortafuegos permiten el tráfico a la VM que configures como parte de esta configuración.

Configurar el servicio de demostración y Cloud Service Mesh

En este documento se usan varias secuencias de comandos shell para llevar a cabo los pasos necesarios para configurar el servicio de demostración. Revisa las secuencias de comandos para entender 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 gestionadas que usa esta plantilla. La secuencia de comandos inicia una sola instancia sin el autoescalado 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 necesarios para el servicio gestionado de Cloud Service Mesh.

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

    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 proxy de Envoy preconfigurado para usar Cloud Service Mesh.

Los siguientes ajustes de configuración adicionales habilitan el seguimiento y el registro:

  • Las variables de metadatos de nodos de arranque TRAFFICDIRECTOR_ACCESS_LOG_PATH y TRAFFICDIRECTOR_ENABLE_TRACING permiten el registro y el seguimiento, tal como se describe en Configurar atributos de arranque de Envoy para Cloud Service Mesh.
  • La configuración de arranque estático permite exportar información de trazas a Trace mediante OpenCensus.

Después de ejecutar estas secuencias de comandos, puedes iniciar sesión en la VM td-observability-demo-client y acceder 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 de seguimiento. En la siguiente sección se describe cómo exportar registros e información de seguimiento.

Configurar la exportación de trazas a Cloud Trace

La configuración de arranque de Envoy que creaste al ejecutar la secuencia de comandos setup-demo-client.sh es suficiente para generar información de seguimiento. El resto de la configuración es opcional. Si quieres configurar parámetros adicionales, consulta la página de configuración de OpenCensus Envoy y modifica las opciones de seguimiento en la configuración de arranque de Envoy.

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

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

Configurar la exportación de registros de acceso a Logging

En esta fase, Envoy debería registrar la información del registro de acceso en el disco local de la VM en la que se está ejecutando. Para exportar estos registros a Logging, debe instalar el agente de Logging de forma local. Para ello, debes instalar y configurar el agente de Logging.

Instalar el agente de Logging

Instala el agente de Logging en la VM desde la que se exporta la información de registro. En este ejemplo de configuración, 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 el artículo sobre cómo instalar el agente de Cloud Logging en una sola máquina virtual.

Configurar el agente de Logging

Puedes exportar los registros de Envoy como texto estructurado o no estructurado.

Exportar los registros de Envoy como texto sin estructurar

Esta opción exporta registros del registro de acceso a Cloud Logging como texto sin formato. Cada entrada del registro de acceso se exporta como una sola 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 las entradas de registro de texto sin formato cuando se usa esta opción.

  1. Descarga e instala el archivo de configuración de exportación no estructurada de los registros 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
    

Exportar 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 e 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 el artículo sobre cómo configurar el agente de Logging.

Verificar la configuración

  1. Desde la VM proxy sidecar, genera una solicitud al servicio de demostración. De esta forma, se crea un nuevo registro de registro local. Por ejemplo, puedes ejecutar curl 10.10.10.10.
  2. En la Google Cloud consola, ve a Logging > Explorador de registros. En el menú desplegable, selecciona el tipo de registro envoy-access. Verá una entrada de registro de la solicitud más reciente en formato no estructurado o estructurado, en función del tipo de configuración que haya elegido anteriormente.

Solución de problemas

En las siguientes secciones se explica cómo solucionar diferentes problemas de observabilidad con Envoy.

Configurar el seguimiento en varios proyectos

Si quieres monitorizar solicitudes en varios proyectos en los que se ha implementado Envoy, 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 traza al proyecto que corresponde a las credenciales con las que se está ejecutando.
  • Puedes ver los intervalos de seguimiento de las solicitudes entre proyectos si tus aplicaciones conservan el valor del encabezado HTTP X-Cloud-Trace-Context cuando se realizan las solicitudes.

Compatibilidad de los rastreos con aplicaciones gRPC sin proxy

La configuración del tracer de OpenCensus de Envoy permite que las trazas exportadas desde aplicaciones gRPC sin proxy y proxies de Envoy sean totalmente compatibles en una malla de servicios. Para que sea compatible, el bootstrap de Envoy debe configurar el contexto de la traza para incluir el formato de traza 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 se ha completado, pero no ves entradas de registro o de seguimiento, comprueba lo siguiente:

  1. Las cuentas de servicio de la VM de Compute Engine tienen los permisos de gestión de identidades y accesos de Trace y Logging necesarios, tal como se especifica en los requisitos previos. Para obtener información sobre los permisos de gestión de identidades y accesos de Trace, consulta el artículo Control de acceso. Para obtener información sobre los permisos de registro, consulta Control de acceso.
  2. En cuanto al registro, asegúrate de que no haya errores en /var/log/google-fluentd/google-fluentd.log.
  3. Registros: asegúrate de que aparezcan entradas nuevas en el archivo de registro de acceso local cuando se emitan solicitudes.

Siguientes pasos