Utilizzo del raccoglitore Diagnostic

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

Quali dati di sistema vengono acquisiti?

Diagnostics Collector acquisisce i seguenti tipi di dati:

  • Modifica dei livelli di log.
  • Jstack.
  • YAML di configurazione del pod.
  • Output PS -ef.
  • Dump TCP.
  • Output TOP.

Che cosa succede ai dati?

Quando lo strumento di raccolta 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.

Se vuoi, puoi scegliere di condividere questi dati con l'assistenza Google Apigee quando crei una richiesta di assistenza.

Prerequisiti per l'esecuzione di Diagnostic collector

Prima di utilizzare il raccoglitore Diagnostic, 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 gcloud storage o nella console di Google Cloud: browser Cloud Storage.

Ad esempio:

gcloud storage buckets create gs://apigee_diagnostic_data
Creating gs://apigee_diagnostic_data/...

Per istruzioni, vedi Creazione di bucket di archiviazione.

Service account

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

Il account di servizio può avere qualsiasi nome univoco. Questa guida utilizza "apigee-diagnostic" per il nome delaccount di serviziot.

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 Diagnostic

La sequenza per utilizzare il raccoglitore Diagnostic è:

  1. Configura la sezione Diagnostica nel file overrides.yaml per selezionare il tipo di informazioni, il contenitore Apigee e i singoli pod da cui vuoi ottenere i dati di diagnostica. Vedi Configurazione di overrides.yaml per Diagnostic Collector.
  2. Esegui Diagnostic Collector con questo 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 con il nome contenente 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 del raccoglitore Diagnostic.

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

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

Configurazione di overrides.yaml per il raccoglitore Diagnostic

Prima di poter eseguire Diagnostic Collector, devi configurarlo nel file overrides.yaml.

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

Proprietà obbligatorie

Per l'esecuzione di Diagnostic Collector sono necessarie le seguenti proprietà.

  • diagnostic.serviceAccountPath: il percorso di un file di chiave del account di servizio per il account di servizio con il ruolo Storage Admin nei 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 necessarie le seguenti proprietà:

  • diagnostic.bucket: il nome del bucket di archiviazione Google Cloud in cui verranno archiviati 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 uno dei seguenti:
    Valore containerComponente ApigeeSpazio dei nomi KubernetesNome del pod di esempio in questo contenitore
    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 Watcher apigee apigee-watcher-hybrid-example-d89fed1-151-cpu3s-sxxdf
  • diagnostic.namespace: lo spazio dei nomi Kubernetes in cui si trovano i pod su cui stai raccogliendo dati. Lo spazio dei nomi deve essere quello corretto per il contenitore specificato con diagnostic.container.
  • diagnostic.podNames: i nomi dei singoli pod su cui vuoi raccogliere i dati di diagnostica. 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 raccoglitore Diagnostic con diagnostic.operation è LOGGING.

  • diagnostic.loggerNames: Specifica per nome i logger da cui raccogliere i dati. Per Apigee hybrid 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 messaggi tcpDump da raccogliere. Apigee consiglia un valore massimo non superiore a 1000.
  • diagnostic.tcpDumpDetails.timeoutInSeconds: imposta il tempo in secondi da attendere prima che tcpDump restituisca i messaggi.
  • diagnostic.threadDumpDetails.delayInSeconds: il ritardo in secondi tra la raccolta di ogni dump dei thread. Deve essere utilizzato con diagnostic.threadDumpDetails.iterations.
  • diagnostic.threadDumpDetails.iterations: Il numero di iterazioni di dump dei thread jstack da raccogliere. Deve essere utilizzato con diagnostic.threadDumpDetails.delayInSeconds.

Esempio generale

Di seguito è riportato un esempio di sezione 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 Diagnostic Collector in alcune situazioni comuni.

Latenza proxy elevata

In questo caso, Apigee-runtime impiega molto tempo per elaborare le richieste, causando ai clienti latenze elevate del proxy. Devi raccogliere l'output di Jstack e TOP.

  1. Seleziona due pod di runtime qualsiasi.
  2. Crea la sezione 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 sezione diagnostic, esegui il raccoglitore Diagnostic.
    apigeectl diagnostic -f OVERRIDES_FILE
  4. Raccogli i log ed elimina il raccoglitore Diagnostic.
    apigeectl diagnostic delete -f OVERRIDES_FILE

Problemi di rete / connettività

Devi eseguire la diagnostica sui pod apigee-runtime e ingress gateway.

  1. Seleziona due pod di runtime qualsiasi.
  2. Crea la sezione 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 sezione diagnostic, esegui il raccoglitore Diagnostic.
    apigeectl diagnostic -f OVERRIDES_FILE
  4. Raccogli i log ed elimina il raccoglitore Diagnostic.
    apigeectl diagnostic delete -f OVERRIDES_FILE
  5. Seleziona due pod dal gateway di ingresso Istio.
  6. Riconfigura la stanza diagnostic con i pod di ingresso 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 sezione diagnostic, esegui il raccoglitore Diagnostic.
    apigeectl diagnostic -f OVERRIDES_FILE
  8. Raccogli i log ed elimina il raccoglitore Diagnostic.
    apigeectl diagnostic delete -f OVERRIDES_FILE

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

In questo caso, devi impostare i livelli di log su debug per almeno 5 minuti o anche 10 minuti, come in questo esempio. In questo modo, la quantità di log aumenterà, ma verranno registrate informazioni utili. Esegui Diagnostic collector due volte, una volta su Apigee runtime e una volta su Apigee synchronizer.

  1. Seleziona due pod di runtime qualsiasi.
  2. Crea la sezione 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 sezione diagnostic, esegui il raccoglitore Diagnostic.
    apigeectl diagnostic -f OVERRIDES_FILE
  4. Raccogli i log ed elimina il raccoglitore Diagnostic.
    apigeectl diagnostic delete -f OVERRIDES_FILE
  5. Seleziona due pod di sincronizzazione qualsiasi.
  6. Crea la sezione 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 sezione diagnostic, esegui il raccoglitore Diagnostic.
    apigeectl diagnostic -f OVERRIDES_FILE
  8. Raccogli i log ed elimina il raccoglitore Diagnostic.
    apigeectl diagnostic delete -f OVERRIDES_FILE