Estás viendo la documentación de Apigee y Apigee Hybrid.
Consulta la documentación de Apigee Edge.
Proporcionar la información necesaria de forma detallada en el caso de ayuda permite que el equipo de asistencia al cliente de Google Cloud responda con rapidez y de forma eficiente. Si a tu caso de ayuda le faltan detalles fundamentales, tendremos que pedirte más información, lo que puede generar una cadena de interacción con muchas respuestas. Esto lleva más tiempo y puede generar demoras en la resolución de problemas. Esta guía de prácticas recomendadas te permite conocer la información que necesitamos para resolver tu caso de ayuda técnica con mayor rapidez.
Describe el problema
Un problema debe contener información que explique los detalles sobre lo que sucedió en relación con lo que se esperaba que sucediera, además de cuándo y cómo ocurrió. Un buen caso de ayuda de Apigee debe contener la siguiente información clave para cada uno de los productos de Apigee:
Key information | Descripción | Apigee en Google Cloud | Apigee Hybrid |
---|---|---|---|
Producto | Producto específico de Apigee en el que se observa el problema, incluye la información de la versión cuando corresponda. |
|
|
Detalles del problema | Descripción clara y detallada de la descripción del problema, incluido el mensaje de error completo, si corresponde. |
|
|
Hora | La marca de tiempo específica del momento en que comenzó el problema y su duración |
|
|
Configuración | Información detallada sobre el lugar en el que se observa el problema. |
|
|
Las siguientes secciones describen estos conceptos en mayor detalle.
Producto
Hay diferentes productos de Apigee, Apigee en Google Cloud y Apigee Hybrid, por lo que necesitamos información específica sobre qué producto en particular es el que tiene el problema
En la siguiente tabla, se proporcionan algunos ejemplos que muestran información completa en la columna CORRECTO, e información incompleta en la columna INCORRECTO:
CORRECTO | INCORRECTO |
---|---|
La implementación del proxy de API OAuth2 falló en nuestra
organización de Apigee en Google Cloud… |
No se pudo implementar el proxy de API. (Debemos conocer el producto de Apigee en el que tiene el problema). |
Se genera el siguiente error cuando accede a Cassandra con cqlsh en Versión híbrida de Apigee 1.3 … |
No podemos acceder a Cassandra con (Falta la información sobre la versión de Hybrid) |
Detalles del problema
Proporciona la información precisa sobre el problema que se observa, incluido el mensaje de error (si corresponde), así como el comportamiento esperado y el real que se puede observar.
En la siguiente tabla, se proporcionan algunos ejemplos que muestran información completa en la columna CORRECTO, e información incompleta en la columna INCORRECTO:
CORRECTO | INCORRECTO |
---|---|
El nuevo proxy
|
El nuevo proxy (No se conoce el nombre del proxy. No está claro si el proxy muestra un error o una respuesta inesperada). |
Nuestros clientes reciben errores
|
Nuestros clientes reciben errores
(Si solo indicas el error |
Tiempo
El tiempo es un dato fundamental. Es importante que el ingeniero de asistencia sepa cuándo se detectó por primera vez este problema, cuánto tiempo duró y si el problema continúa.
Es posible que el ingeniero de asistencia que resuelva el problema no esté en tu zona horaria, por lo que las declaraciones relativas sobre el tiempo hacen que el problema sea más difícil de diagnosticar. Por lo tanto, se recomienda usar el formato ISO 8601 para las marcas de fecha y hora a fin de proporcionar la información exacta sobre la fecha en la que se observó el problema.
En la siguiente tabla, se proporcionan algunos ejemplos precisos que muestran la hora y duración en las que se produjo el problema en la columna CORRECTO y la información ambigua o poco clara sobre cuándo ocurrió el problema en la columna INCORRECTO:
CORRECTO | INCORRECTO |
---|---|
Una gran cantidad de 503s se detectó ayer entre el 2020-11-06 17:30 PDT y el 2020-11-06 17:35 PDT… |
Una gran cantidad de (Nos vemos obligados a usar la fecha implícita y no está claro en qué zona horaria se observó este problema). |
Se observaron latencias altas en los siguientes proxies de API desde 2020-11-09 15:30 IST hasta 2020-11-09 18:10 IST … |
Se observaron latencias altas en algunos proxies de API la semana pasada. (No está claro qué día ni por cuánto tiempo se observó este problema durante la última semana). |
Configuración
Necesitamos conocer los detalles sobre el lugar exacto en el que detectaste el problema. Según el producto que uses, necesitamos la siguiente información:
- Si usas Apigee Cloud, es posible que tengas más de una organización. Por lo tanto, necesitamos conocer la organización específica y otros detalles en los que observas el problema:
- Nombres de organizaciones y entornos
- Nombre del proxy de API y números de revisión (para los errores de solicitudes a la API)
- Si usas un entorno híbrido, es posible que uses una de las diversas topologías de instalación y de plataformas híbridas compatibles. Por lo tanto, necesitamos saber qué plataforma híbrida y topología estás usando, incluidos los detalles, como la cantidad de centros de datos y de nodos.
En la siguiente tabla, se proporcionan algunos ejemplos que muestran información completa en la columna CORRECTO, e información incompleta en la columna INCORRECTO:
CORRECTO | INCORRECTO |
---|---|
Los errores Detalles de configuración de Apigee:
Los detalles de la API con errores son los siguientes:
Error:
|
Los errores (No proporciona información sobre el producto que se usa, por el momento en que se observa el problema o cualquier detalle de configuración). |
La depuración falla con el siguiente error en Apigee Hybrid versión 1.3 Error:
Detalles de la configuración de Apigee Hybrid:
| La depuración falla en Apigee Hybrid. |
Artefactos útiles
Si nos proporcionas artefactos relacionados con el problema, se acelerará la resolución, ya que nos ayudará a comprender el comportamiento exacto que estás observando y podrás obtener más estadísticas.
En esta sección, se describen algunos artefactos útiles que te serán de ayuda para todos los productos de Apigee:
Artefactos comunes de todos los productos de Apigee
Los siguientes artefactos son útiles para todos los productos de Apigee: Apigee en Google Cloud y Apigee Hybrid:
Artefacto | Descripción |
---|---|
Resultado de la herramienta de depuración | El resultado de la herramienta de depuración contiene información detallada sobre las solicitudes a la API que fluyen a través de los productos de Apigee. Esto es útil para cualquier error de entorno de ejecución, como 4XX , 5XX y problemas de latencia. |
Capturas de pantalla | Las capturas de pantalla ayudan a transmitir el contexto del comportamiento o el error reales que se observan. Es útil para los errores o problemas observables, como en la IU o Analytics. |
HAR (archivo Http) | HAR es un archivo capturado por las herramientas de sesión HTTP para depurar cualquier problema relacionado con la IU. Puede capturarse con navegadores como Chrome, Firefox o Internet Explorer. |
tcpdumps |
La herramienta de tcpdump captura paquetes TCP/IP transferidos o recibidos a través de la red. Esto es útil para cualquier problema relacionado con la red, como fallas del protocolo de enlace TLS, errores 502 y problemas de latencia, etcétera. |
Artefactos adicionales para entornos híbridos
Para entornos híbridos, es posible que necesitemos algunos artefactos adicionales que faciliten el diagnóstico de los problemas.
Artefacto | Descripción |
---|---|
Plataforma de Apigee Hybrid | Especifica cualquiera de las siguientes plataformas híbridas compatibles que se usan:
|
Versiones de componentes dependientes y de Apigee Hybrid |
|
Topología de la red | El diagrama de topología de instalación de Apigee en el que se describe tu configuración híbrida, incluidos todos los centros de datos, clústeres de Kubernetes, espacios de nombres y Pods. |
Anula el archivo YAML | El archivo overrides.yaml que se usa en cada centro de datos para instalar el plano de entorno de ejecución de Apigee Hybrid.
|
Estado de la implementación de Apigee Hybrid |
El resultado de los siguientes comandos en cada centro de datos/clúster de Kubernetes:
|
Registros de componentes de Apigee Hybrid |
Proporcione vínculos a registros de Stackdriver para los componentes híbridos, O BIEN Puedes recuperar los registros de componentes de Apigee Hybrid mediante los siguientes comandos en cada centro de datos o clúster de Kubernetes y compartirlos con nosotros:
|
Describe los registros |
Información detallada sobre el Pod. Esto es útil, en especial, si observas problemas, como Pods que se atascan en estado
|
Cloud Monitoring |
|
Datos obligatorios de Apigee Hybrid
También puedes ejecutar la secuencia de comandos Must-Gather según los comandos que se indican a continuación:
###--- "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_*
Si el tamaño del archivo tar es superior a 25 MB, puedes subirlo a Google Drive y compartir el vínculo con nosotros. También puedes usar el comando split para dividir los archivos grandes en fragmentos de 25 MB que se pueden subir al portal de asistencia.
# split -b 25M diagnostic.tar.gz "diagnostic.tar.gz.part"
Plantillas de casos y casos de muestra
Esta sección proporciona plantillas de casos y casos de muestra para diferentes productos según las prácticas recomendadas descritas en este documento:
Apigee Cloud
Plantilla
En esta sección, se proporciona una plantilla de muestra para Apigee en Google Cloud.
Problema:
<Proporcione una descripción detallada del problema o del comportamiento que se observa en su extremo. Incluya el nombre y la versión del producto cuando corresponda.>
Mensaje de error:
<Incluir el mensaje de error completo que se observa (si corresponde)>
Hora de inicio del problema (formato ISO 8601):
Hora de finalización del problema (formato ISO 8601):
Detalles de configuración de Apigee:
Nombres de la organización:
Nombres del entorno:
Nombres de proxy de API:
Números de revisión:
Pasos para reproducir:
<Proporciona los pasos necesarios para reproducir el problema cuando sea posible>
Información de diagnóstico:
<Lista de archivos adjuntos>
Caso de muestra
En esta sección, se brinda un caso de muestra para Apigee en Google Cloud.
Problema:
En nuestra organización de nube pública, vemos una gran cantidad de errores 503 de servicio no disponible. ¿Puedes revisar el problema y resolverlo o ayudarnos a solucionarlo?
Mensaje de error:
{"fault":{"faultstring":"The Service is temporarily available", "detail":{"errorcode":"messaging.adaptors.http.flow.ServiceUnavailable"}}}
Hora de inicio del problema (formato ISO 8601): 2020-10-04 06:30 IST
Hora de finalización del problema (formato ISO 8601): El problema sigue ocurriendo.
Detalles de configuración de la nube de Apigee Cloud:
Nombres de la organización: myorg
Nombres del entorno: dev
Nombres de proxy de API: myproxy
Números de revisión: 3
Pasos para reproducir:
Ejecuta el siguiente comando de curl
para reproducir el problema:
curl -X GET 'https://myorg-dev.apigee.net/v1/myproxy'
Información de diagnóstico:
Resultado de la herramienta de depuración (trace-503.xml
)
Híbrido
Plantilla
En esta sección, se proporciona una plantilla de muestra para Apigee Hybrid.
Problema:
<Proporcione una descripción detallada del problema o del comportamiento que se observa en su extremo. Incluya el nombre y la versión del producto cuando corresponda.>
Mensaje de error:
<Incluir el mensaje de error completo que se observa (si corresponde)>
Hora de inicio del problema (formato ISO 8601):
Hora de finalización del problema (formato ISO 8601):
Detalles de la configuración de Apigee Hybrid:
- Plataforma de Apigee Hybrid:
<Proporciona la información sobre la plataforma en la que instalaste la versión híbrida y su versión.>
- Proyecto de Google Cloud, organización y entorno híbridos:
ID del proyecto de Google Cloud:
<Si usas Google Kubernetes Engine (GKE), asegúrate de proporcionar el ID del proyecto donde se encuentran los clústeres. Si usas GKE On-Prem, Azure Kubernetes Service o Amazon EKS, proporciona el ID del proyecto al que envías los registros.>
Organización de Apigee Hybrid:
Entorno de Apigee Hybrid: - Apigee Hybrid y otras versiones de la CLI:
Versión de la CLI d Apigee Hybrid (apigeectl
):
Versión de Kubectl: - Detalles del nombre de clúster de Kubernetes:
k8sCluster:
nombre:
región: - Topología de red:
<Adjunta la topología de red que describe la configuración de tu Apigee Hybrid, incluidos los centros de datos, los clústeres de Kubernetes, los espacios de nombres y los pods.> - Anula el archivo YAML:
<Adjuntar el archivo YAML de anulaciones.>
Pasos para reproducirlo
<Proporciona los pasos necesarios para reproducir el problema cuando sea posible>
Información de diagnóstico:
<Lista de archivos adjuntos>
Caso de muestra
En esta sección, se proporciona un caso de muestra para Apigee Hybrid.
Problema:
Se producen errores cuando se ejecutan las API de administración en Apigee Hybrid versión 1.3.
Mensaje de error:
[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" } }
Hora de inicio del problema (formato ISO 8601): desde 2020-10-24 10:30 PDT
Hora de finalización del problema (formato ISO 8601): El problema continúa.
Detalles de la configuración de Apigee Hybrid:
- Plataforma de Apigee Hybrid
GKE versión 1.15.1 - Proyecto de Google Cloud, organización y entorno híbridos
ID del proyecto de Google Cloud:apigee-hybrid-123456
Nota: Este es el ID del proyecto en el que se encuentran los clústeres.
Organización de Apigee Hybrid:apigee-hybrid-123456
Entorno de Apigee Hybrid:dev
- Apigee Hybrid y otras versiones de la CLI:
Versión de CLI de Apigee Hybrid (apigeectl
):
Versión:1.2.0
Confirmación:ac09109
ID de compilación:214
Tiempo de compilación:2020-03-30T20:23:36Z
Versión de Go:go1.12
Versión de Kubectl:
Versión del cliente: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"}
Versión del servidor:version.Info{Major:"1", Minor:"14+", GitVersion:"v1.14.10-gke.36", GitCommit:"34a615f32e9a0c9e97cdb9f749adb392758349a6", GitTreeState:"clean",
- Detalles del nombre de clúster de Kubernetes:
k8sCluster:
nombre:user-cluster-1
región:us-east1
- Topología de red
Adjunta el archivonetwork-topology.png
- Anula el archivo YAML
Adjunta el archivooverrides.yaml
.
Pasos para reproducir:
Ejecuta la siguiente API de Management para observar el error:
curl -X GET --header "Authorization: Bearer <TOKEN>" "https://apigee.googleapis.com/v1/organizations/apigee-hybrid-123456/environments/dev/keyvaluemaps"
Información de diagnóstico:
Adjunta los siguientes archivos:
network-topology.png
overrides.yaml file
- Registros de MART
- Registros del sincronizador