apigeectl diagnostic
.
Quali dati di sistema vengono acquisiti?
Il Collector diagnostico acquisisce i seguenti tipi di dati:
- Modifica dei livelli di log.
- Jstack.
- File YAML di configurazione del POD.
- Output di PS -ef.
- Dump TCP.
- Output TOP.
Che cosa succede ai dati?
Quando il Collector diagnostico 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: Cloud Storage.
Se vuoi, puoi scegliere di condividere questi dati con l'assistenza di Google Apigee quando crei un ticket di assistenza.
Prerequisiti per l'esecuzione del raccoglitore Diagnostic
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
piattaforma Google Cloud: browser Cloud Storage.
Ad esempio:
gcloud storage buckets create gs://apigee_diagnostic_data
Creating gs://apigee_diagnostic_data/...
Per le istruzioni, consulta Creare bucket di archiviazione.
Service account
Crea un account di servizio con il ruolo Amministratore di archiviazione (roles/storage.admin
) nel tuo 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:
- Creazione e gestione degli account di servizio.
- Creazione e gestione delle chiavi degli account di servizio.
- Informazioni sui ruoli: ruoli di Cloud Storage.
Utilizzo del raccoglitore Diagnostic
La sequenza per utilizzare il raccoglitore Diagnostic è:
- Configura la stanza Diagnostica nel file
overrides.yaml
per selezionare il tipo di informazioni, il contenitore Apigee e i singoli pod da cui vuoi i dati di diagnostica. Consulta Configurazione dioverrides.yaml
per il raccoglitore Diagnostic. - Esegui il Collector diagnostico con il seguente comando
apigeectl
.apigeectl diagnostic -f OVERRIDES_FILE
dove OVERRIDES_FILE è il percorso del file
overrides.yaml
. - Controlla i log:
- Ottieni 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 seguente comando:
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: Cloud Storage.
- Ottieni i pod nello spazio dei nomi
- Dopo aver raccolto i dati, elimina il raccoglitore diagnostico. Non potrai eseguirlo di nuovo
fino a quando non lo avrai eliminato.
apigeectl diagnostic delete -f OVERRIDES_FILE
Configurazione di overrides.yaml
per il raccoglitore Diagnostic
Prima di poter eseguire il Collector diagnostico, devi configurarlo nel file overrides.yaml
.
Per un riferimento completo delle proprietà di configurazione diagnostic
, consulta il
riferimento per le proprietà di configurazione:
diagnostic
.
Proprietà obbligatorie
Le seguenti proprietà sono obbligatorie per l'esecuzione del Collector diagnostico.
diagnostic.serviceAccountPath
: il percorso di un file della chiave dell'account di servizio per l'account di servizio con il ruolo Amministratore archiviazione 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 di diagnostica. 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:Valore container
Componente Apigee Spazio dei nomi Kubernetes Nome del pod di esempio in questo contenitore apigee-cassandra
Cassandra apigee
apigee-cassandra-default-0
istio-proxy
Ingresso 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 i 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à richieste solo quando l'operazione è impostata su LOGGING
Le seguenti proprietà sono obbligatorie solo quando esegui il raccoglitore Diagnostic con diagnostic.operation
impostato su LOGGING
.
diagnostic.loggerNames
: specifica per nome i logger da cui raccogliere i dati. Per la versione 1.6.0 di Apigee hybrid, l'unico valore supportato èALL
, ovvero tutti i logger. Ad esempio:diagnostic: … loggingDetails: loggerNames: - ALL
diagnostic.logLevel
: specifica la granularità dei dati di log da raccogliere. In Apigee hybrid 1.6 è supportato soloFINE
.diagnostic.logDuration
: la durata in millisecondi dei dati dei log raccolti. Un valore tipico è30000
.
Proprietà facoltative
Le seguenti proprietà sono facoltative.
diagnostic.tcpDumpDetails.maxMsgs
: imposta il numero massimo di messaggitcpDump
da raccogliere. Apigee consiglia un valore massimo non superiore a1000
.diagnostic.tcpDumpDetails.timeoutInSeconds
: imposta il periodo di tempo in secondi da attendere per far sì chetcpDump
restituisca i messaggi.diagnostic.threadDumpDetails.delayInSeconds
: il ritardo in secondi tra la raccolta di ogni dump del thread. Deve essere utilizzato condiagnostic.threadDumpDetails.iterations
.diagnostic.threadDumpDetails.iterations
: il numero di iterazioni del dump del thread jstack da raccogliere. Deve essere utilizzato condiagnostic.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 Collector diagnostico in alcune situazioni comuni.
Latenza del proxy elevata
In questo caso, Apigee-runtime impiega molto tempo per elaborare le richieste, causando latenze elevate dei proxy per i clienti. Devi raccogliere l'output di Jstack e TOP.
- Seleziona due pod di runtime.
- 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
- Dopo aver configurato la stanza
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 su apigee-runtime e sui pod gateway di ingresso.
- Seleziona due pod di runtime.
- 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
- Dopo aver configurato la stanza
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
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
- Dopo aver configurato la stanza
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 modificare i livelli di log per 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 Diagnostic Collector due volte, una volta in Apigee Runtime e poi in Apigee Synchronizer.
- Seleziona due pod di runtime.
- 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
- Dopo aver configurato la stanza
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.
- 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
- Dopo aver configurato la stanza
diagnostic
, esegui il raccoglitore Diagnostic.apigeectl diagnostic -f OVERRIDES_FILE
- Raccogli i log ed elimina il raccoglitore Diagnostic.
apigeectl diagnostic delete -f OVERRIDES_FILE