Stai visualizzando la documentazione relativa a Apigee e Apigee ibrido.
Visualizza la documentazione di
Apigee Edge.
Fornire informazioni dettagliate e richieste nella richiesta di assistenza consente al team di assistenza di Google Cloud di rispondere più facilmente in modo rapido ed efficiente. Se nella tua richiesta di assistenza mancano dettagli critici, dobbiamo chiedere maggiori informazioni, il che potrebbe comportare la ripetizione di più volte. Questa operazione richiede più tempo e può comportare ritardi nella risoluzione dei problemi. Questa guida alle best practice ti fornisce le informazioni di cui abbiamo bisogno per risolvere più rapidamente la tua richiesta di assistenza tecnica.
Descrizione del problema
Un problema deve contenere informazioni che spiegano i dettagli di ciò che è accaduto rispetto a ciò che ci si aspettava che si verificasse, nonché quando e come si è verificato. Una richiesta di assistenza efficace deve contenere le seguenti informazioni chiave per ciascuno dei prodotti Apigee:
Informazioni chiave | Descrizione | Apigee su Google Cloud | Apigee hybrid |
---|---|---|---|
Prodotto | Prodotto Apigee specifico in cui si verifica il problema, incluse informazioni sulla versione, ove applicabile. |
|
|
Dettagli del problema | Descrizione chiara e dettagliata che chiarisca il problema, incluso l'eventuale messaggio di errore completo. |
|
|
Ora | Il timestamp specifico in cui è iniziato il problema e la sua durata. |
|
|
Configurazione | Informazioni dettagliate in cui si verifica il problema. |
|
|
Le seguenti sezioni descrivono questi concetti in modo più dettagliato.
Prodotto
Esistono diversi prodotti Apigee, Apigee su Google Cloud e Apigee ibrido, quindi abbiamo bisogno di informazioni specifiche in merito al prodotto che presenta il problema.
La seguente tabella fornisce alcuni esempi che mostrano informazioni complete nella colonna COSA FARE e informazioni incomplete nella colonna COSA NON FARE:
Cose da fare | COSA NON FARE |
---|---|
Deployment del proxy API OAuth2 non riuscito nella nostra organizzazione Apigee su Google Cloud ... |
Deployment del proxy API non riuscito (Abbiamo bisogno di sapere il prodotto Apigee in cui riscontri il problema.) |
Riceviamo il seguente errore durante l'accesso a Cassandra utilizzando cqlsh su Apigee versione ibrida 1.3 ... |
Impossibile accedere a Cassandra utilizzando (Informazioni sulla versione ibrida mancanti) |
Dettagli del problema
Fornisci informazioni precise sul problema osservato, inclusi l'eventuale messaggio di errore e il comportamento previsto ed effettivo osservato.
La seguente tabella fornisce alcuni esempi che mostrano informazioni complete nella colonna COSA FARE e informazioni incomplete nella colonna COSA NON FARE:
Cose da fare | COSA NON FARE |
---|---|
Il nuovo proxy
|
Il nuovo proxy (Il nome del proxy è sconosciuto. Non è chiaro se il proxy restituisce un errore o una risposta imprevista). |
I nostri clienti ricevono
|
I nostri clienti ricevono
(La semplice comunicazione degli errori |
Tempo
Il tempo è un'informazione molto importante. È importante che il tecnico del servizio di assistenza sappia quando hai notato il problema per la prima volta, quanto è durato e se il problema si verifica ancora.
Il tecnico dell'assistenza che risolve il problema potrebbe non essere nel tuo fuso orario, quindi dichiarazioni relative sull'ora rendono il problema più difficile da diagnosticare. Pertanto, si consiglia di utilizzare il formato ISO 8601 per data e ora, in modo da fornire informazioni precise sull'ora in cui è stato rilevato il problema.
La seguente tabella fornisce alcuni esempi che mostrano data e ora precisi in cui si è verificato il problema nella colonna DOS e informazioni ambigue o poco chiare su quando si è verificato il problema nella colonna COSA NON FARE:
Cose da fare | COSA NON FARE |
---|---|
Un numero enorme di 503s è stato osservato ieri tra le
17:30 PDT 2020-11-06 e le 17:35 PDT 2020-11-06... |
Un numero enorme di Siamo costretti a utilizzare la data implicita e non è chiaro in quale fuso orario è stato rilevato il problema. |
Sono state osservate alte latenze sui seguenti proxy API dalle 2020-11-09 15:30 IST al 2020-11-09 18:10 IST ... |
La scorsa settimana sono state osservate latenze elevate su alcuni proxy API. Non è chiaro in quale giorno e durata si sia verificato il problema nell'ultima settimana. |
Configurazione
Dobbiamo conoscere i dettagli del punto esatto in cui stai riscontrando il problema. A seconda del prodotto che utilizzi, abbiamo bisogno delle seguenti informazioni:
- Se utilizzi Apigee su Google Cloud, potresti avere più di un'organizzazione, quindi abbiamo bisogno di conoscere l'organizzazione specifica e altri dettagli in cui riscontri il problema:
- Nomi di organizzazioni e ambienti
- Nome e numeri di revisione del proxy API (per errori delle richieste API)
- Se utilizzi ibrido, è possibile che tu stia usando una delle tante piattaforme ibride e delle topologie di installazione supportate. Dobbiamo quindi sapere quale piattaforma ibrida e topologia stai utilizzando, compresi dettagli come il numero di data center e nodi.
La seguente tabella fornisce alcuni esempi che mostrano informazioni complete nella colonna COSA FARE e informazioni incomplete nella colonna COSA FARE:
Cose da fare | COSA NON FARE |
---|---|
Dettagli di configurazione Apigee:
I dettagli dell'API che non funziona sono i seguenti:
Errore:
|
(Non fornisce alcuna informazione sul prodotto utilizzato, da quando il problema viene osservato o eventuali dettagli di configurazione.) |
Il debug non riesce a causa del seguente errore nella versione ibrida Apigee 1.3 Errore:
Dettagli della configurazione ibrida Apigee:
| Il debug non riesce su Apigee ibrido. |
Artefatti utili
Fornendoci gli artefatti relativi al problema accelererai la risoluzione, in quanto ci aiuterà a comprendere il comportamento esatto che stai osservando e a ottenere maggiori informazioni al riguardo.
Questa sezione descrive alcuni elementi utili che sono utili per tutti i prodotti Apigee:
Artefatti comuni per tutti i prodotti Apigee
I seguenti artefatti sono utili per tutti i prodotti Apigee: Apigee su Google Cloud e Apigee ibrido:
Artefatto | Descrizione |
---|---|
Output dello strumento di debug | L'output dello strumento di debug contiene informazioni dettagliate sulle richieste API che passano attraverso i prodotti Apigee. Ciò è utile per eventuali errori di runtime come 4XX ,
5XX e problemi di latenza. |
Screenshot | Gli screenshot aiutano a comunicare il contesto del comportamento effettivo o dell'errore osservato. È utile per eventuali errori o problemi osservati, ad esempio nell'interfaccia utente o in Analytics. |
HAR (HTTP ARchive) | HAR è un file acquisito dagli strumenti della sessione HTTP per il debug di eventuali problemi relativi all'interfaccia utente. L'acquisizione può essere eseguita utilizzando browser come Chrome, Firefox o Internet Explorer. |
tcpdumps |
Lo strumento tcpdump acquisisce i pacchetti TCP/IP trasferiti o ricevuti sulla rete. Ciò è utile per eventuali problemi relativi alla rete, come errori di handshake TLS, errori di 502 , problemi di latenza e così via. |
Artefatti aggiuntivi per ambienti ibridi
Per il modello ibrido, potrebbero essere necessari alcuni elementi aggiuntivi che consentano una diagnosi più rapida dei problemi.
Artefatto | Descrizione |
---|---|
Piattaforma ibrida Apigee | Specifica una delle seguenti
piattaforme ibride supportate che viene utilizzata:
|
Versioni dei componenti ibridi e dipendenti di Apigee |
|
Topologia di rete | Il diagramma della topologia di installazione di Apigee che descrive la tua configurazione ibrida, inclusi tutti i data center, i cluster Kubernetes, gli spazi dei nomi e i pod. |
Override del file YAML | Il file overrides.yaml utilizzato in ogni data center per l'installazione del piano di runtime ibrido Apigee.
|
Stato del deployment ibrido Apigee |
L'output dei seguenti comandi in ciascun data center/cluster Kubernetes:
|
Log dei componenti ibridi Apigee |
Fornisci i link ai log di StackDriver per i componenti ibridi OPPURE Puoi recuperare i log dei componenti ibridi Apigee utilizzando i seguenti comandi in ciascun data center/cluster Kubernetes e condividerli con noi:
|
Descrivi i log |
Informazioni dettagliate sul pod. Ciò è utile soprattutto se noti problemi come il blocco dei pod nello stato
|
Cloud Monitoring |
|
Imperdibile raccolta ibrida Apigee
Puoi anche eseguire lo script Must-collect in base ai comandi elencati di seguito:
###--- "kubectl config" commands to get the config details of the whole Apigee Hybrid cluster ---#### kubectl config get-clusters 2>&1 | tee /tmp/k_config_get_clusters_$(date +%Y.%m.%d_%H.%M.%S).txt kubectl config get-contexts 2>&1 | tee /tmp/k_config_get_contexts_$(date +%Y.%m.%d_%H.%M.%S).txt kubectl config get-users 2>&1 | tee /tmp/k_config_get_users_$(date +%Y.%m.%d_%H.%M.%S).txt kubectl config view 2>&1 | tee /tmp/k_config_view_$(date +%Y.%m.%d_%H.%M.%S).txt ### --- Collect all details of all nodes in the Kubernetes cluster.---### kubectl describe node 2>&1 | tee /tmp/k_describe_node_$(date +%Y.%m.%d_%H.%M.%S).txt ###--- "kubectl get -A " commands to get CRD details for the whole Apigee Hybrid setup ---#### kubectl get clusterissuers -A -o wide 2>&1 | tee /tmp/k_get_clusterissuers_all$(date +%Y.%m.%d_%H.%M.%S).txt kubectl get certificate -A -o wide 2>&1 | tee /tmp/k_get_certificate_all_$(date +%Y.%m.%d_%H.%M.%S).txt kubectl get certificaterequest -A -o wide 2>&1 | tee /tmp/k_get_certificaterequest_all_$(date +%Y.%m.%d_%H.%M.%S).txt kubectl get crd -A 2>&1 | tee /tmp/k_get_crd_all_$(date +%Y.%m.%d_%H.%M.%S).txt kubectl get ConfigMap -A 2>&1 | tee /tmp/k_get_ConfigMap_all_$(date +%Y.%m.%d_%H.%M.%S).txt kubectl get ClusterRole -A -o wide 2>&1 | tee /tmp/k_get_clusterrole_all_$(date +%Y.%m.%d_%H.%M.%S).txt kubectl get ClusterRoleBinding -A -o wide 2>&1 | tee /tmp/k_get_clusterrole_binding_all_$(date +%Y.%m.%d_%H.%M.%S).txt kubectl get Deployments -A -o wide >&1 | tee /tmp/k_get_deployments_all_$(date +%Y.%m.%d_%H.%M.%S).txt kubectl get events -A -o wide 2>&1 | tee /tmp/k_get_events_all_$(date +%Y.%m.%d_%H.%M.%S).txt kubectl get endpoints -A 2>&1 | tee /tmp/k_get_endpoints_all_$(date +%Y.%m.%d_%H.%M.%S).txt kubectl get issuers -A -o wide 2>&1 | tee /tmp/k_get_issuers_all_$(date +%Y.%m.%d_%H.%M.%S).txt kubectl get mutatingwebhookconfigurations 2>&1 | tee /tmp/k_get_mutatingwebhookconfigurations_$(date +%Y.%m.%d_%H.%M.%S).txt kubectl get nodes -o wide --show-labels 2>&1 | tee /tmp/k_get_nodes_labels_$(date +%Y.%m.%d_%H.%M.%S).txt kubectl get ns 2>&1 | tee /tmp/k_get_namespace_$(date +%Y.%m.%d_%H.%M.%S).txt kubectl get PriorityClass -A -o wide 2>&1 | tee /tmp/k_get_PriorityClass_all_$(date +%Y.%m.%d_%H.%M.%S).txt kubectl get pv -A -o wide 2>&1 | tee /tmp/k_get_pv_all_$(date +%Y.%m.%d_%H.%M.%S).txt kubectl get pvc -A -o wide 2>&1 | tee /tmp/k_get_pvc_all_$(date +%Y.%m.%d_%H.%M.%S).txt kubectl get Role -A -o wide 2>&1 | tee /tmp/k_get_role_all_$(date +%Y.%m.%d_%H.%M.%S).txt kubectl get RoleBinding -A -o wide 2>&1 | tee /tmp/k_get_Role_Binding_all_$(date +%Y.%m.%d_%H.%M.%S).txt kubectl get replicaset -A -o wide 2>&1 | tee /tmp/k_get_replicaset_all_$(date +%Y.%m.%d_%H.%M.%S).txt kubectl get sa -A -o wide 2>&1 | tee /tmp/k_get_service_accounts_all_$(date +%Y.%m.%d_%H.%M.%S).txt kubectl get services -A -o wide 2>&1 | tee /tmp/k_get_services_all_$(date +%Y.%m.%d_%H.%M.%S).txt kubectl get svc -A 2>&1 | tee /tmp/k_get_svc_all$(date +%Y.%m.%d_%H.%M.%S).txt kubectl get secrets -A 2>&1 | tee /tmp/k_get_secrets_all_$(date +%Y.%m.%d_%H.%M.%S).txt kubectl get validatingwebhookconfigurations -A 2>&1 | tee /tmp/k_get_validatingwebhookconfigurations_all$(date +%Y.%m.%d_%H.%M.%S).txt kubectl get validatingwebhookconfigurations apigee-validating-webhook-configuration 2>&1 | tee /tmp/k_get_apigee-validating-webhook-configuration_$(date +%Y.%m.%d_%H.%M.%S).txt ### --- List top resource consuming nodes and pods ---#### kubectl top nodes 2>&1 | tee /tmp/k_top_nodes_$(date +%Y.%m.%d_%H.%M.%S).txt kubectl top pod -A --containers 2>&1 | tee /tmp/k_top_pod_all_containers_$(date +%Y.%m.%d_%H.%M.%S).txt ###----- "kubectl get" commands to fetch list of all CRD for "apigee" namespace ----- ##### kubectl get all -n apigee -o wide 2>&1 | tee /tmp/k_get_all_n_apigee_$(date +%Y.%m.%d_%H.%M.%S).txt kubectl get ad -n apigee 2>&1 | tee /tmp/k_get_ad_n_apigee_$(date +%Y.%m.%d_%H.%M.%S).txt kubectl get apigeeorganization -n apigee 2>&1 | tee /tmp/k_get_apigeeorganization_n_apigee_$(date +%Y.%m.%d_%H.%M.%S).txt kubectl get apigeeenv -n apigee 2>&1 | tee /tmp/k_get_apigeeenv_n_apigee_$(date +%Y.%m.%d_%H.%M.%S).txt kubectl get apigeeds -n apigee 2>&1 | tee /tmp/k_get_apigeeds_n_apigee_$(date +%Y.%m.%d_%H.%M.%S).txt kubectl get apigeedatastore -n apigee 2>&1 | tee /tmp/k_get_apigeedatastore_n_apigee_$(date +%Y.%m.%d_%H.%M.%S).txt kubectl get ApigeeDeployment -n apigee 2>&1 | tee /tmp/k_get_apigeedeployment_n_apigee_$(date +%Y.%m.%d_%H.%M.%S).txt kubectl get ApigeeRedis -n apigee 2>&1 | tee /tmp/k_get_ApigeeRedis_n_apigee_$(date +%Y.%m.%d_%H.%M.%S).txt kubectl get ApigeeRoute -n apigee 2>&1 | tee /tmp/k_get_ApigeeRoute_n_apigee_$(date +%Y.%m.%d_%H.%M.%S).txt kubectl get ApigeeRouteConfig -n apigee 2>&1 | tee /tmp/k_get_ApigeeRoutesconfig_n_apigee_$(date +%Y.%m.%d_%H.%M.%S).txt kubectl get Apigeetelemetry -n apigee 2>&1 | tee /tmp/k_get_Apigeetelemetry_n_apigee_$(date +%Y.%m.%d_%H.%M.%S).txt kubectl get apigeeissues -n apigee 2>&1 | tee /tmp/k_get_apigeeissues_n_apigee_$(date +%Y.%m.%d_%H.%M.%S).txt kubectl get ControllerRevision -n apigee -o wide 2>&1 | tee /tmp/k_get_ControllerRevision_n_apigee_$(date +%Y.%m.%d_%H.%M.%S).txt kubectl get cronjob -n apigee -o wide 2>&1 | tee /tmp/k_get_cronjob_n_apigee_$(date +%Y.%m.%d_%H.%M.%S).txt kubectl get gateway -n apigee 2>&1 | tee /tmp/k_get_gateway_n_apigee_$(date +%Y.%m.%d_%H.%M.%S).txt kubectl get PodDisruptionBudget -n apigee -o wide 2>&1 | tee /tmp/k_get_PodDisruptionBudget_n_apigee_$(date +%Y.%m.%d_%H.%M.%S).txt kubectl get sc -n apigee -o wide 2>&1 | tee /tmp/k_get_storageclass_n_apigee_$(date +%Y.%m.%d_%H.%M.%S).txt kubectl get sts -n apigee 2>&1 | tee /tmp/k_get_sts_n_apigee_$(date +%Y.%m.%d_%H.%M.%S).txt kubectl get volumesnapshot -n apigee -o wide 2>&1 | tee /tmp/k_get_volumesnapshot_n_apigee_$(date +%Y.%m.%d_%H.%M.%S).txt ###----- "kubectl describe" commands to fetch details of all CRD for "apigee" namespace ----- ##### for p in $(kubectl -n apigee get apigeeorganization --no-headers -o custom-columns=":metadata.name") ; do kubectl describe apigeeorganization ${p} -n apigee 2>&1 | tee /tmp/k_desc_apigeeorganization_n_apigee_${p}_$(date +%Y.%m.%d_%H.%M.%S).txt ; done for p in $(kubectl -n apigee get apigeeenv --no-headers -o custom-columns=":metadata.name") ; do kubectl describe apigeeenv ${p} -n apigee 2>&1 | tee /tmp/k_desc_apigeeenv_n_apigee_${p}_$(date +%Y.%m.%d_%H.%M.%S).txt ; done for p in $(kubectl -n apigee get apigeeds --no-headers -o custom-columns=":metadata.name") ; do kubectl describe apigeeds ${p} -n apigee 2>&1 | tee /tmp/k_desc_apigeeds_n_apigee_${p}_$(date +%Y.%m.%d_%H.%M.%S).txt ; done for p in $(kubectl -n apigee get apigeedatastore --no-headers -o custom-columns=":metadata.name") ; do kubectl describe apigeedatastore ${p} -n apigee 2>&1 | tee /tmp/k_desc_apigeedatastore_n_apigee_${p}_$(date +%Y.%m.%d_%H.%M.%S).txt ; done for p in $(kubectl -n apigee get ApigeeDeployment --no-headers -o custom-columns=":metadata.name") ; do kubectl describe ApigeeDeployment ${p} -n apigee 2>&1 | tee /tmp/k_desc_ApigeeDeployment_n_apigee_${p}_$(date +%Y.%m.%d_%H.%M.%S).txt ; done for p in $(kubectl -n apigee get ApigeeRedis --no-headers -o custom-columns=":metadata.name") ; do kubectl describe ApigeeRedis ${p} -n apigee 2>&1 | tee /tmp/k_desc_ApigeeRedis_n_apigee_${p}_$(date +%Y.%m.%d_%H.%M.%S).txt ; done for p in $(kubectl -n apigee get ApigeeRoute --no-headers -o custom-columns=":metadata.name") ; do kubectl describe ApigeeRoute ${p} -n apigee 2>&1 | tee /tmp/k_desc_ApigeeRoute_n_apigee_${p}_$(date +%Y.%m.%d_%H.%M.%S).txt ; done for p in $(kubectl -n apigee get ApigeeRouteConfig --no-headers -o custom-columns=":metadata.name") ; do kubectl describe ApigeeRouteConfig ${p} -n apigee 2>&1 | tee /tmp/k_desc_ApigeeRouteConfig_n_apigee_${p}_$(date +%Y.%m.%d_%H.%M.%S).txt ; done for p in $(kubectl -n apigee get Apigeetelemetry --no-headers -o custom-columns=":metadata.name") ; do kubectl describe Apigeetelemetry ${p} -n apigee 2>&1 | tee /tmp/k_desc_Apigeetelemetry_n_apigee_${p}_$(date +%Y.%m.%d_%H.%M.%S).txt ; done for p in $(kubectl -n apigee get apigeeissues --no-headers -o custom-columns=":metadata.name") ; do kubectl describe apigeeissues ${p} -n apigee 2>&1 | tee /tmp/k_desc_apigeeissues_n_apigee_${p}_$(date +%Y.%m.%d_%H.%M.%S).txt ; done for p in $(kubectl -n apigee get ControllerRevision --no-headers -o custom-columns=":metadata.name") ; do kubectl -n apigee describe ControllerRevision ${p} 2>&1 | tee /tmp/k_desc_ControllerRevision_n_apigee_${p}_$(date +%Y.%m.%d_%H.%M.%S).txt ; done for p in $(kubectl -n apigee get certificate --no-headers -o custom-columns=":metadata.name") ; do kubectl describe certificate ${p} -n apigee 2>&1 | tee /tmp/k_desc_certificate_n_apigee_${p}_$(date +%Y.%m.%d_%H.%M.%S).txt ; done for p in $(kubectl -n apigee get cronjob --no-headers -o custom-columns=":metadata.name") ; do kubectl describe cronjob ${p} -n apigee 2>&1 | tee /tmp/k_desc_cronjob_n_apigee_${p}_$(date +%Y.%m.%d_%H.%M.%S).txt ; done for p in $(kubectl -n apigee get daemonset --no-headers -o custom-columns=":metadata.name") ; do kubectl -n apigee describe daemonset ${p} 2>&1 | tee /tmp/k_desc_daemonset_n_apigee_${p}_$(date +%Y.%m.%d_%H.%M.%S).txt ; done for p in $(kubectl -n apigee get deployments --no-headers -o custom-columns=":metadata.name") ; do kubectl -n apigee describe deployments ${p} 2>&1 | tee /tmp/k_desc_deployment_n_apigee_${p}_$(date +%Y.%m.%d_%H.%M.%S).txt ; done for p in $(kubectl -n apigee get hpa --no-headers -o custom-columns=":metadata.name") ; do kubectl describe hpa ${p} -n apigee 2>&1 | tee /tmp/k_desc_hpa_n_apigee_${p}_$(date +%Y.%m.%d_%H.%M.%S).txt ; done for p in $(kubectl -n apigee get jobs --no-headers -o custom-columns=":metadata.name") ; do kubectl describe jobs ${p} -n apigee 2>&1 | tee /tmp/k_desc_jobs_n_apigee_${p}_$(date +%Y.%m.%d_%H.%M.%S).txt ; done for p in $(kubectl -n apigee get po --no-headers -o custom-columns=":metadata.name") ; do kubectl -n apigee describe po ${p} 2>&1 | tee /tmp/k_desc_pod_n_apigee_${p}_$(date +%Y.%m.%d_%H.%M.%S).txt ; done for p in $(kubectl -n apigee get PodDisruptionBudget --no-headers -o custom-columns=":metadata.name") ; do kubectl -n apigee describe PodDisruptionBudget ${p} 2>&1 | tee /tmp/k_desc_PodDisruptionBudget_n_apigee_${p}_$(date +%Y.%m.%d_%H.%M.%S).txt ; done for p in $(kubectl -n apigee get pv --no-headers -o custom-columns=":metadata.name") ; do kubectl -n apigee describe pv ${p} 2>&1 | tee /tmp/k_desc_pv_n_apigee_${p}_$(date +%Y.%m.%d_%H.%M.%S).txt; done for p in $(kubectl -n apigee get pvc --no-headers -o custom-columns=":metadata.name") ; do kubectl -n apigee describe pvc ${p} 2>&1 | tee /tmp/k_desc_pvc_n_apigee_${p}_$(date +%Y.%m.%d_%H.%M.%S).txt; done for p in $(kubectl -n apigee get rs --no-headers -o custom-columns=":metadata.name") ; do kubectl describe rs ${p} -n apigee 2>&1 | tee /tmp/k_desc_replicaset_n_apigee_${p}_$(date +%Y.%m.%d_%H.%M.%S).txt ; done for p in $(kubectl -n apigee get sc --no-headers -o custom-columns=":metadata.name") ; do kubectl -n apigee describe sc ${p} 2>&1 | tee /tmp/k_desc_storageclass_n_apigee_${p}_$(date +%Y.%m.%d_%H.%M.%S).txt; done for p in $(kubectl -n apigee get sts --no-headers -o custom-columns=":metadata.name") ; do kubectl describe sts ${p} -n apigee 2>&1 | tee /tmp/k_desc_sts_n_apigee_${p}_$(date +%Y.%m.%d_%H.%M.%S).txt ; done for p in $(kubectl -n apigee get secrets --no-headers -o custom-columns=":metadata.name") ; do kubectl -n apigee describe secrets ${p} 2>&1 | tee /tmp/k_desc_secrets_n_apigee${p}_$(date +%Y.%m.%d_%H.%M.%S).txt; done for p in $(kubectl -n apigee get services --no-headers -o custom-columns=":metadata.name") ; do kubectl describe service ${p} -n apigee 2>&1 | tee /tmp/k_desc_services_n_apigee_${p}_$(date +%Y.%m.%d_%H.%M.%S).txt ; done for p in $(kubectl -n apigee get sa --no-headers -o custom-columns=":metadata.name") ; do kubectl describe sa ${p} -n apigee 2>&1 | tee /tmp/k_desc_service_account_n_apigee_${p}_$(date +%Y.%m.%d_%H.%M.%S).txt ; done for p in $(kubectl -n apigee get svc --no-headers -o custom-columns=":metadata.name") ; do kubectl describe svc ${p} -n apigee 2>&1 | tee /tmp/k_desc_svc_n_apigee_${p}_$(date +%Y.%m.%d_%H.%M.%S).txt ; done ###----- "kubectl logs" command to fetch logs of all containers in the "apigee" namespace ----- ##### for p in $(kubectl -n apigee get po --no-headers -o custom-columns=":metadata.name") ; do kubectl -n apigee logs ${p} --all-containers 2>&1 | tee /tmp/k_logs_n_apigee_${p}_$(date +%Y.%m.%d_%H.%M.%S).log ; done ###----- "kubectl get" commands for "apigee-system" namespace ----- ##### kubectl get all -n apigee-system -o wide 2>&1 | tee /tmp/k_get_all_n_apigee_system_$(date +%Y.%m.%d_%H.%M.%S).txt kubectl get jobs -o wide -n apigee-system 2>&1 | tee /tmp/k_get_jobs_n_apigee_system_$(date +%Y.%m.%d_%H.%M.%S).txt ###----- "kubectl describe" commands for "apigee-system" namespace ----- ##### for p in $(kubectl -n apigee-system get certificate --no-headers -o custom-columns=":metadata.name") ; do kubectl describe certificate ${p} -n apigee-system 2>&1 | tee /tmp/k_desc_certificate_n_apigee_system_${p}_$(date +%Y.%m.%d_%H.%M.%S).txt ; done for p in $(kubectl -n apigee-system get deployment --no-headers -o custom-columns=":metadata.name") ; do kubectl describe deployment ${p} -n apigee-system 2>&1 | tee /tmp/k_desc_deployment_n_apigee_system_${p}_$(date +%Y.%m.%d_%H.%M.%S).txt ; done for p in $(kubectl -n apigee-system get jobs --no-headers -o custom-columns=":metadata.name") ; do kubectl describe jobs ${p} -n apigee-system 2>&1 | tee /tmp/k_desc_jobs_n_apigee_system_${p}_$(date +%Y.%m.%d_%H.%M.%S).txt ; done for p in $(kubectl -n apigee-system get po --no-headers -o custom-columns=":metadata.name") ; do kubectl -n apigee-system describe po ${p} 2>&1 | tee /tmp/k_desc_pod_n_apigee_system_${p}_$(date +%Y.%m.%d_%H.%M.%S).txt ; done for p in $(kubectl -n apigee-system get rs --no-headers -o custom-columns=":metadata.name") ; do kubectl describe rs ${p} -n apigee-system 2>&1 | tee /tmp/k_desc_replicaset_n_apigee_system_${p}_$(date +%Y.%m.%d_%H.%M.%S).txt ; done for p in $(kubectl -n apigee-system get rolebinding --no-headers -o custom-columns=":metadata.name") ; do kubectl describe rolebinding ${p} -n apigee-system 2>&1 | tee /tmp/k_desc_rolebinding_n_apigee_system_${p}_$(date +%Y.%m.%d_%H.%M.%S).txt ; done for p in $(kubectl -n apigee-system get services --no-headers -o custom-columns=":metadata.name") ; do kubectl describe service ${p} -n apigee-system 2>&1 | tee /tmp/k_desc_services_n_apigee_system_${p}_$(date +%Y.%m.%d_%H.%M.%S).txt ; done for p in $(kubectl -n apigee-system get sa --no-headers -o custom-columns=":metadata.name") ; do kubectl describe sa ${p} -n apigee-system 2>&1 | tee /tmp/k_desc_serviceaccount_n_apigee_system_${p}_$(date +%Y.%m.%d_%H.%M.%S).txt ; done for p in $(kubectl -n apigee-system get secrets --no-headers -o custom-columns=":metadata.name") ; do kubectl describe secrets ${p} -n apigee-system 2>&1 | tee /tmp/k_desc_secrets_n_apigee_system_${p}_$(date +%Y.%m.%d_%H.%M.%S).txt ; done ###----- "kubectl logs" command for "apigee-system" namespace ----- ##### for p in $(kubectl -n apigee-system get po --no-headers -o custom-columns=":metadata.name") ; do kubectl -n apigee-system logs ${p} --all-containers 2>&1 | tee /tmp/k_logs_n_apigee_system_${p}_$(date +%Y.%m.%d_%H.%M.%S).log ; done ###----- "kubectl get" command for "cert-manager" namespace ----- ##### kubectl get all -n cert-manager -o wide 2>&1 | tee /tmp/k_get_all_n_cert_manager_$(date +%Y.%m.%d_%H.%M.%S).txt kubectl get crd -n cert-manager 2>&1 | tee /tmp/k_get_crd_n_cert_manager_$(date +%Y.%m.%d_%H.%M.%S).txt ###----- "kubectl describe" command for "cert-manager" namespace ----- ##### for p in $(kubectl -n cert-manager get deployment --no-headers -o custom-columns=":metadata.name") ; do kubectl -n cert-manager describe deployment $(p) 2>&1 | tee /tmp/k_desc_deployment_n_cert_manager_${p}_$(date +%Y.%m.%d_%H.%M.%S).txt ; done for p in $(kubectl -n cert-manager get endpoints --no-headers -o custom-columns=":metadata.name") ; do kubectl describe endpoints ${p} -n cert-manager 2>&1 | tee /tmp/k_desc_endpoints_n_cert_manager_${p}_$(date +%Y.%m.%d_%H.%M.%S).txt ; done for p in $(kubectl -n cert-manager get po --no-headers -o custom-columns=":metadata.name") ; do kubectl -n cert-manager describe po ${p} 2>&1 | tee /tmp/k_desc_po_n_cert_manager_${p}_$(date +%Y.%m.%d_%H.%M.%S).txt ; done for p in $(kubectl -n cert-manager get rs --no-headers -o custom-columns=":metadata.name") ; do kubectl describe rs ${p} -n cert-manager 2>&1 | tee /tmp/k_desc_replicaset_n_cert_manager_${p}_$(date +%Y.%m.%d_%H.%M.%S).txt ; done for p in $(kubectl -n cert-manager get sa --no-headers -o custom-columns=":metadata.name") ; do kubectl describe sa ${p} -n cert-manager 2>&1 | tee /tmp/k_desc_serviceaccount_n_cert_manager_${p}_$(date +%Y.%m.%d_%H.%M.%S).txt ; done for p in $(kubectl -n cert-manager get secrets --no-headers -o custom-columns=":metadata.name") ; do kubectl describe secrets ${p} -n cert-manager 2>&1 | tee /tmp/k_desc_secrets_n_cert_manager_${p}_$(date +%Y.%m.%d_%H.%M.%S).txt ; done for p in $(kubectl -n cert-manager get services --no-headers -o custom-columns=":metadata.name") ; do kubectl describe service ${p} -n cert-manager 2>&1 | tee /tmp/k_desc_service_n_cert_manager_${p}_$(date +%Y.%m.%d_%H.%M.%S).txt ; done for p in $(kubectl -n cert-manager get svc --no-headers -o custom-columns=":metadata.name") ; do kubectl describe svc ${p} -n cert-manager 2>&1 | tee /tmp/k_desc_svc_n_cert_manager_${p}_$(date +%Y.%m.%d_%H.%M.%S).txt ; done ###----- "kubectl logs" command for "cert-manager" namespace ----- ##### for p in $(kubectl -n cert-manager get po --no-headers -o custom-columns=":metadata.name") ; do kubectl -n cert-manager logs ${p} --all-containers 2>&1 | tee /tmp/k_logs_n_cert_manager_${p}_$(date +%Y.%m.%d_%H.%M.%S).log ; doneUna volta generati i log, comprimi tutto il file di output in un'unica sfera tar usando il comando seguente:
# tar -cvzf /tmp/apigee_hybrid_logs_$(date +%Y.%m.%d_%H.%M).tar.gz /tmp/k_*
Nel caso in cui la dimensione del file tar sia superiore a 25 MB, puoi caricarlo su Google Drive e condividere il link con noi. In alternativa, puoi utilizzare il comando split per suddividere i file di grandi dimensioni in blocchi da 25 MB che possono essere caricati sul portale di assistenza.
# split -b 25M diagnostic.tar.gz "diagnostic.tar.gz.part"
Modelli di richieste e casi di esempio
Questa sezione fornisce modelli di richieste e casi di esempio per diversi prodotti in base alle best practice descritte in questo documento:
Apigee Cloud
Modello
Questa sezione fornisce un modello di esempio per Apigee su Google Cloud.
Problema:
<Fornisci una descrizione dettagliata del problema o del comportamento osservato da parte tua. Ove applicabile, includi il nome e la versione del prodotto.>
Messaggio di errore:
<Includi l'eventuale messaggio di errore completo osservato>
Ora di inizio del problema (formato ISO 8601):
Ora di fine del problema (formato ISO 8601):
Dettagli di configurazione Apigee:
Nomi organizzazione:
Nomi di ambiente:
Nomi proxy API:
Numeri di revisione:
Passaggi per la riproduzione:
<Fornisci i passaggi per riprodurre il problema, ove possibile>
Informazioni diagnostiche:
<Elenco dei file allegati>
Caso di esempio
Questa sezione fornisce un caso di esempio per Apigee su Google Cloud.
Problema:
Stiamo riscontrando un elevato numero di errori 503 di servizio non disponibile nella nostra organizzazione Cloud pubblico. Puoi esaminare il problema e risolverlo o darci consigli su come risolverlo?
Messaggio di errore:
{"fault":{"faultstring":"The Service is temporarily available", "detail":{"errorcode":"messaging.adaptors.http.flow.ServiceUnavailable"}}}
Ora di inizio del problema (formato ISO 8601): 2020-10-04 06:30 IST
Ora di fine del problema (formato ISO 8601): il problema è ancora in corso.
Dettagli di configurazione di Apigee Cloud:
Nomi organizzazione: myorg
Nomi di ambiente: dev
Nomi proxy API: myproxy
Numeri di revisione: 3
Passaggi per la riproduzione:
Esegui questo comando curl
per riprodurre il problema:
curl -X GET 'https://myorg-dev.apigee.net/v1/myproxy'
Informazioni diagnostiche:
Output dello strumento di debug (trace-503.xml
)
Ibrido
Modello
Questa sezione fornisce un modello di esempio per Apigee hybrid.
Problema:
<Fornisci una descrizione dettagliata del problema o del comportamento osservato da parte tua. Ove applicabile, includi il nome e la versione del prodotto.>
Messaggio di errore:
<Includi l'eventuale messaggio di errore completo osservato>
Ora di inizio del problema (formato ISO 8601):
Ora di fine del problema (formato ISO 8601):
Dettagli della configurazione ibrida Apigee:
- Piattaforma ibrida Apigee:
<Fornisci informazioni sulla piattaforma in cui hai installato il modello ibrido e sulla sua versione.>
- Progetto Google Cloud, organizzazione e ambiente ibridi:
ID progetto Google Cloud:
<Se utilizzi Google Kubernetes Engine (GKE), assicurati di fornire l'ID progetto in cui si trovano i cluster. Se utilizzi GKE On-Prem, Azure Kubernetes Service o Amazon EKS, fornisci l'ID progetto a cui invii i log.>
Organizzazione ibrida Apigee:
Apigee ibrido env: - Versioni ibride di Apigee e altre versioni dell'interfaccia a riga di comando:
Versione dell'interfaccia a riga di comando ibrida Apigee (apigeectl
):
Versione Kubectl: - Dettagli nome cluster Kubernetes:
k8sCluster:
nome:
regione: - Topologia di rete:
<Collega la topologia di rete che descrive la configurazione della tua soluzione ibrida Apigee, inclusi data center, cluster Kubernetes, spazi dei nomi e pod.> - Override del file YAML:
<Allega il file YAML degli override.>
Passaggi per la riproduzione
<Fornisci i passaggi per riprodurre il problema, ove possibile>
Informazioni diagnostiche:
<Elenco dei file allegati>
Caso di esempio
Questa sezione fornisce un caso di esempio per Apigee hybrid.
Problema:
Visualizziamo errori durante l'esecuzione di API di gestione su Apigee hybrid versione 1.3.
Messaggio di errore:
[ERROR] 400 Bad Request { "error": { "code": 400, "message": "Error processing MART request: INTERNAL_ERROR", "errors": [ { "message": "Error processing MART request: INTERNAL_ERROR", "domain": "global", "reason": "failedPrecondition" } ], "status": "FAILED_PRECONDITION" } }
Ora di inizio del problema (formato ISO 8601): dalle 24/10/2020 alle 10:30 PDT
Ora di fine del problema (formato ISO 8601): l'osservazione del problema continua.
Dettagli della configurazione ibrida Apigee:
- Piattaforma ibrida Apigee
GKE versione 1.15.1 - Progetto Google Cloud, organizzazione e ambiente ibridi
ID progetto Google Cloud:apigee-hybrid-123456
Nota: questo è l'ID progetto in cui si trovano i cluster.
Organizzazione ibrida Apigee:apigee-hybrid-123456
Ambiente ibrido Apigee:dev
- {Versioni ibride di Apigee e altre versioni CLI:
Versione Apigee hybrid (apigeectl
):
Versione:1.2.0
Commit:ac09109
ID build:214
Data build:2020-03-30T20:23:36Z
Versione Go:go1.12
Versione Kubectl:
Versione client:version.Info{Major:"1", Minor:"15", GitVersion:"v1.15.0", GitCommit:"e8462b5b5dc2584fdcd18e6bcfe9f1e4d970a529", GitTreeState:"clean", BuildDate:"2019-06-19T16:40:16Z", GoVersion:"go1.12.5", Compiler:"gc", Platform:"darwin/amd64"}
version.Info{Major:"1", Minor:"14+", GitVersion:"v1.14.10-gke.36", GitCommit:"34a615f32e9a0c9e97cdb9f749adb392758349a6", GitTreeState:"clean",
- Dettagli nome cluster Kubernetes:
k8sCluster:
nome:user-cluster-1
regione:us-east1
- Topologia di rete
Hai allegato il filenetwork-topology.png
- Esegui l'override del file YAML
Ha allegato il fileoverrides.yaml
Passaggi per la riproduzione:
Esegui la seguente API di gestione per osservare l'errore:
curl -X GET --header "Authorization: Bearer <TOKEN>" "https://apigee.googleapis.com/v1/organizations/apigee-hybrid-123456/environments/dev/keyvaluemaps"
Informazioni diagnostiche:
In allegato i seguenti file:
network-topology.png
overrides.yaml file
- Log di MART
- Log del sincronizzatore