apigeectl diagnostic.
¿Qué datos del sistema se recogen?
El recopilador de diagnósticos recoge los siguientes tipos de datos:
- Cambiar los niveles de registro.
- Jstack.
- Archivo YAML de configuración de POD.
- Salida de PS -ef.
- Volcado de TCP.
- Salida TOP.
¿Qué ocurre con los datos?
Cuando el recopilador de diagnósticos captura los datos, se suben a un segmento de almacenamiento de tu proyecto de Google Cloud. Puedes ver los datos almacenados en el navegador de Cloud Storage de Google Cloud Platform.
Si quieres, puedes compartir estos datos con el equipo de Asistencia de Google Apigee cuando crees una incidencia.
Requisitos previos para ejecutar el recopilador de diagnóstico
Antes de usar el recopilador de Diagnóstico, debes completar los siguientes requisitos previos:
Segmento de Google Cloud Storage
Crea un segmento de Google Cloud Storage con un nombre único en tu proyecto de Google Cloud. Puedes crear y gestionar contenedores con comandos de gcloud storage o en el navegador de Cloud Storage de Google Cloud Platform.
Por ejemplo:
gcloud storage buckets create gs://apigee_diagnostic_data
Creating gs://apigee_diagnostic_data/...
Consulta las instrucciones en el artículo Crear segmentos de almacenamiento.
Cuenta de servicio
Crea una cuenta de servicio con el rol Administrador de Storage (roles/storage.admin)
en tu proyecto y descarga el archivo de clave .json de la cuenta de servicio.
La cuenta de servicio puede tener cualquier nombre único. En esta guía se usa "apigee-diagnostic"
como 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.comConsulta los siguientes artículos:
- Crear y gestionar cuentas de servicio
- Crear y gestionar claves de cuentas de servicio
- Información sobre los roles de Cloud Storage
Usar el recopilador de diagnóstico
La secuencia para usar el recopilador de Diagnóstico es la siguiente:
- Configura la stanza Diagnostic en tu archivo
overrides.yamlpara seleccionar el tipo de información, el contenedor de Apigee y los pods individuales de los que quieras obtener datos de diagnóstico. Consulta Configuraroverrides.yamlpara el recopilador de diagnósticos. - Ejecuta el recopilador de diagnóstico con el siguiente comando
apigeectl.apigeectl diagnostic -f OVERRIDES_FILE
Donde OVERRIDES_FILE es la ruta a tu archivo
overrides.yaml. - Consulta los registros:
- Obtén los pods del espacio de nombres
apigee-diagnostic.kubectl get pods -n apigee-diagnostic
- Anota el pod cuyo nombre contenga
diagnostic-collector. - Consulta los registros con el siguiente comando:
kubectl -n apigee-diagnostic logs -f POD_NAME
Donde POD_NAME es el nombre del pod del recopilador de diagnóstico.
También puedes ver los registros recogidos en el navegador de Cloud Storage de Google Cloud Platform.
- Obtén los pods del espacio de nombres
- Una vez que haya recogido los datos, elimine el recopilador de diagnóstico. No puedes volver a ejecutarlo hasta que lo hayas eliminado.
apigeectl diagnostic delete -f OVERRIDES_FILE
Configurar overrides.yaml para el recopilador de diagnóstico
Antes de ejecutar Diagnostic collector, debes configurarlo en el archivo overrides.yaml.
Para obtener una referencia completa de las propiedades de configuración de diagnostic, consulta el artículo Referencia de la propiedad de configuración:
diagnostic.
Propiedades obligatorias
Para que se ejecute el recolector de diagnósticos, son obligatorias las siguientes propiedades.
diagnostic.serviceAccountPath: ruta a un archivo de clave de cuenta de servicio de la cuenta de servicio con el rol Administrador de almacenamiento en Requisitos previos.diagnostic.operation: especifica si se deben recoger todas las estadísticas o solo los registros.Los valores son
"ALL"o"LOGGING".Si asignas el valor
"LOGGING"adiagnostic.operation, debes incluir las siguientes propiedades:diagnostic.bucket: nombre del segmento de Google Cloud Storage en el que se depositarán sus datos de diagnóstico. Este es el segmento que has creado en la sección Requisitos.diagnostic.container: especifica el tipo de pod del que estás recogiendo datos. Los valores pueden ser uno de los siguientes:Valor de containerComponente de Apigee Espacio de nombres de Kubernetes Nombre de pod de ejemplo en este contenedor apigee-cassandraCassandra apigeeapigee-cassandra-default-0istio-proxyEntrada de Istio istio-systemistio-ingressgateway-696879cdf8-9zzzfapigee-mart-serverMART apigeeapigee-mart-hybrid-example-d89fed1-151-jj2ux-l7nlbapigee-runtimeMessage Processor apigeeapigee-runtime-hybrid-example-3b2ebf3-151-s64bh-g9qmvapigee-synchronizerSincronizador apigeeapigee-synchronizer-hybrid-example-3b2ebf3-151-xx4z6cg78apigee-udcaUDCA apigeeapigee-udca-hybrid-example-3b2ebf3-151-q4g2c-vnzg9apigee-watcherWatcher apigeeapigee-watcher-hybrid-example-d89fed1-151-cpu3s-sxxdfdiagnostic.namespace: el espacio de nombres de Kubernetes en el que residen los pods de los que recoges datos. El espacio de nombres debe ser el correcto para el contenedor que especifiques condiagnostic.container.diagnostic.podNames: los nombres de los pods individuales de los que quieras recoger 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 obligatorias cuando se ejecuta el recopilador de diagnóstico con diagnostic.operation como LOGGING.
diagnostic.loggerNames: especifica por nombre de qué registradores se deben recoger datos. En la versión 1.6.0 de Apigee hybrid, el único valor admitido esALL, lo que significa que se incluyen todos los registradores. Por ejemplo:diagnostic: … loggingDetails: loggerNames: - ALL
diagnostic.logLevel: especifica la granularidad de los datos de registro que se van a recoger. En Apigee hybrid 1.6, solo se admiteFINE.diagnostic.logDuration: duración en milisegundos de los datos de registro recogidos. Un valor habitual es30000.
Propiedades opcionales
Las siguientes propiedades son opcionales.
diagnostic.tcpDumpDetails.maxMsgs: define el número máximo de mensajes detcpDumpque se van a recoger. Apigee recomienda un valor máximo que no supere1000.diagnostic.tcpDumpDetails.timeoutInSeconds: define la cantidad de tiempo en segundos que se debe esperar a quetcpDumpdevuelva mensajes.diagnostic.threadDumpDetails.delayInSeconds: el retraso en segundos entre la recogida de cada volcado de subprocesos. Debe usarse condiagnostic.threadDumpDetails.iterations.diagnostic.threadDumpDetails.iterations: número de iteraciones de volcado de pila de subprocesos de jstack que se van a recoger. Debe usarse condiagnostic.threadDumpDetails.delayInSeconds.
Ejemplo general
A continuación se muestra un ejemplo de stanza diagnostic con 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 prácticos habituales
En los siguientes ejemplos se muestra cómo configurar y usar Diagnostic collector en algunas situaciones habituales.
Latencia de proxy alta
En este caso, Apigee-runtime tarda mucho en procesar las solicitudes, lo que provoca que los clientes experimenten latencias altas en los proxies. Debes recoger la salida de Jstack y TOP.
- Selecciona dos pods de tiempo de ejecución.
- Crea tu stanza
diagnosticcon 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 sección
diagnostic, ejecuta el recopilador de diagnósticos.apigeectl diagnostic -f OVERRIDES_FILE
- Recopila los registros y elimina el recopilador de diagnóstico.
apigeectl diagnostic delete -f OVERRIDES_FILE
Problemas de red o de conectividad
Debes ejecutar diagnósticos en apigee-runtime y en los pods de la pasarela de entrada.
- Selecciona dos pods de tiempo de ejecución.
- Crea tu stanza
diagnosticcon 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 sección
diagnostic, ejecuta el recopilador de diagnósticos.apigeectl diagnostic -f OVERRIDES_FILE
- Recopila los registros y elimina el recopilador de diagnóstico.
apigeectl diagnostic delete -f OVERRIDES_FILE
- Selecciona dos pods de la pasarela de entrada de Istio.
- Vuelve a configurar la estrofa
diagnosticcon 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 sección
diagnostic, ejecuta el recopilador de diagnósticos.apigeectl diagnostic -f OVERRIDES_FILE
- Recopila los registros y elimina el recopilador de diagnóstico.
apigeectl diagnostic delete -f OVERRIDES_FILE
Los proxies generan errores inesperados o no se aplican los nuevos contratos
En este caso, debes cambiar los niveles de registro a depuración durante al menos 5 minutos o incluso 10 minutos, como en este ejemplo. De esta forma, se registrará una mayor cantidad de registros, pero también información útil. Ejecutarás Diagnostic collector dos veces: una en el tiempo de ejecución de Apigee y otra en el sincronizador de Apigee.
- Selecciona dos pods de tiempo de ejecución.
- Crea tu stanza
diagnosticcon 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 sección
diagnostic, ejecuta el recopilador de diagnósticos.apigeectl diagnostic -f OVERRIDES_FILE
- Recopila los registros y elimina el recopilador de diagnóstico.
apigeectl diagnostic delete -f OVERRIDES_FILE
- Selecciona dos pods de sincronización.
- Crea tu stanza
diagnosticcon 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 sección
diagnostic, ejecuta el recopilador de diagnósticos.apigeectl diagnostic -f OVERRIDES_FILE
- Recopila los registros y elimina el recopilador de diagnóstico.
apigeectl diagnostic delete -f OVERRIDES_FILE