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.comVedi:
- Creazione e gestione degli account di servizio.
- Creazione e gestione delle chiavi dei service account.
- Informazioni sui ruoli: ruoli di Cloud Storage.
Utilizzo del raccoglitore Diagnostic
La sequenza per utilizzare il raccoglitore Diagnostic è:
- Configura la sezione Diagnostica nel file
overrides.yamlper selezionare il tipo di informazioni, il contenitore Apigee e i singoli pod da cui vuoi ottenere i dati di diagnostica. Vedi Configurazione dioverrides.yamlper Diagnostic Collector. - Esegui Diagnostic Collector con questo comando
apigeectl.apigeectl diagnostic -f OVERRIDES_FILE
dove OVERRIDES_FILE è il percorso del file
overrides.yaml. - Controlla i log:
- Recupera i pod nello spazio dei nomi
apigee-diagnostic.kubectl get pods -n apigee-diagnostic
- Prendi nota del pod con il nome contenente
diagnostic-collector - 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.
- Recupera i pod nello spazio dei nomi
- 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.operationsu"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 Apigee Spazio dei nomi Kubernetes Nome del pod di esempio in questo contenitore apigee-cassandraCassandra apigeeapigee-cassandra-default-0istio-proxyIngress Istio istio-systemistio-ingressgateway-696879cdf8-9zzzfapigee-mart-serverMART apigeeapigee-mart-hybrid-example-d89fed1-151-jj2ux-l7nlbapigee-runtimeprocessore di messaggi apigeeapigee-runtime-hybrid-example-3b2ebf3-151-s64bh-g9qmvapigee-synchronizerSincronizzatore apigeeapigee-synchronizer-hybrid-example-3b2ebf3-151-xx4z6cg78apigee-udcaUDCA apigeeapigee-udca-hybrid-example-3b2ebf3-151-q4g2c-vnzg9apigee-watcherWatcher apigeeapigee-watcher-hybrid-example-d89fed1-151-cpu3s-sxxdfdiagnostic.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 condiagnostic.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 soloFINE.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 messaggitcpDumpda raccogliere. Apigee consiglia un valore massimo non superiore a1000.diagnostic.tcpDumpDetails.timeoutInSeconds: imposta il tempo in secondi da attendere prima chetcpDumprestituisca i messaggi.diagnostic.threadDumpDetails.delayInSeconds: il ritardo in secondi tra la raccolta di ogni dump dei thread. Deve essere utilizzato condiagnostic.threadDumpDetails.iterations.diagnostic.threadDumpDetails.iterations: Il numero di iterazioni di dump dei thread jstack da raccogliere. Deve essere utilizzato condiagnostic.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.
- Seleziona due pod di runtime qualsiasi.
- Crea la sezione
diagnosticcon 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
- Dopo aver configurato la sezione
diagnostic, esegui il raccoglitore Diagnostic.apigeectl diagnostic -f OVERRIDES_FILE
- 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.
- Seleziona due pod di runtime qualsiasi.
- Crea la sezione
diagnosticcon 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
- Dopo aver configurato la sezione
diagnostic, esegui il raccoglitore Diagnostic.apigeectl diagnostic -f OVERRIDES_FILE
- Raccogli i log ed elimina il raccoglitore Diagnostic.
apigeectl diagnostic delete -f OVERRIDES_FILE
- Seleziona due pod dal gateway di ingresso Istio.
- Riconfigura la stanza
diagnosticcon 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
- Dopo aver configurato la sezione
diagnostic, esegui il raccoglitore Diagnostic.apigeectl diagnostic -f OVERRIDES_FILE
- 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.
- Seleziona due pod di runtime qualsiasi.
- Crea la sezione
diagnosticcon 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
- Dopo aver configurato la sezione
diagnostic, esegui il raccoglitore Diagnostic.apigeectl diagnostic -f OVERRIDES_FILE
- Raccogli i log ed elimina il raccoglitore Diagnostic.
apigeectl diagnostic delete -f OVERRIDES_FILE
- Seleziona due pod di sincronizzazione qualsiasi.
- Crea la sezione
diagnosticcon 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
- Dopo aver configurato la sezione
diagnostic, esegui il raccoglitore Diagnostic.apigeectl diagnostic -f OVERRIDES_FILE
- Raccogli i log ed elimina il raccoglitore Diagnostic.
apigeectl diagnostic delete -f OVERRIDES_FILE