apigeectl diagnostic
.
¿Qué datos del sistema se capturan?
El colector de diagnóstico captura los siguientes tipos de datos:
- Niveles de registro que cambian.
- Jstack.
- YAML de configuración de POD.
- Resultado PS -ef.
- Volcado TCP
- Resultado TOP
¿Qué sucederá con los datos?
Cuando el colector de diagnóstico captura los datos, se suben a un bucket de almacenamiento en tu proyecto de Google Cloud. Puedes ver los datos almacenados en el navegador de Google Cloud Platform: Cloud Storage.
De forma opcional, puedes elegir compartir estos datos con el equipo de asistencia de Apigee de Google cuando crees un ticket de asistencia.
Requisitos previos para ejecutar el colector de diagnóstico
Antes de usar el colector de diagnóstico, debes cumplir con los siguientes requisitos previos:
Bucket de Google Cloud Storage
Cree un bucket de Google Cloud Storage con un nombre único en su proyecto de Google Cloud. Puedes crear y administrar bucket con los comandos de gcloud storage
o en Google Cloud Platform: el navegador de Cloud Storage.
Por ejemplo:
gcloud storage buckets create gs://apigee_diagnostic_data
Creating gs://apigee_diagnostic_data/...
Consulta Crea buckets de almacenamiento para obtener instrucciones.
Cuenta de servicio
Crea una cuenta de servicio con el rol Administrador de almacenamiento (roles/storage.admin
) en tu proyecto y descarga el archivo de claves .json
de la cuenta de servicio.
La cuenta de servicio puede tener cualquier nombre único. En esta guía, se usa “apigee-diagnostic
” para el nombre de la cuenta de servicio.
Por ejemplo:
gcloud config set project ${PROJECT_ID}
gcloud iam service-accounts create apigee-diagnostic
gcloud projects add-iam-policy-binding ${PROJECT_ID} \ --member="serviceAccount:apigee-diagnostic@${PROJECT_ID}.iam.gserviceaccount.com" \ --role="roles/storage.admin"
gcloud iam service-accounts keys create ${PROJECT_ID}-apigee-diagnostic.json \ --iam-account=apigee-diagnostic@${PROJECT_ID}.iam.gserviceaccount.com
Consulta los siguientes vínculos:
- Crea y administra cuentas de servicio
- Crea y administra claves de cuentas de servicio
- Comprende las funciones: funciones de Cloud Storage.
Usa el colector de diagnóstico
La secuencia para usar el colector de diagnóstico es la siguiente:
- Configura la estrofa de diagnóstico en tu archivo
overrides.yaml
para seleccionar el tipo de información, el contenedor de Apigee y los Pods individuales de los que deseas datos de diagnóstico. Consulta Configuraoverrides.yaml
para el colector de diagnóstico. - Ejecuta el colector de diagnóstico con el siguiente comando de
apigeectl
.apigeectl diagnostic -f OVERRIDES_FILE
donde OVERRIDES_FILE es la ruta de acceso a tu archivo
overrides.yaml
. - Verifica los registros:
- Consulta los Pods en el espacio de nombres
apigee-diagnostic
.kubectl get pods -n apigee-diagnostic
- Toma nota del Pod con el nombre que contiene
diagnostic-collector
. - Verifica los registros con el siguiente comando:
kubectl -n apigee-diagnostic logs -f POD_NAME
En el ejemplo anterior, POD_NAME es el nombre del Pod del colector de diagnóstico.
También puedes ver los registros recopilados en el navegador de Google Cloud Platform: Cloud Storage.
- Consulta los Pods en el espacio de nombres
- Después de recopilar los datos, borra el colector de diagnóstico. No podrás volver a ejecutarlo hasta que lo borres.
apigeectl diagnostic delete -f OVERRIDES_FILE
Configura overrides.yaml
para el colector de diagnóstico
Antes de ejecutar el colector de diagnóstico, debes configurarlo en tu archivo overrides.yaml
.
Para obtener una referencia completa de las propiedades de configuración de diagnostic
, consulta la Referencia de las propiedades de configuración: diagnostic
.
Propiedades obligatorias
Para la ejecución del colector de diagnóstico, se requieren las siguientes propiedades.
diagnostic.serviceAccountPath
: La ruta a un archivo de claves de la cuenta de servicio para la cuenta de servicio con el rol de Administrador de almacenamiento en Requisitos previos.diagnostic.operation
: Especifica si se deben recopilar todas las estadísticas o solo registros.Los valores son
"ALL"
o"LOGGING"
.Si configuras
diagnostic.operation
como"LOGGING"
, se requieren las siguientes propiedades:diagnostic.bucket
: Es el nombre del bucket de almacenamiento de Google Cloud en el que se depositarán tus datos de diagnóstico. Este es el bucket que creaste en los requisitos previos.diagnostic.container
: Esto especifica desde qué tipo de Pod estás capturando datos. Los valores pueden ser uno de los siguientes:Valor container
Componente de Apigee Espacio de nombres de Kubernetes Ejemplo de nombre de pod en este contenedor apigee-cassandra
Cassandra apigee
apigee-cassandra-default-0
istio-proxy
Entrada de Istio istio-system
istio-ingressgateway-696879cdf8-9zzzf
apigee-mart-server
MART apigee
apigee-mart-hybrid-example-d89fed1-151-jj2ux-l7nlb
apigee-runtime
Message Processor apigee
apigee-runtime-hybrid-example-3b2ebf3-151-s64bh-g9qmv
apigee-synchronizer
Sincronizador apigee
apigee-synchronizer-hybrid-example-3b2ebf3-151-xx4z6cg78
apigee-udca
UDCA apigee
apigee-udca-hybrid-example-3b2ebf3-151-q4g2c-vnzg9
apigee-watcher
Watcher apigee
apigee-watcher-hybrid-example-d89fed1-151-cpu3s-sxxdf
diagnostic.namespace
: El espacio de nombres de Kubernetes en el que residen los pods en los que recopilas datos. El espacio de nombres debe ser el correcto para el contenedor que especificas condiagnostic.container
:diagnostic.podNames
: Son los nombres de los Pods individuales en los que deseas recopilar datos de diagnóstico. Por ejemplo:diagnostic: … podNames: - apigee-runtime-hybrid-example-3b2ebf3-150-8vfoj-2wcjn - apigee-runtime-hybrid-example-3b2ebf3-150-8vfoj-6xzn2
Propiedades obligatorias solo cuando la operación se establece en LOGGING
Las siguientes propiedades solo son necesarias cuando la ejecución del colector de diagnóstico con diagnostic.operation
es LOGGING
.
diagnostic.loggerNames
: Especifica por nombre de qué registradores se deben recopilar datos. En la versión 1.6.0 de Apigee Hybrid, el único valor admitido esALL
, lo que significa todos los registradores. Por ejemplo:diagnostic: … loggingDetails: loggerNames: - ALL
diagnostic.logLevel
: Especifica el nivel de detalle de los datos de registro que se recopilarán. En Apigee Hybrid 1.6, solo se admiteFINE
.diagnostic.logDuration
: La duración en milisegundos de los datos de registro recopilados. Un valor típico es30000
.
Propiedades opcionales
Las siguientes propiedades son opcionales.
diagnostic.tcpDumpDetails.maxMsgs
: Establece la cantidad máxima de mensajestcpDump
que se recopilarán. Apigee recomienda un valor máximo no mayor que1000
.diagnostic.tcpDumpDetails.timeoutInSeconds
: Establece la cantidad de tiempo en segundos que se espera para quetcpDump
muestre los mensajes.diagnostic.threadDumpDetails.delayInSeconds
: Retraso en segundos entre la recopilación de cada volcado de subprocesos. Se debe usar condiagnostic.threadDumpDetails.iterations
.diagnostic.threadDumpDetails.iterations
: La cantidad de iteraciones de volcado de subprocesos de jstack que se recopilarán. Se debe usar condiagnostic.threadDumpDetails.delayInSeconds
.
Ejemplo general
El siguiente es un ejemplo de estrofa diagnostic
que muestra todas las entradas posibles:
diagnostic: # required properties: serviceAccountPath: "service-accounts/apigee-diagnostics.json" operation: "ALL" bucket: "diagnostics_data" container: "apigee-runtime" namespace: "apigee" podNames: - apigee-runtime-hybrid-example-3b2ebf3-150-8vfoj-2wcjn - apigee-runtime-hybrid-example-3b2ebf3-150-8vfoj-6xzn2 # required if operation is Logging loggingDetails: loggerNames: - ALL logLevel: FINE logDuration: 30000 # optional properties: tcpDumpDetails: maxMsgs: 10 timeoutInSeconds: 100 threadDumpDetails: iterations: 5 delayInSeconds: 2
Casos de uso habituales
En los siguientes ejemplos, se muestra cómo configurar y usar el colector de diagnóstico en algunas situaciones comunes.
Latencia alta del proxy
En este caso, el entorno de ejecución de Apigee está tardando mucho en procesar solicitudes, lo que hace que los clientes vean latencias de proxy altas. Debes recopilar los resultados de Jstack y TOP.
- Selecciona 2 pods del entorno de ejecución.
- Crea tu estrofa de
diagnostic
con la siguiente estructura:diagnostic: serviceAccountPath: "service-accounts/apigee-diagnostics.json" operation: "ALL" bucket: "diagnostics_data" container: "apigee-runtime" namespace: "apigee" podNames: - apigee-runtime-hybrid-example-3b2ebf3-150-8vfoj-2wcjn - apigee-runtime-hybrid-example-3b2ebf3-150-8vfoj-6xzn2 tcpDumpDetails: maxMsgs: 10 threadDumpDetails: iterations: 15 delayInSeconds: 1
- Después de configurar la estrofa de
diagnostic
, ejecuta el colector de diagnóstico.apigeectl diagnostic -f OVERRIDES_FILE
- Recopila los registros y borra el colector de diagnóstico.
apigeectl diagnostic delete -f OVERRIDES_FILE
Problemas de red/conectividad
Debes ejecutar el diagnóstico en apigee-runtime, así como los pods de la puerta de enlace de entrada.
- Selecciona 2 pods del entorno de ejecución.
- Crea tu estrofa de
diagnostic
con la siguiente estructura:diagnostic: serviceAccountPath: "service-accounts/apigee-diagnostics.json" operation: "ALL" bucket: "diagnostics_data" container: "apigee-runtime" namespace: "apigee" podNames: - apigee-runtime-hybrid-example-3b2ebf3-150-8vfoj-2wcjn - apigee-runtime-hybrid-example-3b2ebf3-150-8vfoj-6xzn2 tcpDumpDetails: maxMsgs: 1000
- Después de configurar la estrofa de
diagnostic
, ejecuta el colector de diagnóstico.apigeectl diagnostic -f OVERRIDES_FILE
- Recopila los registros y borra el colector de diagnóstico.
apigeectl diagnostic delete -f OVERRIDES_FILE
- Selecciona dos Pods de la puerta de enlace de entrada de Istio.
- Vuelve a configurar la estrofa de
diagnostic
con los Pods de entrada de Istio:diagnostic: serviceAccountPath: "service-accounts/apigee-diagnostics.json" operation: "ALL" bucket: "diagnostics_data" container: "istio-proxy" namespace: "istio-system" podNames: - istio-ingressgateway-696879cdf8-9zzzf - istio-ingressgateway-696879cdf8-6abc7 tcpDumpDetails: maxMsgs: 1000
- Después de configurar la estrofa de
diagnostic
, ejecuta el colector de diagnóstico.apigeectl diagnostic -f OVERRIDES_FILE
- Recopila los registros y borra el colector de diagnóstico.
apigeectl diagnostic delete -f OVERRIDES_FILE
Los proxies generan errores inesperados o no se aplican los contratos nuevos
En este caso, debes cambiar los niveles de registro para depurar durante al menos 5 minutos o incluso 10 minutos como en este ejemplo. Esto aumentará la cantidad de registros, pero se registrará información útil. Ejecutará el colector de diagnóstico dos veces, una vez en el entorno de ejecución de Apigee y luego en el sincronizador de Apigee.
- Selecciona 2 pods del entorno de ejecución.
- Crea tu estrofa de
diagnostic
con la siguiente estructura:diagnostic: serviceAccountPath: "service-accounts/apigee-diagnostics.json" operation: "LOGGING" bucket: "diagnostics_data" namespace: "apigee" container: "apigee-runtime" podNames: - apigee-runtime-hybrid-example-3b2ebf3-150-8vfoj-2wcjn - apigee-runtime-hybrid-example-3b2ebf3-150-8vfoj-6xzn2 loggingDetails: loggerNames: - ALL logLevel: FINE logDuration: 60000
- Después de configurar la estrofa de
diagnostic
, ejecuta el colector de diagnóstico.apigeectl diagnostic -f OVERRIDES_FILE
- Recopila los registros y borra el colector de diagnóstico.
apigeectl diagnostic delete -f OVERRIDES_FILE
- Selecciona 2 pods del sincronizador.
- Crea tu estrofa de
diagnostic
con la siguiente estructura:diagnostic: serviceAccountPath: "service-accounts/apigee-diagnostics.json" operation: "LOGGING" bucket: "diagnostics_data" namespace: "apigee" container: "apigee-synchronizer" podNames: - apigee-synchronizer-hybrid-example-3b2ebf3-150-xx4z-6cg78 - apigee-synchronizer-hybrid-example-3b2ebf3-150-xx4z-1a2b3 loggingDetails: loggerNames: - ALL logLevel: FINE logDuration: 60000
- Después de configurar la estrofa de
diagnostic
, ejecuta el colector de diagnóstico.apigeectl diagnostic -f OVERRIDES_FILE
- Recopila los registros y borra el colector de diagnóstico.
apigeectl diagnostic delete -f OVERRIDES_FILE