Usar el recopilador de Diagnóstico

Diagnostic Collector es una herramienta que recoge datos de diagnóstico de los componentes de Kubernetes de una instancia híbrida de Apigee bajo demanda y los almacena en segmentos de Google Cloud Storage. Para invocar el recopilador de Diagnóstico, usa el comando apigeectl diagnostic.

¿Qué datos del sistema se registran?

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.
  • Captura 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.

También puede compartir estos datos con el equipo de Asistencia de Google Apigee cuando cree una incidencia.

Requisitos 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.com

Consulta los siguientes artículos:

Usar el recopilador de diagnóstico

La secuencia para usar el recopilador de Diagnóstico es la siguiente:

  1. Configura la stanza Diagnostic en tu archivo overrides.yaml para seleccionar el tipo de información, el contenedor de Apigee y los pods individuales de los que quieras obtener datos de diagnóstico. Consulta Configurar overrides.yaml para el recopilador de diagnóstico.
  2. 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.

  3. Consulta los registros:
    1. Obtén los pods del espacio de nombres apigee-diagnostic.
      kubectl get pods -n apigee-diagnostic
    2. Anota el pod cuyo nombre contenga diagnostic-collector.
    3. 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 Google Cloud Platform: Cloud Storage.

  4. Una vez que hayas recogido los datos, elimina 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 ver 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 al archivo de clave de la cuenta de servicio con el rol Administrador de almacenamiento que se indica en la sección Requisitos.
  • 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" a diagnostic.operation, debes incluir las siguientes propiedades:

  • diagnostic.bucket: nombre del segmento de almacenamiento de Google Cloud 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 ApigeeEspacio de nombres de KubernetesNombre de pod de ejemplo 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 de los que recoges datos. El espacio de nombres debe ser el correcto para el contenedor que especifiques con diagnostic.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 es ALL, 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 admite FINE.
  • diagnostic.logDuration: duración en milisegundos de los datos de registro recogidos. Un valor habitual es 30000.

Propiedades opcionales

Las siguientes propiedades son opcionales.

  • diagnostic.tcpDumpDetails.maxMsgs: define el número máximo de mensajes de tcpDump que se van a recoger. Apigee recomienda un valor máximo que no supere 1000.
  • diagnostic.tcpDumpDetails.timeoutInSeconds: define la cantidad de tiempo en segundos que se debe esperar a que tcpDump devuelva mensajes.
  • diagnostic.threadDumpDetails.delayInSeconds: el retraso en segundos entre la recogida de cada volcado de pila. Debe usarse con diagnostic.threadDumpDetails.iterations.
  • diagnostic.threadDumpDetails.iterations: número de iteraciones de volcado de pila de subprocesos de jstack que se van a recoger. Debe usarse con diagnostic.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.

  1. Selecciona dos pods de tiempo de ejecución.
  2. Crea tu stanza 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 sección diagnostic, ejecuta el recopilador de diagnóstico.
    apigeectl diagnostic -f OVERRIDES_FILE
  4. 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.

  1. Selecciona dos pods de tiempo de ejecución.
  2. Crea tu stanza 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 sección diagnostic, ejecuta el recopilador de diagnóstico.
    apigeectl diagnostic -f OVERRIDES_FILE
  4. Recopila los registros y elimina el recopilador de diagnóstico.
    apigeectl diagnostic delete -f OVERRIDES_FILE
  5. Selecciona dos pods de la pasarela de entrada de Istio.
  6. Vuelve a configurar la estrofa 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 sección diagnostic, ejecuta el recopilador de diagnóstico.
    apigeectl diagnostic -f OVERRIDES_FILE
  8. Recopila los registros y elimina el recopilador de diagnóstico.
    apigeectl diagnostic delete -f OVERRIDES_FILE

Los proxies devuelven 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, aumentará la cantidad de registros, pero se registrará 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.

  1. Selecciona dos pods de tiempo de ejecución.
  2. Crea tu stanza 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 sección diagnostic, ejecuta el recopilador de diagnóstico.
    apigeectl diagnostic -f OVERRIDES_FILE
  4. Recopila los registros y elimina el recopilador de diagnóstico.
    apigeectl diagnostic delete -f OVERRIDES_FILE
  5. Selecciona dos pods de sincronización.
  6. Crea tu stanza 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 sección diagnostic, ejecuta el recopilador de diagnóstico.
    apigeectl diagnostic -f OVERRIDES_FILE
  8. Recopila los registros y elimina el recopilador de diagnóstico.
    apigeectl diagnostic delete -f OVERRIDES_FILE