Anda sedang melihat dokumentasi Apigee dan Apigee hybrid.
Lihat
Dokumentasi Apigee Edge.
Memberikan informasi yang detail dan diperlukan dalam kasus dukungan membuatnya agar tim Dukungan Google Cloud dapat 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. Proses ini memerlukan waktu yang lebih lama dan dapat menyebabkan keterlambatan penyelesaian masalah. Panduan Praktik Terbaik ini memungkinkan Anda mengetahui informasi kami perlu menyelesaikan kasus dukungan teknis Anda lebih cepat.
Mendeskripsikan masalah
Masalah harus berisi informasi yang menjelaskan secara detail mengenai terjadi versus apa yang diharapkan terjadi, serta kapan dan bagaimana hal itu terjadi. Kasus dukungan yang baik harus berisi kunci berikut informasi 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 rinci yang menguraikan masalah, termasuk pesan {i>error<i} yang lengkap, jika ada. |
|
|
Waktu | Stempel waktu spesifik kapan masalah mulai terjadi dan berapa lama masalah tersebut berlangsung. |
|
|
Penyiapan | Informasi mendetail tempat masalah diamati. |
|
|
Bagian berikut menjelaskan konsep-konsep ini secara lebih mendetail.
Produk
Terdapat berbagai produk Apigee, yaitu Apigee on Google Cloud dan Apigee hybrid, jadi kita memerlukan informasi spesifik produk tertentu yang memiliki masalah.
Tabel berikut berisi beberapa contoh yang menunjukkan informasi lengkap di kolom TINDAKAN, dan informasi yang tidak lengkap di kolom LARANGAN kolom:
ANJURAN | LARANGAN |
---|---|
Deployment proxy API OAuth2 gagal di
Apigee di Google Cloud organisasi ... |
Deployment proxy API gagal (Kami perlu mengetahui produk Apigee yang bermasalah.) |
Kita mendapatkan pesan 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 {i>error<i} (jika ada) serta perilaku yang diperkirakan dan benar-benar diamati.
Tabel berikut berisi beberapa contoh yang menunjukkan informasi lengkap di kolom TINDAKAN, dan informasi yang tidak lengkap di kolom Kolom LARANGAN:
ANJURAN | LARANGAN |
---|---|
Proxy
|
Proxy (Nama proxy tidak diketahui. Tidak jelas apakah {i>proxy<i} itu kesalahan atau respons tidak terduga.) |
Klien kami mengalami
|
Klien kami mendapatkan
(Hanya menyampaikan Error |
Waktu
Waktu adalah informasi yang sangat kritis. Penting bagi Teknisi Dukungan untuk mengetahui kapan Anda pertama kali melihat masalah ini, berapa lama berlangsung, dan apakah masalah itu masih terjadi.
Teknisi Dukungan yang menyelesaikan masalah ini mungkin tidak berada di zona waktu Anda, jadi pernyataan relatif tentang waktu membuat masalah menjadi lebih sulit untuk didiagnosis. Oleh karena itu, sebaiknya gunakan ISO 8601 format tanggal dan stempel waktu untuk memberikan informasi waktu yang tepat kapan masalah itu diamati.
Tabel berikut memberikan beberapa contoh yang menunjukkan waktu dan cara durasi masalah terjadi di kolom TINDAKAN, dan informasi yang ambigu atau tidak jelas tentang kapan masalah itu terjadi dalam 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 yang diamati untuk masalah ini.) |
Latensi tinggi diamati pada Proxy API berikut dari 09-11-2020 15.30 IST hingga 09-11-2020 18.10 IST ... |
Latensi tinggi diamati di beberapa Proxy API minggu lalu. (Tidak jelas pada hari dan durasi mana masalah ini diamati minggu lalu.) |
Penyiapan
Kami perlu mengetahui detail tentang lokasi masalah yang Anda alami. Bergantung pada produk yang Anda gunakan, kami memerlukan informasi berikut:
- Jika Anda menggunakan Apigee di Google Cloud, Anda mungkin memiliki lebih
dari satu organisasi, jadi kami perlu mengetahui
organisasi secara spesifik dan
tempat Anda mengamati masalah:
- Nama Organisasi dan Lingkungan
- Nama proxy dan nomor revisi API (untuk kegagalan permintaan API)
- Jika Anda menggunakan campuran, Anda mungkin menggunakan salah satu dari banyak model yang didukung platform hybrid dan topologi instalasi. Kita perlu mengetahui platform dan topologi hybrid yang Anda gunakan, termasuk detailnya seperti jumlah pusat data dan {i>node<i}.
Tabel berikut menyediakan beberapa contoh yang menampilkan informasi lengkap di kolom TINDAKAN, dan informasi 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 masalahnya yang 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 kepada kami akan mempercepat proses resolusi Anda, karena membantu kami memahami perilaku yang tepat yang sedang Anda mengamati dan mendapatkan lebih banyak wawasan.
Bagian ini menjelaskan beberapa artefak berguna yang bermanfaat bagi semua Produk Apigee:
Artefak umum untuk semua produk Apigee
Artefak berikut berguna untuk semua produk Apigee: Apigee di Google Cloud dan Apigee hybrid:
Artefak | Deskripsi |
---|---|
Men-debug output alat | Output alat Debug berisi informasi detail 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. Penting 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
seperti kegagalan TLS handshake,
502 error, 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 dari yang berikut ini
platform hybrid yang didukung yang digunakan:
|
Versi komponen hybrid dan dependen Apigee |
|
Topologi jaringan | Diagram topologi instalasi Apigee yang menjelaskan konfigurasi 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 setiap cluster pusat data/Kubernetes dan membagikannya dengan kami:
|
Menjelaskan log |
Informasi mendetail tentang pod. Hal ini berguna terutama jika Anda mengamati masalah seperti pod yang terjebak 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 ; done
# 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 Env:
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 akun Public Cloud kami org. 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 Env: 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, lalu berikan project ID tempat Anda sedang mengirim log.>
Organisasi Apigee Hybrid:
Apigee Hybrid env: - Apigee Hybrid dan versi CLI lainnya:
Versi CLI hybrid Apigee (apigeectl
):
Versi Kubectl: - 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 hybrid
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 hybrid Apigee (apigeectl
):
Versi:1.2.0
Commit:ac09109
ID Build:214
Waktu Pembuatan:2020-03-30T20:23:36Z
Versi Go:go1.12
Versi Kubectl:
Versi Klien: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 Server: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
Wilayah
: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