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 recopilarse y almacenarse en una ubicación centralizada para su uso posterior, como el análisis de datos, las alertas y la 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
.
Los siguientes pasos corresponden a las etiquetas numeradas en el diagrama:
Cloud Service Mesh configura el proxy de Envoy para realizar 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
- Balancear cargas de tráfico para el servicio
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.El proxy de sidecar también genera la información de telemetría necesaria:
- Agrega una entrada al registro de acceso en el disco local con información adicional sobre la solicitud.
- Genera una entrada de seguimiento y la envía a Trace mediante el seguimiento de OpenCensus de Envoy.
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:
- 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
- La API de Cloud Trace esté habilitada
- La cuenta de servicio que usa la VM de Compute Engine tenga configuradas los siguientes roles de Identity and Access Management (IAM):
- Rol del agente de Cloud Trace (
roles/cloudtrace.agent
) - Rol de escritor de registros (
roles/logging.logWriter
)
- Rol del agente de Cloud Trace (
- 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.
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.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 administrado de Cloud Service Mesh.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 proxy de Envoy preconfigurado para usar Cloud Service Mesh.
La siguiente configuración adicional habilita el seguimiento y el registro:
- Las variables de metadatos del nodo de arranque
TRAFFICDIRECTOR_ACCESS_LOG_PATH
yTRAFFICDIRECTOR_ENABLE_TRACING
habilitan el registro y el seguimiento, como se describe en Configura los atributos de arranque de Envoy para la malla de servicios de Cloud. - La configuración de arranque estático permite exportar la información de seguimiento a Trace mediante OpenCensus.
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.
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
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
Instala el analizador de registros de acceso de Envoy desde GitHub.
sudo /opt/google-fluentd/embedded/bin/gem install fluent-plugin-envoy-parser
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
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
- 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
: - 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 diferentes 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 registro o seguimiento disponibles, verifica lo siguiente:
- 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.
- Para Logging: asegúrate de que no haya errores en
/var/log/google-fluentd/google-fluentd.log
. - Para Logging: asegúrate de que las entradas nuevas aparezcan en el archivo de registro de acceso local cuando se emiten solicitudes.
¿Qué sigue?
- Para encontrar información relacionada, consulta Observabilidad con aplicaciones de gRPC sin proxy.
- Para obtener información general sobre la solución de problemas de Cloud Service Mesh, consulta Soluciona problemas de implementaciones que usan Envoy.