Utilizzo del raccoglitore Diagnostic

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

Quali dati di sistema vengono acquisiti?

Il raccoglitore di diagnostica acquisisce i seguenti tipi di dati:

  • Modifica dei livelli di log.
  • Jstack.
  • Configurazione POD YAML.
  • Output PS -ef.
  • dump TCP.
  • TOP.

Che 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 nella piattaforma Google Cloud: browser 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 diagnostico, 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 Google Cloud Platform: Cloud Storage.

Ad esempio:

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

Per le istruzioni, consulta la sezione Creazione di bucket di archiviazione.

Service account

Crea un account di servizio con il ruolo Storage Admin (roles/storage.admin) nel tuo progetto e scarica il file della chiave .json dell'account di servizio.

L'account di servizio può avere qualsiasi nome univoco. Questa guida utilizza "apigee-diagnostic" come 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 Diagnostic nel tuo file overrides.yaml per selezionare il tipo di informazioni, il container Apigee e i singoli pod da cui vuoi ricevere i dati diagnostici. Consulta Configurazione di overrides.yaml per il raccoglitore di diagnostica.
  2. Esegui il raccoglitore di diagnostica con il seguente comando apigeectl.
    apigeectl diagnostic -f OVERRIDES_FILE

    Dove OVERRIDES_FILE è il percorso del tuo 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 con il nome che contiene diagnostic-collector
    3. Controlla i log con il comando seguente:
      kubectl -n apigee-diagnostic logs -f POD_NAME

      Dove POD_NAME è il nome del pod raccoglitore diagnostico.

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

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

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

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

Per un riferimento completo sulle proprietà di configurazione di diagnostic, consulta Riferimento per le proprietà di configurazione: diagnostic.

Proprietà obbligatorie

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

  • diagnostic.serviceAccountPath: il percorso di un file di chiavi 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", le seguenti proprietà sono obbligatorie:

  • 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 il tipo di pod da cui stai acquisendo i dati. I valori possono essere:
    container valoreComponente ApigeeSpazio dei nomi KubernetesNome del pod di esempio 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 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 risiedono 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 quando l'esecuzione del raccoglitore diagnostico con diagnostic.operation è LOGGING.

  • diagnostic.loggerNames: specifica in base al nome da quali logger raccogliere i dati. Per Apigee ibrida versione 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 tcpDump messaggi da raccogliere. Apigee consiglia un valore massimo non superiore a 1000.
  • diagnostic.tcpDumpDetails.timeoutInSeconds: imposta la quantità di tempo in secondi di attesa da parte di tcpDump per restituire i messaggi.
  • diagnostic.threadDumpDetails.delayInSeconds: il ritardo in secondi tra la raccolta di ogni dump dei thread. 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 è riportato un esempio di stanza diagnostic 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

Gli esempi seguenti mostrano come configurare e utilizzare il raccoglitore diagnostico in alcune situazioni comuni.

Latenza proxy elevata

In questo caso, il runtime Apigee sta impiegando molto tempo per elaborare le richieste, di conseguenza i clienti vedono latenze del proxy elevate. Devi raccogliere l'output Jstack e TOP.

  1. Seleziona due pod del 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 diagnostico.
    apigeectl diagnostic -f OVERRIDES_FILE
  4. Raccogli i log ed elimina il raccoglitore diagnostico.
    apigeectl diagnostic delete -f OVERRIDES_FILE

Problemi di rete / connettività

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

  1. Seleziona due pod del 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 diagnostico.
    apigeectl diagnostic -f OVERRIDES_FILE
  4. Raccogli i log ed elimina il raccoglitore diagnostico.
    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 diagnostico.
    apigeectl diagnostic -f OVERRIDES_FILE
  8. Raccogli i log ed elimina il raccoglitore diagnostico.
    apigeectl diagnostic delete -f OVERRIDES_FILE

I proxy generano errori imprevisti o non vengono applicati nuovi contratti

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

  1. Seleziona due pod del 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 diagnostico.
    apigeectl diagnostic -f OVERRIDES_FILE
  4. Raccogli i log ed elimina il raccoglitore diagnostico.
    apigeectl diagnostic delete -f OVERRIDES_FILE
  5. Seleziona due pod per la sincronizzazione.
  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 diagnostico.
    apigeectl diagnostic -f OVERRIDES_FILE
  8. Raccogli i log ed elimina il raccoglitore diagnostico.
    apigeectl diagnostic delete -f OVERRIDES_FILE