Utilizzo del raccoglitore Diagnostic

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

Quali dati di sistema vengono acquisiti?

Il programma di raccolta di Diagnostica acquisisce i seguenti tipi di dati:

  • Modifica dei livelli di log.
  • Jstack.
  • yaml della configurazione POD.
  • Output PS -ef.
  • dump TCP.
  • Output TOP.

Cosa accade ai dati?

Quando il programma di raccolta diagnostica acquisisce i dati, vengono caricati in un bucket di archiviazione nel 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.

Prerequisiti per l'esecuzione dell'utilità di raccolta diagnostica

Prima di utilizzare il commerciante 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 Google Cloud Platform: Cloud Storage.

Ad esempio:

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

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

Account di servizio

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

L'account di servizio può avere un 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 di Raccoglitore diagnostico

La sequenza per utilizzare il commerciante di diagnostica è:

  1. Configura la riga Diagnostica nel file overrides.yaml per selezionare il tipo di informazioni, il container Apigee e i singoli pod da cui vuoi visualizzare i dati diagnostici. Consulta la sezione Configurare overrides.yaml per il servizio di raccolta diagnostica.
  2. Esegui il servizio di raccolta 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. Ottieni i pod nello spazio dei nomi apigee-diagnostic.
      kubectl get pods -n apigee-diagnostic
    2. Prendi nota del pod con il nome 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 di raccolta diagnostica.

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

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

Configurazione di overrides.yaml per il commerciante di diagnostica

Prima di eseguire il programma di raccolta dei dati diagnostici, devi configurarlo nel file overrides.yaml.

Per un riferimento completo delle proprietà di configurazione di diagnostic, consulta il riferimento della proprietà di configurazione: diagnostic.

Proprietà obbligatorie

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

  • diagnostic.serviceAccountPath: percorso di un file della chiave dell'account di servizio per l'account di servizio con ruolo di 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 richieste le seguenti proprietà:

  • diagnostic.bucket: il nome del bucket di archiviazione Google Cloud in cui verranno depositati i dati di diagnostica. Questo è il bucket che hai creato in Prerequisiti.
  • diagnostic.container: specifica il tipo di pod da cui acquisisci i dati. I valori possono essere uno dei seguenti:
    Valore containerComponente ApigeeSpazio dei nomi KubernetesEsempio di nome pod in questo container
    apigee-cassandra Cassandra apigee apigee-cassandra-default-0
    istio-proxy In entrata 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 si trovano i pod in cui raccogli i dati. Lo spazio dei nomi deve essere quello corretto per il container specificato con diagnostic.container.
  • diagnostic.podNames: i nomi dei singoli pod in cui vuoi raccogliere i 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 esegui il servizio di raccolta diagnostica con diagnostic.operation su LOGGING.

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

Proprietà facoltative

Le seguenti proprietà sono facoltative.

  • diagnostic.tcpDumpDetails.maxMsgs: consente di impostare il numero massimo di messaggi tcpDump da raccogliere. Apigee consiglia un valore massimo non superiore a 1000.
  • diagnostic.tcpDumpDetails.timeoutInSeconds: consente di impostare il tempo in secondi per cui attendere che tcpDump restituisca i messaggi.
  • diagnostic.threadDumpDetails.delayInSeconds: il ritardo in secondi tra la raccolta di ogni dump del thread. Deve essere utilizzato con diagnostic.threadDumpDetails.iterations.
  • diagnostic.threadDumpDetails.iterations: il numero di iterazioni del dump del thread jstack. Deve essere utilizzato con diagnostic.threadDumpDetails.delayInSeconds.

Esempio generale

Di seguito è riportata una versione di esempio di 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

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

Latenza proxy elevata

In questo caso, l'esecuzione di Apigee richiede molto tempo per elaborare le richieste, causando ai clienti un'elevata latenza dei proxy. Devi raccogliere output Jstack e TOP.

  1. Seleziona due pod di runtime.
  2. Crea la tua intestazione 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 intestazione diagnostic, esegui il programma di raccolta dei dati diagnostici.
    apigeectl diagnostic -f OVERRIDES_FILE
  4. Raccogli i log ed elimina il commerciante di diagnostica.
    apigeectl diagnostic delete -f OVERRIDES_FILE

Problemi di rete / connettività

Devi eseguire la diagnostica sia sul tempo di esecuzione di Apigee sia sui pod del gateway in entrata.

  1. Seleziona due pod di runtime.
  2. Crea la tua intestazione 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 intestazione diagnostic, esegui il programma di raccolta dei dati diagnostici.
    apigeectl diagnostic -f OVERRIDES_FILE
  4. Raccogli i log ed elimina il commerciante di diagnostica.
    apigeectl diagnostic delete -f OVERRIDES_FILE
  5. Seleziona due pod dal gateway in entrata Istio.
  6. Riconfigura la tua riga diagnostic con i pod Ingress in 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 intestazione diagnostic, esegui il programma di raccolta dei dati diagnostici.
    apigeectl diagnostic -f OVERRIDES_FILE
  8. Raccogli i log ed elimina il commerciante di diagnostica.
    apigeectl diagnostic delete -f OVERRIDES_FILE

I proxy restituiscono 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 10 minuti come in questo esempio. Ciò aumenterà la quantità di log, ma verranno registrate informazioni utili. Esegui il programma di raccolta diagnostico due volte, una volta sul runtime Apigee e poi sul programma di sincronizzazione Apigee.

  1. Seleziona due pod di runtime.
  2. Crea la tua intestazione 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 intestazione diagnostic, esegui il programma di raccolta dei dati diagnostici.
    apigeectl diagnostic -f OVERRIDES_FILE
  4. Raccogli i log ed elimina il commerciante di diagnostica.
    apigeectl diagnostic delete -f OVERRIDES_FILE
  5. Seleziona due pod di sincronizzazione.
  6. Crea la tua intestazione 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 intestazione diagnostic, esegui il programma di raccolta dei dati diagnostici.
    apigeectl diagnostic -f OVERRIDES_FILE
  8. Raccogli i log ed elimina il commerciante di diagnostica.
    apigeectl diagnostic delete -f OVERRIDES_FILE