Esta página se aplica a Apigee y Apigee Hybrid.
Consulta la documentación de
Apigee Edge.
En esta página se describen los pasos necesarios para configurar el rastreo distribuido en tu tiempo de ejecución de Apigee. Si no tienes experiencia con los sistemas de seguimiento distribuido y quieres obtener más información, consulta el artículo Información sobre el seguimiento distribuido.
Introducción
Los sistemas de análisis de trazas distribuidas te permiten monitorizar una solicitud en un sistema de software distribuido en varias aplicaciones, servicios y bases de datos, así como intermediarios como proxies. Estos sistemas de seguimiento generan informes que muestran el tiempo que tarda una solicitud en cada paso. Los informes de seguimiento también pueden proporcionar una vista detallada de los distintos servicios a los que se llama durante una solicitud, lo que permite comprender mejor lo que ocurre en cada paso del sistema de software.
La herramienta de seguimiento de Apigee Edge y la herramienta de depuración de Apigee son útiles para solucionar problemas y monitorizar tus proxies de API. Sin embargo, estas herramientas no envían datos a servidores de seguimiento distribuido, como Cloud Trace o Jaeger. Para ver los datos del tiempo de ejecución de Apigee en un informe de seguimiento distribuido, debes habilitar explícitamente el seguimiento distribuido en tu tiempo de ejecución de Apigee. Una vez que se ha habilitado el análisis de trazas, el tiempo de ejecución puede enviar datos de trazas a los servidores de análisis de trazas distribuidas y participar en una traza ya existente. De esta forma, puede ver datos de dentro y fuera de su ecosistema de Apigee desde una sola ubicación.
En los informes de seguimiento distribuido, puede consultar la siguiente información:
- Tiempo de ejecución de todo un flujo.
- Hora a la que se recibe la solicitud.
- Hora a la que se envía la solicitud al destino.
- Hora a la que se recibe la respuesta del destino.
- Tiempo de ejecución de cada política de un flujo.
- Tiempo de ejecución de las llamadas de servicio y los flujos de destino.
- Hora a la que se envía la respuesta al cliente.
En el informe de seguimiento distribuido, puede ver los detalles de ejecución de los flujos como spans. Un intervalo hace referencia al tiempo que tarda un flujo en una traza. El tiempo necesario para ejecutar un flujo se muestra como la suma del tiempo necesario para ejecutar cada política del flujo. Puedes ver cada uno de los siguientes flujos como intervalos individuales:
- Solicitar
- Proxy
- Preflow
- PostFlow
- Objetivo
- Preflow
- PostFlow
- Proxy
- Respuesta
- Proxy
- Preflow
- PostFlow
- Objetivo
- Preflow
- PostFlow
- Proxy
Una vez que habilites el rastreo distribuido, el tiempo de ejecución de Apigee rastreará un conjunto de variables predefinidas de forma predeterminada. Para obtener más información, consulta Variables de seguimiento predeterminadas en el informe de seguimiento. Puedes usar la política TraceCapture para ampliar el comportamiento predeterminado del tiempo de ejecución y rastrear variables de flujo, de política o personalizadas adicionales. Para obtener más información, consulta la política de TraceCapture.
Variables de seguimiento predeterminadas en el informe de seguimiento
Una vez que se haya habilitado el rastreo distribuido, podrá ver el siguiente conjunto de variables predefinidas en el informe de rastreo. Las variables se pueden ver en los siguientes intervalos:
- POST_RESP_SENT: este intervalo se añade después de recibir una respuesta del servidor de destino.
- POST_CLIENT_RESP_SENT: este intervalo se añade después de que se envíe la respuesta del proxy al cliente.
Variables en el intervalo POST_RESP_SENT
Las siguientes variables se pueden ver en el intervaloPOST_RESP_SENT
:
- REQUEST_URL (request.url)
- REQUEST_VERB (request.verb)
- RESPONSE_STATUS_CODE (response.status.code)
- ROUTE_NAME (route.name)
- ROUTE_TARGET (route.target)
- TARGET_BASE_PATH (target.basepath)
- TARGET_HOST (target.host)
- TARGET_IP (target.ip)
- TARGET_NAME (target.name)
- TARGET_PORT (target.port)
- TARGET_RECEIVED_END_TIMESTAMP (target.received.end.timestamp)
- TARGET_RECEIVED_START_TIMESTAMP (target.received.start.timestamp)
- TARGET_SENT_END_TIMESTAMP (target.sent.end.timestamp)
- TARGET_SENT_START_TIMESTAMP (target.sent.start.timestamp)
- TARGET_SSL_ENABLED (target.ssl.enabled)
- TARGET_URL (target.url)
Variables en el intervalo POST_CLIENT_RESP_SENT
Las siguientes variables se pueden ver en el intervaloPOST_CLIENT_RESP_SENT
:
- API_PROXY_REVISION (apiproxy.revision)
- APIPROXY_NAME (apiproxy.name)
- CLIENT_RECEIVED_END_TIMESTAMP (client.received.end.timestamp)
- CLIENT_RECEIVED_START_TIMESTAMP (client.received.start.timestamp)
- CLIENT_SENT_END_TIMESTAMP (client.sent.end.timestamp)
- CLIENT_SENT_START_TIMESTAMP (client.sent.start.timestamp)
- ENVIRONMENT_NAME (environment.name)
- FAULT_SOURCE (message.header + InternalHeaders.FAULT_SOURCE)
- ESERROR (is.error)
- MESSAGE_ID (message.id)
- MESSAGE_STATUS_CODE (message.status.code)
- PROXY_BASE_PATH (proxy.basepath)
- PROXY_CLIENT_IP (proxy.client.ip)
- PROXY_NAME (proxy.name)
- PROXY_PATH_SUFFIX (proxy.pathsuffix)
- PROXY_URL (proxy.url)
Sistemas de análisis de trazas distribuidas admitidos
El tiempo de ejecución de Apigee admite los siguientes sistemas de seguimiento distribuido:
- Cloud Trace
- Jaeger
Puede configurar su tiempo de ejecución de Apigee para que envíe datos de seguimiento a un sistema Cloud Trace o Jaeger.
Como el seguimiento de todas las llamadas a la API en el tiempo de ejecución de Apigee afectaría al rendimiento, Apigee te permite configurar una tasa de muestreo probabilística.
Con la frecuencia de muestreo, puede especificar el número de llamadas a la API que se envían para el rastreo distribuido. Por ejemplo, si especifica la frecuencia de muestreo como 0.4
, significa que el 40% de las llamadas a la API se envían para el seguimiento. Para obtener más información, consulta Consideraciones sobre el rendimiento.
Configurar tiempos de ejecución de Apigee para Cloud Trace
Tanto el entorno de ejecución de Apigee como el entorno de ejecución híbrido de Apigee admiten el rastreo distribuido mediante Cloud Trace. Si usas Jaeger, puedes saltarte esta sección y pasar a Habilitar el rastreo distribuido para Jaeger.
Configurar el tiempo de ejecución de Apigee para Cloud Trace
Para usar Cloud Trace con un entorno de ejecución de Apigee, tu proyecto de Google Cloud debe tener habilitada la API Cloud Trace. Esta opción permite que tu proyecto de Google Cloud reciba datos de trazas de fuentes autenticadas.
Para confirmar que la API Cloud Trace está habilitada, haz lo siguiente:
- En la consola de Google Cloud, ve a APIs y servicios:
- Haz clic en Habilitar APIs y servicios.
- En la barra de búsqueda, escribe API Trace.
- Si se muestra el mensaje API habilitada, significa que esta API ya está habilitada y no tienes que hacer nada. De lo contrario, haz clic en Habilitar.
Configurar el entorno de ejecución de Apigee Hybrid para Cloud Trace
La API Cloud Trace debe estar habilitada para usar Cloud Trace con un entorno de ejecución híbrido de Apigee. Para confirmar que la API Cloud Trace está habilitada, sigue los pasos que se indican en el artículo sobre cómo configurar el tiempo de ejecución de Apigee para Cloud Trace.
Además de habilitar la API Cloud Trace, debe añadir la cuenta de servicio iam.gserviceaccount.com
para usar Cloud Trace con el tiempo de ejecución híbrido. Para añadir la cuenta de servicio, junto con los roles y las claves necesarios, sigue estos pasos:
- Crea una cuenta de servicio:
gcloud iam service-accounts create \ apigee-runtime --display-name "Service Account Apigee hybrid runtime" \ --project PROJECT_ID
- Añade una vinculación de política de gestión de identidades y accesos a la cuenta de servicio:
gcloud projects add-iam-policy-binding \ PROJECT_ID --member "serviceAccount:apigee-runtime@PROJECT_ID.iam.gserviceaccount.com" \ --role=roles/cloudtrace.agent --project PROJECT_ID
- Crea una clave de cuenta de servicio:
gcloud iam service-accounts keys \ create ~/apigee-runtime.json --iam-account apigee-runtime@PROJECT_ID.iam.gserviceaccount.com
- Añade la cuenta de servicio al archivo
overrides.yaml
. - Aplica los cambios al tiempo de ejecución con Helm:
helm upgrade ENV_NAME apigee-env/ \ --namespace APIGEE_NAMESPACE \ --set env=ENV_NAME \ --atomic \ -f overrides.yaml
envs: - name: ENV_NAME serviceAccountPaths: runtime: apigee-runtime.json synchronizer: apigee-sync.json udca: apigee-udca.json
Habilitar el análisis de trazas
Antes de habilitar el rastreo distribuido para Cloud Trace o Jaeger, crea las siguientes variables de entorno:
TOKEN
="Authorization: Bearer $(gcloud auth print-access-token)
"
ENV_NAME
=YOUR_ENVIRONMENT_NAME
PROJECT_ID
=YOUR_GOOGLE_CLOUD_PROJECT_ID
Donde:
TOKEN
define el encabezado de autenticación con un token de portador. Utiliza este encabezado cuando llames a las APIs de Apigee. Para obtener más información, consulta la página de referencia del comando print-access-token.ENV_NAME
es el nombre de un entorno de tu organización.PROJECT_ID
es el ID de tu proyecto de Google Cloud.
Habilitar el análisis de trazas para Cloud Trace
En el siguiente ejemplo se muestra cómo habilitar el rastreo distribuido de Cloud Trace:
- Ejecuta esta llamada a la API de Apigee:
curl -H "$TOKEN" \ -H "Content-Type: application/json" \ https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/environments/$ENV_NAME/traceConfig \ -X PATCH \ -d '{"exporter":"CLOUD_TRACE","endpoint": "'"$PROJECT_ID"'", "samplingConfig": {"sampler": "PROBABILITY","samplingRate": 0.1}}'
El cuerpo de la solicitud de ejemplo consta de los siguientes elementos:
- El valor de
samplingRate
es 0,1. Esto significa que aproximadamente el 10% de las llamadas a la API se envían al seguimiento distribuido. Para obtener más información sobre cómo definir unsamplingRate
para tu entorno de tiempo de ejecución, consulta Consideraciones sobre el rendimiento. - El parámetro
exporter
tiene el valorCLOUD_TRACE
. - El endpoint se define en el proyecto de Google Cloud al que quieres enviar el rastreo. NOTA: Debe coincidir con la cuenta de servicio que se ha creado en el paso de configuración.
Una respuesta correcta tiene un aspecto similar al siguiente:
{ "exporter": "CLOUD_TRACE", "endpoint": "staging", "samplingConfig": { "sampler": "PROBABILITY", "samplingRate": 0.1 } }
- El valor de
Habilitar el análisis de trazas distribuido para Jaeger
En el siguiente ejemplo se muestra cómo habilitar el rastreo distribuido de Jaeger:
curl -s -H "$TOKEN" \ 'https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/environments/$ENV_NAME/traceConfig' \ -X PATCH \ -H "content-type:application/json" -d '{ "samplingConfig": { "samplingRate": 0.4, "sampler": "PROBABILITY"}, "endpoint": "http://DOMAIN:9411/api/v2/spans", "exporter": "JAEGER" }'
En este ejemplo:
- El valor de
samplingRate
es 0,4. Esto significa que aproximadamente el 40% de las llamadas a la API se envían al rastreo distribuido. - El parámetro
exporter
tiene el valorJAEGER
. - El endpoint se define en la ubicación donde se ha instalado y configurado Jaeger.
Cuando ejecutes el comando, verás una respuesta similar a la siguiente:
{ "exporter": "JAEGER", "endpoint": "staging", "samplingConfig": { "sampler": "PROBABILITY", "samplingRate": 0.4 } }
Ver la configuración del análisis de trazas distribuido
Para ver la configuración de seguimiento distribuido que ya tienes en tu tiempo de ejecución, inicia sesión en él y ejecuta el siguiente comando:
curl -H "$TOKEN" \ -H "Content-Type: application/json" \ https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/environments/$ENV_NAME/traceConfig
Cuando ejecutes el comando, verás una respuesta similar a la siguiente:
{ "exporter": "CLOUD_TRACE", "endpoint": "staging", "samplingConfig": { "sampler": "PROBABILITY", "samplingRate": 0.1 } }
Actualizar la configuración del análisis de trazas distribuido
El siguiente comando muestra cómo actualizar la configuración de seguimiento distribuido de Cloud Trace:
curl -s \ -H "$TOKEN" \ 'https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/environments/$ENV_NAME/traceConfig?updateMask=endpoint,samplingConfig,exporter' \ -X PATCH -H "content-type:application/json" \ -d '{"samplingConfig": {"samplingRate": 0.05, "sampler":"PROBABILITY"}, "endpoint":"staging", exporter:"CLOUD_TRACE"}'
Cuando ejecutes el comando, verás una respuesta similar a la siguiente:
{ "exporter": "CLOUD_TRACE", "endpoint": "staging", "samplingConfig": { "sampler": "PROBABILITY", "samplingRate": 0.05 } }
0.05
.
Inhabilitar la configuración del análisis de trazas distribuido
En el siguiente ejemplo se muestra cómo inhabilitar el rastreo distribuido configurado para Cloud Trace:
curl -H "$TOKEN" \ -H "Content-Type: application/json" \ https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/environments/$ENV_NAME/traceConfig \ -X PATCH -d '{"exporter": "CLOUD_TRACE","endpoint": "'"$PROJECT_ID"'","samplingConfig": {"sampler": "OFF","samplingRate": 0.1}}'
Cuando ejecutes el comando, verás una respuesta similar a la siguiente:
{ "exporter": "CLOUD_TRACE", "endpoint": "staging", "samplingConfig": { "sampler": "OFF", "samplingRate": 0.1 } }
Anular la configuración de seguimiento de los proxies de API
Cuando habilitas el rastreo distribuido en tu tiempo de ejecución de Apigee, todos los proxies de API del tiempo de ejecución usan la misma configuración para el rastreo. Sin embargo, puedes anular la configuración del rastreo distribuido de un proxy de API o de un grupo de proxies de API. De esta forma, tendrás un control más detallado sobre la configuración del seguimiento.
En el siguiente ejemplo se anula la configuración del rastreo distribuido del proxy de API hello-world
:
curl -s -H "$TOKEN" \ 'https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/environments/ENV_NAME/traceConfig/overrides' \ -X POST \ -H "content-type:application/json" \ -d '{"apiProxy": "hello-world","samplingConfig": {"sampler": "PROBABILITY","samplingRate": 0.1}}'
Puedes anular la configuración para solucionar problemas específicos de un proxy de API sin tener que cambiar la configuración de todos los proxies de API.
Actualizar las anulaciones de la configuración de seguimiento
Para actualizar una anulación de la configuración de seguimiento de un proxy de API o un grupo de proxies de API, sigue estos pasos:
- Usa el siguiente comando para obtener las anulaciones de la configuración de seguimiento que haya:
curl -s -H "$TOKEN" \ 'https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/environments/$ENV_NAME/traceConfig/overrides' \ -X GET
Este comando debería devolver una respuesta similar a la siguiente, que contiene un campo "name" que identifica el proxy o los proxies regidos por la anulación:
{ "traceConfigOverrides": [ { "name": "dc8437ea-4faa-4b57-a14f-4b8d3a15fec1", "apiProxy": "proxy1", "samplingConfig": { "sampler": "PROBABILITY", "samplingRate": 0.25 } } ] }
- Para actualizar el proxy, usa el valor del campo "name" para enviar una solicitud POST a la configuración de anulación de ese proxy,junto con los valores de los campos actualizados. Por ejemplo:
curl -s -H "$TOKEN" \ 'https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/environments/$ENV_NAME/traceConfig/overrides/dc8437ea-4faa-4b57-a14f-4b8d3a15fec1' \ -X POST \ -H "content-type:application/json" \ -d '{"apiProxy": "proxy1","samplingConfig": {"sampler": "PROBABILITY","samplingRate": 0.05}}'
Eliminar anulaciones de configuración de trazas
Para eliminar una anulación de la configuración de seguimiento de un proxy de API o de un grupo de proxies de API, sigue estos pasos:
- Usa el siguiente comando para obtener las anulaciones de la configuración de seguimiento que haya:
curl -s -H "$TOKEN" \ 'https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/environments/$ENV_NAME/traceConfig/overrides' \ -X GET
Este comando debería devolver una respuesta similar a la siguiente, que contiene un campo "name" que identifica el proxy o los proxies regidos por la anulación:
{ "traceConfigOverrides": [ { "name": "dc8437ea-4faa-4b57-a14f-4b8d3a15fec1", "apiProxy": "proxy1", "samplingConfig": { "sampler": "PROBABILITY", "samplingRate": 0.25 } } ] }
- Para eliminar el proxy, usa el valor del campo "name" para enviar una solicitud DELETE a la configuración de anulación de ese proxy,junto con los valores de campo actualizados. Por ejemplo:
curl -s -H "$TOKEN" \ 'https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/environments/$ENV_NAME/traceConfig/overrides/dc8437ea-4faa-4b57-a14f-4b8d3a15fec1' \ -X DELETE \
Consideraciones sobre el rendimiento.
Si habilitas el rastreo distribuido en un entorno de ejecución de Apigee, se espera que el rendimiento se vea afectado. El impacto puede traducirse en un aumento del uso de memoria, de los requisitos de CPU y de la latencia.
La magnitud del impacto dependerá en parte de la complejidad del proxy de API (por ejemplo, del número de políticas) y de la tasa de muestreo probabilística (definida como samplingRate
). Cuanto mayor sea la tasa de muestreo, mayor será el impacto en el rendimiento.
Aunque el impacto en el rendimiento depende de varios factores, puedes esperar una reducción del rendimiento del 10-20% al usar el rastreo distribuido.
En entornos con mucho tráfico y requisitos de baja latencia, la tasa de muestreo probabilístico recomendada es inferior o igual al 10%. Si quieres usar el rastreo distribuido para solucionar problemas, considera la posibilidad de aumentar el muestreo probabilístico (samplingRate
) solo en proxies de API específicos.