Utilizzo del raccoglitore Diagnostic

Il raccoglitore diagnostico è uno strumento che acquisisce dati diagnostici sui componenti Kubernetes di un'istanza ibrida Apigee on demand e li archivia nei bucket di archiviazione Google Cloud. Richiami il raccoglitore di diagnostica con il comando apigeectl diagnostic.

Quali dati di sistema vengono acquisiti?

Il raccoglitore Diagnostica acquisisce i seguenti tipi di dati:

  • Modifica dei livelli di log.
  • Jstack.
  • YAML della configurazione dei pod.
  • Output PS -ef.
  • il dump TCP.
  • Output TOP.

Cosa succede ai dati?

Quando il raccoglitore di diagnostica acquisisce i dati, questi vengono caricati in un bucket di archiviazione nel tuo progetto Google Cloud. Puoi visualizzare i dati archiviati nel browser Google Cloud Platform: Cloud Storage.

Facoltativamente, puoi scegliere di condividere questi dati con l'Assistenza Google Apigee quando crei un ticket di assistenza.

Prerequisiti per l'esecuzione del raccoglitore di diagnostica

Prima di utilizzare il raccoglitore di diagnostica, devi completare i seguenti prerequisiti:

Bucket Google Cloud Storage

Crea un bucket Google Cloud Storage con un nome univoco nel tuo progetto Google Cloud. Puoi creare e gestire i bucket con i comandi gsutil o nel browser Cloud Storage di Google Cloud Platform.

Ad esempio:

gsutil mb gs://apigee_diagnostic_data
Creating gs://apigee_diagnostic_data/...

Per le istruzioni, consulta Creazione di bucket di archiviazione.

Account di servizio

Crea un account di servizio con il ruolo Amministratore archiviazione (roles/storage.admin) nel progetto e scarica il file delle chiavi .json dell'account di servizio.

L'account di servizio può avere qualsiasi nome univoco. Questa guida utilizza "apigee-diagnostic" per il nome dell'account di servizio.

Ad esempio:

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

Vedi:

Utilizzo del raccoglitore di diagnostica

La sequenza per utilizzare il raccoglitore di diagnostica è:

  1. Configura la stanza di diagnostica nel file overrides.yaml per selezionare il tipo di informazioni, il container Apigee e i singoli pod da cui vuoi i dati diagnostici. Consulta Configurazione di overrides.yaml per il raccoglitore di diagnostica.
  2. Esegui il raccoglitore diagnostico con il seguente comando apigeectl.
    apigeectl diagnostic -f OVERRIDES_FILE

    Dove OVERRIDES_FILE è il percorso del file overrides.yaml.

  3. Controlla i log:
    1. Recupera i pod nello spazio dei nomi apigee-diagnostic.
      kubectl get pods -n apigee-diagnostic
    2. Prendi nota del pod il cui nome contiene diagnostic-collector
    3. Controlla i log con il seguente comando:
      kubectl -n apigee-diagnostic logs -f POD_NAME

      Dove POD_NAME è il nome del pod del raccoglitore di diagnostica.

      Puoi anche visualizzare i log raccolti nel browser Google Cloud Platform: Cloud Storage.

  4. Dopo aver raccolto i dati, elimina il raccoglitore di diagnostica. Non puoi eseguirlo di nuovo finché non lo elimini.
    apigeectl diagnostic delete -f OVERRIDES_FILE

Configurazione di overrides.yaml per il raccoglitore di diagnostica in corso...

Prima di poter eseguire il raccoglitore di diagnostica, devi configurarlo nel file overrides.yaml.

Per un riferimento completo delle proprietà di configurazione di diagnostic, consulta Riferimento alla proprietà di configurazione: diagnostic.

Proprietà obbligatorie

Per l'esecuzione del raccoglitore di diagnostica, sono necessarie le seguenti proprietà.

  • diagnostic.serviceAccountPath: il percorso di un file della chiave dell'account di servizio per l'account di servizio con il ruolo Amministratore Storage in Prerequisiti.
  • diagnostic.operation: specifica se raccogliere tutte le statistiche o solo i log.

    I valori sono: "ALL" o "LOGGING"

    Se imposti diagnostic.operation su "LOGGING", sono obbligatorie le seguenti proprietà:

  • diagnostic.bucket: il nome del bucket Google Cloud Storage in cui verranno depositati i dati diagnostici. Questo è il bucket che hai creato in Prerequisiti.
  • diagnostic.container: specifica da quale tipo di pod stai acquisendo i dati. I valori possono essere uno dei seguenti:
    Valore containerComponente ApigeeSpazio dei nomi KubernetesEsempio di nome di pod in questo container
    apigee-cassandra Cassandra apigee apigee-cassandra-default-0
    istio-proxy Ingress Istio istio-system istio-ingressgateway-696879cdf8-9zzzf
    apigee-mart-server MART apigee apigee-mart-hybrid-example-d89fed1-151-jj2ux-l7nlb
    apigee-runtime processore di messaggi apigee apigee-runtime-hybrid-example-3b2ebf3-151-s64bh-g9qmv
    apigee-synchronizer Sincronizzatore apigee apigee-synchronizer-hybrid-example-3b2ebf3-151-xx4z6cg78
    apigee-udca UDCA (UDCA) apigee apigee-udca-hybrid-example-3b2ebf3-151-q4g2c-vnzg9
    apigee-watcher Osservatore apigee apigee-watcher-hybrid-example-d89fed1-151-cpu3s-sxxdf
  • diagnostic.namespace: lo spazio dei nomi Kubernetes in cui risiedono i pod su cui stai raccogliendo i dati. Lo spazio dei nomi deve essere quello corretto per il container specificato con diagnostic.container.
  • diagnostic.podNames: i nomi dei singoli pod su cui vuoi raccogliere dati diagnostici. Ad esempio:
    diagnostic:
     …
     podNames:
     - apigee-runtime-hybrid-example-3b2ebf3-150-8vfoj-2wcjn
     - apigee-runtime-hybrid-example-3b2ebf3-150-8vfoj-6xzn2

Proprietà obbligatorie solo quando l'operazione è impostata su LOGGING

Le seguenti proprietà sono obbligatorie solo se l'esecuzione del raccoglitore di diagnostica con diagnostic.operation è LOGGING.

  • diagnostic.loggerNames: specifica in base al nome i logger da cui raccogliere i dati. Per Apigee versione ibrida 1.6.0, l'unico valore supportato è ALL, ovvero tutti i logger. Ad esempio:
    diagnostic:
     …
     loggingDetails:
       loggerNames:
       - ALL
  • diagnostic.logLevel: specifica la granularità dei dati di logging da raccogliere. In Apigee hybrid 1.6, è supportato solo FINE.
  • diagnostic.logDuration: la durata in millisecondi dei dati di log raccolti. Un valore tipico è 30000.

Proprietà facoltative

Le seguenti proprietà sono facoltative.

  • diagnostic.tcpDumpDetails.maxMsgs: imposta il numero massimo di messaggi tcpDump da raccogliere. Apigee consiglia un valore massimo non superiore a 1000.
  • diagnostic.tcpDumpDetails.timeoutInSeconds: imposta il tempo in secondi di attesa prima che tcpDump restituisca i messaggi.
  • diagnostic.threadDumpDetails.delayInSeconds: il ritardo in secondi tra la raccolta di ogni thread dump. Da utilizzare con diagnostic.threadDumpDetails.iterations.
  • diagnostic.threadDumpDetails.iterations: il numero di iterazioni del dump del thread jstack da raccogliere. Da utilizzare con diagnostic.threadDumpDetails.delayInSeconds.

Esempio generale

Di seguito è riportata una stanza diagnostic di esempio che mostra tutte le voci possibili:

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

Casi d'uso comuni

I seguenti esempi mostrano come configurare e utilizzare il raccoglitore di diagnostica in alcune situazioni comuni.

Latenza proxy elevata

In questo caso, il runtime di Apigee sta richiedendo molto tempo per elaborare le richieste, causando ai clienti la visualizzazione di latenze proxy elevate. Devi raccogliere l'output Jstack e TOP.

  1. Seleziona due pod di runtime.
  2. Crea la tua stanza diagnostic con la seguente struttura:
    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. Dopo aver configurato la stanza diagnostic, esegui il raccoglitore di diagnostica.
    apigeectl diagnostic -f OVERRIDES_FILE
  4. Raccogli i log ed elimina il raccoglitore di diagnostica.
    apigeectl diagnostic delete -f OVERRIDES_FILE

Problemi di rete / connettività

Devi eseguire la diagnostica su apigee-runtime e pod gateway in entrata.

  1. Seleziona due pod di runtime.
  2. Crea la tua stanza diagnostic con la seguente struttura:
    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. Dopo aver configurato la stanza diagnostic, esegui il raccoglitore di diagnostica.
    apigeectl diagnostic -f OVERRIDES_FILE
  4. Raccogli i log ed elimina il raccoglitore di diagnostica.
    apigeectl diagnostic delete -f OVERRIDES_FILE
  5. Seleziona due pod dal gateway in entrata Istio.
  6. Riconfigura la stanza diagnostic con i pod in entrata 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. Dopo aver configurato la stanza diagnostic, esegui il raccoglitore di diagnostica.
    apigeectl diagnostic -f OVERRIDES_FILE
  8. Raccogli i log ed elimina il raccoglitore di diagnostica.
    apigeectl diagnostic delete -f OVERRIDES_FILE

I proxy generano errori imprevisti o i nuovi contratti non vengono applicati

In questo caso, devi modificare i livelli dei log per eseguire il debug per almeno 5 minuti o anche per 10 minuti, come in questo esempio. Ciò aumenterà la quantità di log, ma verranno registrate informazioni utili. Eseguirai il raccoglitore di diagnostica due volte, una sul runtime Apigee e poi sul sincronizzatore Apigee.

  1. Seleziona due pod di runtime.
  2. Crea la tua stanza diagnostic con la seguente struttura:
    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. Dopo aver configurato la stanza diagnostic, esegui il raccoglitore di diagnostica.
    apigeectl diagnostic -f OVERRIDES_FILE
  4. Raccogli i log ed elimina il raccoglitore di diagnostica.
    apigeectl diagnostic delete -f OVERRIDES_FILE
  5. Seleziona due pod del sincronizzatore.
  6. Crea la tua stanza diagnostic con la seguente struttura:
    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. Dopo aver configurato la stanza diagnostic, esegui il raccoglitore di diagnostica.
    apigeectl diagnostic -f OVERRIDES_FILE
  8. Raccogli i log ed elimina il raccoglitore di diagnostica.
    apigeectl diagnostic delete -f OVERRIDES_FILE