Usa el colector de diagnóstico

El colector de diagnóstico es una herramienta que captura bajo demanda los datos de diagnóstico en los componentes de Kubernetes de una instancia de Apigee Hybrid y los almacena en buckets de Google Cloud Storage. Invoca el colector de diagnóstico con el comando 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 gsutil o en Google Cloud Platform: el navegador de Cloud Storage.

Por ejemplo:

gsutil mb 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:

Usa el colector de diagnóstico

La secuencia para usar el colector de diagnóstico es la siguiente:

  1. 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 Configura overrides.yaml para el colector de diagnóstico.
  2. 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.

  3. Verifica los registros:
    1. Consulta los Pods en el espacio de nombres apigee-diagnostic.
      kubectl get pods -n apigee-diagnostic
    2. Toma nota del Pod con el nombre que contiene diagnostic-collector.
    3. 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.

  4. 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 containerComponente de ApigeeEspacio de nombres de KubernetesEjemplo 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 con diagnostic.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 es ALL, 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 admite FINE.
  • diagnostic.logDuration: La duración en milisegundos de los datos de registro recopilados. Un valor típico es 30000.

Propiedades opcionales

Las siguientes propiedades son opcionales.

  • diagnostic.tcpDumpDetails.maxMsgs: Establece la cantidad máxima de mensajes tcpDump que se recopilarán. Apigee recomienda un valor máximo no mayor que 1000.
  • diagnostic.tcpDumpDetails.timeoutInSeconds: Establece la cantidad de tiempo en segundos que se espera para que tcpDump muestre los mensajes.
  • diagnostic.threadDumpDetails.delayInSeconds: Retraso en segundos entre la recopilación de cada volcado de subprocesos. Se debe usar con diagnostic.threadDumpDetails.iterations.
  • diagnostic.threadDumpDetails.iterations: La cantidad de iteraciones de volcado de subprocesos de jstack que se recopilarán. Se debe usar con diagnostic.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.

  1. Selecciona 2 pods del entorno de ejecución.
  2. 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
  3. Después de configurar la estrofa de diagnostic, ejecuta el colector de diagnóstico.
    apigeectl diagnostic -f OVERRIDES_FILE
  4. 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.

  1. Selecciona 2 pods del entorno de ejecución.
  2. 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
  3. Después de configurar la estrofa de diagnostic, ejecuta el colector de diagnóstico.
    apigeectl diagnostic -f OVERRIDES_FILE
  4. Recopila los registros y borra el colector de diagnóstico.
    apigeectl diagnostic delete -f OVERRIDES_FILE
  5. Selecciona dos Pods de la puerta de enlace de entrada de Istio.
  6. 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
  7. Después de configurar la estrofa de diagnostic, ejecuta el colector de diagnóstico.
    apigeectl diagnostic -f OVERRIDES_FILE
  8. 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.

  1. Selecciona 2 pods del entorno de ejecución.
  2. 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
    
  3. Después de configurar la estrofa de diagnostic, ejecuta el colector de diagnóstico.
    apigeectl diagnostic -f OVERRIDES_FILE
  4. Recopila los registros y borra el colector de diagnóstico.
    apigeectl diagnostic delete -f OVERRIDES_FILE
  5. Selecciona 2 pods del sincronizador.
  6. 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
    
  7. Después de configurar la estrofa de diagnostic, ejecuta el colector de diagnóstico.
    apigeectl diagnostic -f OVERRIDES_FILE
  8. Recopila los registros y borra el colector de diagnóstico.
    apigeectl diagnostic delete -f OVERRIDES_FILE