Stai visualizzando la documentazione di Apigee e Apigee hybrid.
Visualizza
Documentazione di Apigee Edge.
Fornendo informazioni dettagliate e obbligatorie nella richiesta di assistenza, per il team di assistenza di Google Cloud può rispondere rapidamente ed efficiente. Quando nella richiesta di assistenza mancano dettagli importanti, dobbiamo chiederti ulteriori informazioni, il che potrebbe comportare scambi di informazioni più volte. Questa operazione richiede più tempo e può causare ritardi nella risoluzione diverse problematiche. Questa guida alle best practice ti consente di conoscere 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 spieghino i dettagli su cosa è successo rispetto a ciò che era previsto, nonché quando e come si è verificato. Una buona richiesta di assistenza 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 le informazioni sulla versione, se applicabili. |
|
|
Dettagli del problema | Descrizione chiara e dettagliata del problema che lo illustra, 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 sezioni seguenti descrivono questi concetti in maggiore dettaglio.
Prodotto
Esistono diversi prodotti Apigee, Apigee su Google Cloud e Apigee ibrido, quindi abbiamo bisogno di informazioni specifiche in merito il problema è causato da un determinato prodotto.
La tabella seguente fornisce alcuni esempi che mostrano informazioni complete nella colonna DA FARE e informazioni incomplete nella colonna DA NON FARE:
Azioni consigliate | COSA NON FARE |
---|---|
Deployment del proxy API OAuth2 non riuscito sul nostro
Organizzazione di Apigee su Google Cloud ... |
Deployment del proxy API non riuscito (Abbiamo bisogno di sapere il prodotto Apigee in cui riscontri il problema.) |
Viene visualizzato il seguente errore durante l'accesso a Cassandra utilizzando
cqlsh su Apigee hybrid versione 1.3 ... |
Non siamo in grado di accedere a Cassandra utilizzando (Informazioni sulla versione ibrida mancanti) |
Dettagli del problema
Fornisci informazioni precise sul problema osservato, incluse le informazioni l'eventuale messaggio di errore e il comportamento previsto ed effettivo osservato.
La tabella seguente fornisce alcuni esempi di informazioni complete nella colonna DO 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 sia restituire un errore o una risposta imprevista.) |
I nostri clienti ricevono
|
I nostri clienti ricevono errori
(La sola comunicazione degli errori |
Ora
Il tempo è un'informazione molto importante. È importante per l'ingegnere dell'assistenza sapere quando hai rilevato per la prima volta il problema, per quanto tempo è durato e se il problema persiste.
Il tecnico del servizio di assistenza che risolve il problema potrebbe non essere nel tuo fuso orario, quindi affermazioni relative sul tempo rendono il problema più difficile da diagnosticare. Per questo motivo, consigliamo di utilizzare ISO 8601 per la data e l'ora per fornire le informazioni esatte sull'ora quando è stato osservato il problema.
La tabella seguente fornisce alcuni esempi che mostrano l'esattezza dell'ora e del durata per la quale si è verificato il problema nella colonna DOS; e informazioni ambigue o poco chiare su quando si è verificato il problema nella Colonna COSA NON FARE:
Azioni consigliate | COSA NON FARE |
---|---|
Ieri sono stati osservati un numero elevato di 503s tra
06/11/2020 17:30 PDT e 06/11/2020 17:35 PDT... |
Un numero enorme di Siamo costretti a utilizzare la data implicita e non è chiaro nemmeno in quale fuso orario è stato rilevato il problema. |
Sono state osservate latenze elevate sui seguenti proxy API da 2020-11-09 15:30 IST a 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 è stato osservato questo problema l'ultima settimana.) |
Configurazione
Abbiamo bisogno di conoscere i dettagli relativi al punto esatto in cui riscontri il problema. A seconda del prodotto che utilizzi, abbiamo bisogno delle seguenti informazioni:
- Se utilizzi Apigee su Google Cloud, potresti avere
di un'organizzazione, per cui dobbiamo conoscere
l'organizzazione specifica e le altre
in cui riscontri il problema:
- Nomi di organizzazioni e ambienti
- Nome e numeri di revisione del proxy API (per errori delle richieste API)
- Se usi l'attributo ibrido, è possibile che tu stia usando uno dei tanti supportati su piattaforme ibride e su topologie di installazione. Pertanto, dobbiamo sapere quale piattaforma e topologia ibrida utilizzi, inclusi i dettagli come il numero di data center e nodi.
La tabella seguente fornisce alcuni esempi che mostrano informazioni complete nella colonna DA FARE e informazioni incomplete nella colonna DA NON FARE:
Cose da fare | COSA NON FARE |
---|---|
Dettagli di configurazione Apigee:
I dettagli dell'API in errore sono i seguenti:
Errore:
|
Non fornisce alcuna informazione sul prodotto in uso, dal momento in cui viene rilevato il problema o su eventuali dettagli di configurazione. |
Il debug non va a buon fine con il seguente errore in Apigee hybrid versione 1.3 Errore:
Dettagli sulla configurazione di Apigee Hybrid:
| Il debug non va a buon fine su Apigee hybrid. |
Artefatti utili
Fornendoci gli artefatti relativi al problema accelererai risoluzione del problema, perché ci aiutano a capire l'esatto comportamento che state osservare e ottenere maggiori informazioni.
Questa sezione descrive alcuni elementi utili per tutti i prodotti Apigee:
Elementi 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 per i prodotti Apigee. È utile per eventuali errori di runtime, ad esempio 4XX ,
5XX e problemi di latenza. |
Screenshot | Gli screenshot aiutano a trasmettere il contesto del comportamento o dell'errore effettivo osservato. È utile per eventuali errori o problemi rilevati, ad esempio nell'interfaccia utente o in Analytics. |
HAR (HTTP ARchive) | HAR è un file acquisito dagli strumenti di sessione HTTP per il debug di eventuali problemi relativi all'interfaccia utente. Questa operazione 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 di rete, come errori di handshake TLS,
502 errori, problemi di latenza e così via. |
Artefatti aggiuntivi per ambienti ibridi
Per le istanze ibride, potremmo aver bisogno di alcuni elementi aggiuntivi che faciliteranno la diagnosi più rapida dei problemi.
Artefatto | Descrizione |
---|---|
Piattaforma ibrida Apigee | Specifica una delle seguenti opzioni
piattaforme ibride supportate che vengono usate:
|
Versioni dei componenti ibridi e dipendenti di Apigee |
|
Topologia di rete | Il diagramma della topologia di installazione di Apigee che descrive la 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 di Apigee hybrid |
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 del componente ibrido Apigee utilizzando i seguenti comandi in ogni data center/cluster Kubernetes e condividili con noi:
|
Descrivi i log |
Informazioni dettagliate sul pod. Ciò è utile soprattutto se noti problemi come il blocco dei pod nella
|
Cloud Monitoring |
|
Imperdibile raccolta ibrida Apigee
Puoi anche eseguire lo script Must-Gather 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 ; done
# tar -cvzf /tmp/apigee_hybrid_logs_$(date +%Y.%m.%d_%H.%M).tar.gz /tmp/k_*
Se le dimensioni del file tar sono superiori 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 richieste 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. 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 di Apigee:
Nomi delle organizzazioni:
Nomi degli ambienti:
Nomi dei proxy API:
Numeri di revisione:
Passaggi per la riproduzione del problema:
<Fornisci i passaggi per riprodurre il problema, se possibile>
Informazioni di diagnostica:
<List of files attached>
Caso di esempio
Questa sezione fornisce un caso di esempio per Apigee su Google Cloud.
Problema:
Stiamo riscontrando un numero elevato di errori 503 di servizio non disponibile nel nostro cloud pubblico . Puoi esaminare il problema e risolverlo o consigliarci come farlo?
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 della configurazione di Apigee Cloud:
Nomi organizzazione: myorg
Nomi di ambiente: dev
Nomi proxy API: myproxy
Numeri di revisione: 3
Passaggi per la riproduzione del problema:
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. 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, quindi fornisci l'ID progetto in cui stanno inviando i log.>
Organizzazione ibrida Apigee:
Ambiente ibrido Apigee: - Le 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 del nome del cluster Kubernetes:
k8sCluster:
name:
region: - Topologia di rete:
<Allega la topologia di rete che descrive la configurazione di Apigee hybrid, inclusi data center, cluster Kubernetes, spazi dei nomi e pod.> - Sostituisce il file YAML:
<Allega il file YAML degli override.>
Passaggi per la riproduzione
<Fornisci i passaggi per riprodurre il problema, se possibile>
Informazioni di diagnostica:
<List of files attached>
Caso di esempio
Questa sezione fornisce un caso d'uso 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
- Apigee hybrid e altre versioni dell'interfaccia a riga di comando:
Versione dell'interfaccia a riga di comando Apigee hybrid (apigeectl
):
Versione:1.2.0
Commit:ac09109
ID build:214
Ora di compilazione: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"}
Versione server:version.Info{Major:"1", Minor:"14+", GitVersion:"v1.14.10-gke.36", GitCommit:"34a615f32e9a0c9e97cdb9f749adb392758349a6", GitTreeState:"clean",
- Dettagli del nome del cluster Kubernetes:
k8sCluster: Nome di
:user-cluster-1
regione:us-east1
- Topologia di rete
Hai allegato il filenetwork-topology.png
- Sostituzioni del file YAML
File allegatooverrides.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:
Ho allegato i seguenti file:
network-topology.png
overrides.yaml file
- Log di MART
- Log del sincronizzatore