Anda sedang melihat dokumentasi Apigee dan Apigee hybrid.
Lihat dokumentasi
Apigee Edge.
Memberikan informasi yang detail dan diperlukan dalam kasus dukungan akan memudahkan tim Dukungan Google Cloud untuk merespons Anda dengan cepat dan efisien. Jika kasus dukungan Anda tidak memiliki detail penting, kami perlu meminta informasi lebih lanjut, yang mungkin perlu bolak-balik beberapa kali. Tindakan ini memerlukan waktu lebih lama dan dapat menyebabkan keterlambatan dalam penyelesaian masalah. Panduan Praktik Terbaik ini memungkinkan Anda mengetahui informasi yang kami perlukan untuk menyelesaikan kasus dukungan teknis Anda dengan lebih cepat.
Mendeskripsikan masalah
Masalah harus berisi informasi yang menjelaskan detail tentang apa yang terjadi dan apa yang diharapkan terjadi, serta kapan dan bagaimana hal itu terjadi. Kasus dukungan yang baik harus berisi informasi utama berikut untuk setiap produk Apigee:
Informasi utama | Deskripsi | Apigee di Google Cloud | Apigee hybrid |
---|---|---|---|
Produk | Produk Apigee tertentu yang mengamati masalah, termasuk informasi versi, jika ada. |
|
|
Detail Masalah | Deskripsi masalah yang jelas dan mendetail yang menguraikan masalah, termasuk pesan error lengkap, jika ada. |
|
|
Waktu | Stempel waktu spesifik kapan masalah mulai terjadi dan berapa lama masalah tersebut terjadi. |
|
|
Penyiapan | Informasi mendetail tempat masalah diamati. |
|
|
Bagian berikut menjelaskan konsep-konsep ini secara lebih mendetail.
Produk
Ada berbagai produk Apigee, yaitu Apigee on Google Cloud dan Apigee hybrid, jadi kami memerlukan informasi spesifik tentang produk mana yang mengalami masalah.
Tabel berikut menyediakan beberapa contoh yang menampilkan informasi lengkap di kolom TINDAKAN, dan informasi yang tidak lengkap di kolom LARANGAN:
ANJURAN | LARANGAN |
---|---|
Deployment proxy API OAuth2 gagal di organisasi Apigee on Google Cloud kami ... |
Deployment proxy API gagal (Kami perlu mengetahui produk Apigee yang bermasalah.) |
Kita mendapatkan error berikut saat mengakses Cassandra menggunakan
cqlsh pada Apigee hybrid versi 1.3 ... |
Kami tidak dapat mengakses Cassandra menggunakan (Informasi versi campuran tidak ada) |
Detail Masalah
Berikan informasi akurat tentang masalah yang sedang diamati, termasuk pesan error (jika ada) serta perilaku yang diharapkan dan sebenarnya yang diamati.
Tabel berikut menyediakan beberapa contoh yang menampilkan informasi lengkap di kolom TINDAKAN, dan informasi yang tidak lengkap di kolom LARANGAN:
ANJURAN | LARANGAN |
---|---|
Proxy
|
Proxy (Nama proxy tidak diketahui. Tidak jelas apakah proxy menampilkan error atau respons yang tidak diharapkan.) |
Klien kami mendapatkan error
|
Klien kami mendapatkan Error
(Hanya menyampaikan Error |
Waktu
Waktu adalah informasi yang sangat kritis. Penting bagi Engineer Dukungan untuk mengetahui kapan pertama kali masalah ini terjadi, berapa lama masalah ini terjadi, dan apakah masalah tersebut masih terjadi.
Engineer Dukungan yang menyelesaikan masalah ini mungkin tidak berada di zona waktu Anda, jadi pernyataan yang relatif tentang waktu akan membuat masalah lebih sulit untuk didiagnosis. Oleh karena itu, sebaiknya gunakan format ISO 8601 untuk tanggal dan stempel waktu guna memberikan informasi waktu yang tepat saat masalah diamati.
Tabel berikut menyediakan beberapa contoh yang menampilkan waktu dan durasi yang akurat saat masalah terjadi di kolom DOS, dan informasi yang ambigu atau tidak jelas tentang kapan masalah tersebut terjadi di kolom LARANGAN:
ANJURAN | LARANGAN |
---|---|
Sejumlah besar 503s diamati kemarin antara
06-11-2020 17.30 PDT dan 06-11-2020 17.35 PDT... |
Sejumlah besar (Kami terpaksa menggunakan tanggal tersirat dan juga tidak jelas di zona waktu mana masalah ini diamati.) |
Latensi tinggi diamati pada Proxy API berikut dari 2020-11-09 15:30 IST hingga 2020-11-09 18:10 IST ... |
Latensi tinggi diamati di beberapa Proxy API minggu lalu. (Tidak jelas hari dan durasi mana masalah ini diamati dalam minggu lalu.) |
Penyiapan
Kami perlu mengetahui detail tentang lokasi masalah yang Anda alami. Bergantung pada produk yang Anda gunakan, kami memerlukan informasi berikut:
- Jika menggunakan Apigee di Google Cloud, Anda mungkin memiliki lebih
dari satu organisasi. Oleh karena itu, kami perlu mengetahui organisasi spesifik dan detail
lainnya tempat Anda mengamati masalah:
- Nama Organisasi dan Lingkungan
- Nama proxy dan nomor revisi API (untuk kegagalan permintaan API)
- Jika menggunakan campuran, Anda mungkin menggunakan salah satu dari banyak platform hybrid yang didukung dan topologi penginstalan. Jadi, kami perlu mengetahui platform dan topologi hybrid yang Anda gunakan, termasuk detail seperti jumlah pusat data dan node.
Tabel berikut menyediakan beberapa contoh yang menampilkan informasi lengkap di kolom TINDAKAN, dan informasi yang tidak lengkap di kolom LARANGAN:
ANJURAN | LARANGAN |
---|---|
Detail penyiapan Apigee:
Detail API yang gagal adalah sebagai berikut:
Error:
|
(Laporan ini tidak memberikan informasi apa pun tentang produk yang digunakan, karena kapan masalah diamati atau detail penyiapan apa pun.) |
Debug gagal dengan error berikut pada Apigee hybrid versi 1.3 Error:
Detail penyiapan Apigee Hybrid:
| Debug gagal pada Apigee hybrid. |
Artefak berguna
Memberikan artefak yang terkait dengan masalah tersebut akan mempercepat penyelesaian karena membantu kami memahami perilaku sebenarnya yang Anda amati dan mendapatkan lebih banyak insight.
Bagian ini menjelaskan beberapa artefak berguna yang berguna untuk semua produk Apigee:
Artefak umum untuk semua produk Apigee
Artefak berikut berguna untuk semua produk Apigee: Apigee on Google Cloud dan Apigee hybrid:
Artefak | Deskripsi |
---|---|
Men-debug output alat | Output alat Debug berisi informasi mendetail tentang permintaan API yang mengalir melalui
produk Apigee. Hal ini berguna untuk error runtime seperti 4XX , 5XX , dan masalah latensi. |
Screenshot | Screenshot membantu menyampaikan konteks perilaku sebenarnya atau error yang diamati. Metrik ini berguna untuk setiap error atau masalah yang diamati, seperti di UI atau Analytics. |
HAR (Http ARchive) | HAR adalah file yang direkam oleh alat sesi HTTP untuk proses debug masalah terkait UI. Gambar ini dapat direkam menggunakan browser seperti Chrome, Firefox, atau Internet Explorer. |
tcpdumps |
Alat tcpdump menangkap paket TCP/IP yang ditransfer atau diterima melalui
jaringan. Cara ini berguna untuk masalah terkait jaringan apa pun, seperti kegagalan TLS handshake, error 502 , dan masalah latensi, dll. |
Artefak tambahan untuk hybrid
Untuk hybrid, kami mungkin memerlukan beberapa artefak tambahan yang akan memfasilitasi diagnosis masalah dengan lebih cepat.
Artefak | Deskripsi |
---|---|
Platform hybrid Apigee | Tentukan salah satu
platform hybrid yang didukung berikut yang digunakan:
|
Versi komponen hybrid dan dependen Apigee |
|
Topologi jaringan | Diagram topologi penginstalan Apigee yang menjelaskan penyiapan hybrid Anda, termasuk semua pusat data, cluster Kubernetes, namespace, dan pod. |
Mengganti File YAML | File overrides.yaml yang digunakan di setiap pusat data untuk menginstal bidang runtime hybrid Apigee.
|
Status deployment hybrid Apigee |
Output dari perintah berikut di setiap cluster pusat data/Kubernetes:
|
Log komponen hybrid Apigee |
Memberikan link ke log StackDriver untuk komponen hybrid ATAU Anda dapat mengambil log komponen hybrid Apigee menggunakan perintah berikut di tiap cluster pusat data/Kubernetes dan membagikannya kepada kami:
|
Menjelaskan log |
Informasi mendetail tentang pod. Hal ini berguna terutama jika Anda mengalami masalah seperti pod yang macet dalam status
|
Cloud Monitoring |
|
Hybrid Apigee Harus Dikumpulkan
Anda juga dapat menjalankan skrip Harus-Kumpulkan berdasarkan perintah yang tercantum di bawah;
###--- "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 ; doneSetelah log dibuat, kompresi semua file output dalam satu bola tar menggunakan perintah di bawah;
# tar -cvzf /tmp/apigee_hybrid_logs_$(date +%Y.%m.%d_%H.%M).tar.gz /tmp/k_*
Jika ukuran file tar lebih besar dari 25 MB, Anda dapat menguploadnya ke Google Drive dan membagikan link-nya kepada kami. Atau Anda dapat menggunakan perintah split untuk memecah file besar menjadi potongan-potongan berukuran 25 MB yang dapat diunggah ke portal Support.
# split -b 25M diagnostic.tar.gz "diagnostic.tar.gz.part"
Template kasus dan contoh kasus
Bagian ini menyediakan template kasus dan contoh kasus untuk berbagai produk berdasarkan praktik terbaik yang dijelaskan dalam dokumen ini:
Cloud Apigee
Template
Bagian ini menyediakan template contoh untuk Apigee on Google Cloud.
Masalah:
<Berikan deskripsi terperinci tentang masalah atau perilaku yang Anda amati. Sertakan nama dan versi produk jika ada.>
Pesan error:
<Sertakan pesan error lengkap yang diamati (jika ada)>
Masalah waktu mulai (format ISO 8601):
Masalah waktu berakhir (format ISO 8601):
Detail penyiapan Apigee:
Nama organisasi:
Nama proxy:
Nama proxy API:
Nomor revisi:
Langkah-langkah untuk mereproduksi bug:
<Berikan langkah-langkah untuk merekonstruksi masalah jika memungkinkan>
Informasi diagnostik:
<Daftar file terlampir>
Contoh kasus
Bagian ini memberikan contoh kasus untuk Apigee on Google Cloud.
Masalah:
Kami melihat tingginya error Layanan Tidak Tersedia 503 di organisasi Public Cloud kami. Dapatkah Anda melihat masalah tersebut dan menyelesaikannya atau memberi tahu kami cara mengatasinya?
Pesan error:
{"fault":{"faultstring":"The Service is temporarily available", "detail":{"errorcode":"messaging.adaptors.http.flow.ServiceUnavailable"}}}
Waktu mulai masalah (format ISO 8601): 2020-10-04 06:30 IST
Waktu berakhir masalah (format ISO 8601): Masalah masih terjadi.
Detail penyiapan Apigee Cloud:
Nama organisasi: myorg
Nama proxy: dev
Nama proxy API: myproxy
Nomor revisi: 3
Langkah-langkah untuk mereproduksi bug:
Jalankan perintah curl
berikut untuk mereproduksi masalah:
curl -X GET 'https://myorg-dev.apigee.net/v1/myproxy'
Informasi diagnostik:
Output alat debug (trace-503.xml
)
Hybrid
Template
Bagian ini menyediakan template contoh untuk Apigee Hybrid.
Masalah:
<Berikan deskripsi terperinci tentang masalah atau perilaku yang Anda amati. Sertakan nama dan versi produk jika ada.>
Pesan error:
<Sertakan pesan error lengkap yang diamati (jika ada)>
Masalah waktu mulai (format ISO 8601):
Masalah waktu berakhir (format ISO 8601):
Detail penyiapan Apigee Hybrid:
- Platform hybrid Apigee:
<Berikan informasi tentang Platform tempat Anda menginstal hybrid dan versinya.>
- Project Google Cloud, Organisasi dan Lingkungan hybrid:
ID project Google Cloud:
<Jika Anda menggunakan Google Kubernetes Engine (GKE), pastikan Anda memberikan project ID tempat cluster berada. Jika Anda menggunakan GKE lokal, Azure Kubernetes Service, atau Amazon EKS, berikan project ID tempat Anda mengirim log.>
Apigee hybrid org:
Apigee hybrid env: - Apigee hybrid dan versi CLI lainnya:
Versi Apigee Hybrid CLI (apigeectl
):
Versi Kubernetes: - Detail nama cluster Kubernetes:
k8sCluster:
nama:
region: - Topologi jaringan:
<Lampirkan topologi jaringan yang menjelaskan penyiapan hybrid Apigee Anda, termasuk pusat data, cluster Kubernetes, namespace, dan pod.> - Mengganti File YAML:
<Lampirkan file YAML Ganti.>
Langkah-langkah untuk mereproduksi
<Berikan langkah-langkah untuk merekonstruksi masalah jika memungkinkan>
Informasi diagnostik:
<Daftar file terlampir>
Contoh kasus
Bagian ini memberikan contoh kasus untuk Apigee Hybrid.
Masalah:
Kita mendapatkan error saat menjalankan API pengelolaan di Apigee hybrid versi 1.3.
Pesan 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" } }
Masalah waktu mulai (format ISO 8601): Sejak 24-10-2020 pukul 10.30 PDT
Waktu berakhir masalah (format ISO 8601): Terus mengamati masalah.
Detail penyiapan Apigee Hybrid:
- Platform hybrid Apigee
GKE versi 1.15.1 - Project Google Cloud, Organisasi dan Lingkungan hibrida
ID project Google Cloud:apigee-hybrid-123456
Catatan: Ini adalah project ID tempat cluster berada.
Organisasi Apigee Hybrid:apigee-hybrid-123456
Lingkungan hybrid Apigee:dev
- Apigee hybrid dan versi CLI lainnya:
Versi CLI Apigee Hybrid (apigeectl
):
Versi:1.2.0
Commit:ac09109
ID Build:214
Waktu Build:2020-03-30T20:23:36Z
Versi Go:go1.12
Versi Kubernetes:
{0 /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",
- Detail nama cluster Kubernetes:
k8sCluster:
nama:user-cluster-1
region:us-east1
- Topologi jaringan
Melampirkan filenetwork-topology.png
- Mengganti File YAML
Melampirkan fileoverrides.yaml
Langkah-langkah untuk mereproduksi bug:
Jalankan API pengelolaan berikut untuk mengamati error:
curl -X GET --header "Authorization: Bearer <TOKEN>" "https://apigee.googleapis.com/v1/organizations/apigee-hybrid-123456/environments/dev/keyvaluemaps"
Informasi Diagnostik:
Terlampir file berikut:
network-topology.png
overrides.yaml file
- Log MART
- Log sinkronisasi