Anda sedang melihat dokumentasi Apigee dan Apigee hybrid.
Lihat dokumentasi
Apigee Edge.
Memberikan informasi mendetail dan yang 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 memerlukan komunikasi berulang kali. Hal ini memerlukan lebih banyak waktu dan dapat menyebabkan penundaan dalam penyelesaian masalah. Panduan Praktik Terbaik ini memberi tahu Anda informasi yang kami perlukan untuk menyelesaikan kasus dukungan teknis Anda dengan lebih cepat.
Menjelaskan masalah
Masalah harus berisi informasi yang menjelaskan detail tentang apa yang terjadi dan apa yang diharapkan akan terjadi, serta kapan dan bagaimana hal itu terjadi. Kasus dukungan yang baik harus berisi informasi penting berikut untuk setiap produk Apigee:
Informasi utama | Deskripsi | Apigee di Google Cloud | Apigee hybrid |
---|---|---|---|
Produk | Produk Apigee tertentu tempat masalah diamati, termasuk informasi versi jika berlaku. |
|
|
Detail masalah | Deskripsi masalah yang jelas dan mendetail yang menguraikan masalah, termasuk pesan error lengkap, jika ada. |
|
|
Waktu | Stempel waktu spesifik kapan masalah dimulai dan berapa lama masalah tersebut berlangsung. |
|
|
Penyiapan | Informasi mendetail tentang tempat masalah diamati. |
|
|
Bagian berikut menjelaskan konsep ini secara lebih mendetail.
Produk
Ada berbagai produk Apigee, Apigee di Google Cloud dan Apigee hybrid, jadi kami memerlukan informasi spesifik tentang produk tertentu yang mengalami masalah.
Tabel berikut memberikan beberapa contoh yang menampilkan informasi lengkap di kolom HARUS, dan informasi yang tidak lengkap di kolom JANGAN:
ANJURAN | LARANGAN |
---|---|
Deployment proxy API OAuth2 gagal di organisasi
Apigee di Google Cloud kami ... |
Deployment proxy API gagal (Kami perlu mengetahui produk Apigee tempat Anda melihat masalah tersebut.) |
Kami mendapatkan error berikut saat mengakses Cassandra menggunakan
cqlsh di Apigee hybrid versi 1.3 ... |
Kami tidak dapat mengakses Cassandra menggunakan (Informasi versi campuran tidak ada) |
Detail masalah
Berikan informasi yang akurat tentang masalah yang diamati, termasuk pesan error (jika ada) serta perilaku yang diharapkan dan yang diamati.
Tabel berikut memberikan beberapa contoh yang menampilkan informasi lengkap di kolom HARUS, dan informasi yang tidak lengkap di kolom JANGAN:
ANJURAN | LARANGAN |
---|---|
Proxy
|
Proxy (Nama proxy tidak diketahui. Tidak jelas apakah proxy menampilkan error atau respons yang tidak terduga.) |
Klien kami mendapatkan error
|
Klien kami mendapatkan Error
(Hanya menyampaikan Error |
Waktu
Waktu adalah informasi yang sangat penting. Engineer Dukungan Teknis perlu mengetahui kapan Anda pertama kali melihat masalah ini, berapa lama masalah ini berlangsung, dan apakah masalah ini masih terjadi.
Engineer Dukungan yang menyelesaikan masalah mungkin tidak berada di zona waktu Anda, sehingga pernyataan relatif tentang waktu akan mempersulit diagnosis masalah. Oleh karena itu, sebaiknya gunakan format ISO 8601 untuk stempel tanggal dan waktu guna memberikan informasi waktu yang tepat tentang kapan masalah diamati.
Tabel berikut memberikan beberapa contoh yang menunjukkan waktu dan durasi yang akurat saat masalah terjadi di kolom HARUS, dan informasi yang ambigu atau tidak jelas tentang kapan masalah terjadi di kolom JANGAN:
ANJURAN | LARANGAN |
---|---|
Sejumlah besar 503s diamati kemarin antara
2020-11-06 17:30 PDT dan 2020-11-06 17:35 PDT... |
Sejumlah besar (Kami terpaksa menggunakan tanggal yang 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 masalah ini diamati dalam seminggu terakhir.) |
Penyiapan
Kami perlu mengetahui detail tentang tempat Anda melihat masalah. 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 tertentu dan detail lainnya tempat Anda mengamati masalah:
- Nama Organisasi dan Lingkungan
- Nama proxy API dan nomor revisi (untuk kegagalan permintaan API)
- Jika menggunakan hybrid, Anda mungkin menggunakan salah satu dari banyak platfrom hybrid dan topologi penginstalan yang didukung. Jadi, kami perlu mengetahui platform dan topologi hybrid yang Anda gunakan, termasuk detailnya seperti jumlah pusat data dan node.
Tabel berikut memberikan beberapa contoh yang menampilkan informasi lengkap di kolom HARUS, dan informasi tidak lengkap di kolom JANGAN:
ANJURAN | LARANGAN |
---|---|
Detail penyiapan Apigee:
Detail API yang gagal adalah sebagai berikut:
Error:
|
(Laporan ini tidak memberikan informasi apa pun tentang produk yang digunakan, sejak saat masalah diamati atau detail penyiapan apa pun.) |
Debug gagal dengan error berikut di Apigee hybrid versi 1.3 Error:
Detail penyiapan Apigee Hybrid:
| Debug gagal di Apigee Hybrid. |
Artefak yang berguna
Memberikan artefak yang terkait dengan masalah ini akan mempercepat penyelesaian, karena membantu kami memahami perilaku yang tepat yang Anda amati dan mendapatkan lebih banyak insight tentangnya.
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 di Google Cloud dan Apigee hybrid:
Artefak | Deskripsi |
---|---|
Output alat debug | 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 atau error sebenarnya yang diamati. Hal ini berguna untuk error atau masalah yang diamati, seperti di UI atau Analytics. |
HAR (Http ARchive) | HAR adalah file yang diambil oleh alat sesi HTTP untuk men-debug masalah terkait UI. Screenshot dapat diambil menggunakan browser seperti Chrome, Firefox, atau Internet Explorer. |
tcpdumps |
Alat tcpdump merekam paket TCP/IP yang ditransfer atau diterima melalui jaringan. Hal ini berguna untuk masalah terkait jaringan seperti kegagalan handshake TLS, error 502 , dan masalah latensi, dll. |
Artefak tambahan untuk hybrid
Untuk hybrid, kami mungkin memerlukan beberapa artefak tambahan yang akan memfasilitasi diagnosis masalah yang lebih cepat.
Artefak | Deskripsi |
---|---|
Platform Apigee Hybrid | Tentukan salah satu
platform campuran yang didukung berikut yang digunakan:
|
Versi komponen Apigee hybrid dan dependen |
|
Topologi jaringan | Diagram topologi penginstalan Apigee yang menjelaskan penyiapan hibrida Anda, termasuk semua pusat data, cluster Kubernetes, namespace, dan pod. |
File YAML Penggantian | File overrides.yaml yang digunakan di setiap pusat data untuk menginstal platform runtime hybrid Apigee.
|
Status deployment Apigee Hybrid |
Output dari perintah berikut di setiap cluster Kubernetes/data center:
|
Log komponen Apigee Hybrid |
Berikan link ke log Cloud Operations (StackDriver) untuk komponen hybrid ATAU Anda dapat mengambil log komponen campuran Apigee menggunakan perintah berikut di setiap pusat data/cluster Kubernetes dan membagikannya kepada kami:
|
Menjelaskan log |
Informasi mendetail tentang pod. Hal ini berguna terutama jika Anda mengamati masalah seperti pod yang macet dalam
status
|
Cloud Monitoring |
|
Apigee hybrid must-gather
Anda juga dapat menjalankan skrip Must-Gather 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 membagi file besar menjadi beberapa bagian berukuran 25 MB yang dapat diupload ke portal Dukungan.
# split -b 25M diagnostic.tar.gz "diagnostic.tar.gz.part"
Cassandra Apigee hybrid harus dikumpulkan
Mengumpulkan data dasar
Berikan informasi berikut:
- Platform Apigee hybrid (GKE, GKE on-prem, AKS, EKS, dll.)
- Versi Apigee Hybrid
- ID project Google Cloud
- Organisasi Apigee hybrid
- Lingkungan Apigee Hybrid
- Apakah ini deployment satu atau multi-region?
- File
overrides.yaml
(satu untuk setiap cluster) - Berapa banyak organisasi Apigee hybrid yang diinstal di satu cluster?
- Apakah ada perubahan terbaru?
Mengumpulkan informasi proses debug Cassandra
Set Cassandra JMX credentials and run the below script to capture Cassandra debugging information from an Apigee hybrid cluster: # set JMX credentials JMX_USERNAME=jmxuser JMX_USER_PWD=iloveapis123 mkdir /tmp/apigee-cassandra-debug-info/ # Loop through all Cassandra pods for APIGEE_CASSANDRA_POD in $(kubectl -n apigee get pods -l app=apigee-cassandra --no-headers -o custom-columns=":metadata.name") ; do # Get Cassandra version kubectl -n apigee exec $APIGEE_CASSANDRA_POD -- nodetool -u $JMX_USERNAME -pw $JMX_USER_PWD version 2>&1 | tee /tmp/apigee-cassandra-debug-info/nodetool_version_$APIGEE_CASSANDRA_POD-$(date +%Y.%m.%d_%H.%M.%S).txt # Get Cassandra datacenter status kubectl -n apigee exec $APIGEE_CASSANDRA_POD -- nodetool -u $JMX_USERNAME -pw $JMX_USER_PWD status 2>&1 | tee /tmp/apigee-cassandra-debug-info/nodetool_status_$APIGEE_CASSANDRA_POD-$(date +%Y.%m.%d_%H.%M.%S).txt # Get Cassandra cluster information kubectl -n apigee exec $APIGEE_CASSANDRA_POD -- nodetool -u $JMX_USERNAME -pw $JMX_USER_PWD describecluster 2>&1 | tee /tmp/apigee-cassandra-debug-info/nodetool_describecluster_$APIGEE_CASSANDRA_POD-$(date +%Y.%m.%d_%H.%M.%S).txt # Get current ring/token status across the datacenter kubectl -n apigee exec $APIGEE_CASSANDRA_POD -- nodetool -u $JMX_USERNAME -pw $JMX_USER_PWD ring 2>&1 | tee /tmp/apigee-cassandra-debug-info/nodetool_ring_$APIGEE_CASSANDRA_POD-$(date +%Y.%m.%d_%H.%M.%S).txt # Get more information about heap usage, uptime, exceptions, etc kubectl -n apigee exec $APIGEE_CASSANDRA_POD -- nodetool -u $JMX_USERNAME -pw $JMX_USER_PWD info 2>&1 | tee /tmp/apigee-cassandra-debug-info/nodetool_info_$APIGEE_CASSANDRA_POD-$(date +%Y.%m.%d_%H.%M.%S).txt # Get gossip info kubectl -n apigee exec $APIGEE_CASSANDRA_POD -- nodetool -u $JMX_USERNAME -pw $JMX_USER_PWD gossipinfo 2>&1 | tee /tmp/apigee-cassandra-debug-info/nodetool_gossipinfo_$APIGEE_CASSANDRA_POD-$(date +%Y.%m.%d_%H.%M.%S).txt # Get status of current Cassandra operations kubectl -n apigee exec $APIGEE_CASSANDRA_POD -- nodetool -u $JMX_USERNAME -pw $JMX_USER_PWD compactionstats -H 2>&1 | tee /tmp/apigee-cassandra-debug-info/nodetool_compactionstats_$APIGEE_CASSANDRA_POD-$(date +%Y.%m.%d_%H.%M.%S).txt kubectl -n apigee exec $APIGEE_CASSANDRA_POD -- nodetool -u $JMX_USERNAME -pw $JMX_USER_PWD tpstats 2>&1 | tee /tmp/apigee-cassandra-debug-info/nodetool_tpstats_$APIGEE_CASSANDRA_POD-$(date +%Y.%m.%d_%H.%M.%S).txt kubectl -n apigee exec $APIGEE_CASSANDRA_POD -- nodetool -u $JMX_USERNAME -pw $JMX_USER_PWD netstats -H 2>&1 | tee /tmp/apigee-cassandra-debug-info/nodetool_netstat_$APIGEE_CASSANDRA_POD-$(date +%Y.%m.%d_%H.%M.%S).txt kubectl -n apigee exec $APIGEE_CASSANDRA_POD -- nodetool -u $JMX_USERNAME -pw $JMX_USER_PWD cfstats -H 2>&1 | tee /tmp/apigee-cassandra-debug-info/nodetool_cfstats_$APIGEE_CASSANDRA_POD-$(date +%Y.%m.%d_%H.%M.%S).txt # Get proxy histograms (shows the full request latency recorded by the coordinator) kubectl -n apigee exec $APIGEE_CASSANDRA_POD -- nodetool -u $JMX_USERNAME -pw $JMX_USER_PWD proxyhistograms 2>&1 | tee /tmp/apigee-cassandra-debug-info/nodetool_proxyhistograms_$APIGEE_CASSANDRA_POD-$(date +%Y.%m.%d_%H.%M.%S).txt done # compress all collected data tar -czvf apigee-cassandra-debug-info-$(date +%Y.%m.%d_%H.%M.%S).tar.gz -C /tmp apigee-cassandra-debug-info
Template kasus dan contoh kasus
Bagian ini menyediakan template kasus dan contoh kasus untuk berbagai produk berdasarkan praktik terbaik yang dijelaskan dalam dokumen ini:
Apigee Cloud
Template
Bagian ini menyediakan template contoh untuk Apigee di Google Cloud.
Masalah:
<Berikan deskripsi mendetail tentang masalah atau perilaku yang diamati di pihak Anda. Sertakan nama dan versi produk jika berlaku.>
Pesan error:
<Sertakan pesan error lengkap yang diamati (jika ada)>
Waktu mulai masalah (format ISO 8601):
Waktu akhir masalah (format ISO 8601):
Detail penyiapan Apigee:
Nama organisasi:
Nama lingkungan:
Nama proxy API:
Nomor revisi:
Langkah-langkah untuk mereproduksi:
<Berikan langkah-langkah untuk merekonstruksi masalah jika memungkinkan>
Informasi diagnostik:
<List of files attached>
Contoh kasus
Bagian ini memberikan contoh kasus untuk Apigee di Google Cloud.
Masalah:
Kami melihat banyak error 503 Layanan Tidak Tersedia di organisasi Cloud Publik kami. Bisakah Anda memeriksa masalah ini dan menyelesaikannya atau memberi tahu kami cara menyelesaikannya?
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 lingkungan: dev
Nama proxy API: myproxy
Nomor revisi: 3
Langkah-langkah untuk mereproduksi:
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 memberikan contoh template untuk Apigee hybrid.
Masalah:
<Berikan deskripsi mendetail tentang masalah atau perilaku yang diamati di pihak Anda. Sertakan nama dan versi produk jika berlaku.>
Pesan error:
<Sertakan pesan error lengkap yang diamati (jika ada)>
Waktu mulai masalah (format ISO 8601):
Waktu akhir masalah (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 campuran:
ID project Google Cloud:
<Jika Anda menggunakan Google Kubernetes Engine (GKE), pastikan Anda memberikan ID project tempat cluster berada. Jika Anda menggunakan GKE on-premise, Azure Kubernetes Service, atau Amazon EKS, berikan project ID tempat Anda mengirim log.>
Organisasi hybrid Apigee:
Env hybrid Apigee: - Apigee hybrid dan versi CLI lainnya:
Versi CLI Apigee hybrid (apigeectl
):
Versi kubectl: - Detail nama cluster Kubernetes:
k8sCluster:
name:
region: - Topologi jaringan:
<Lampirkan topologi jaringan yang menjelaskan penyiapan hybrid Apigee Anda, termasuk pusat data, cluster Kubernetes, namespace, dan pod.> - File YAML Penggantian:
<Lampirkan file YAML Penggantian.>
Langkah-langkah untuk merekonstruksi
<Berikan langkah-langkah untuk merekonstruksi masalah jika memungkinkan>
Informasi diagnostik:
<List of files attached>
Contoh kasus
Bagian ini memberikan contoh kasus untuk Apigee hybrid.
Masalah:
Kami 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" } }
Waktu mulai masalah (format ISO 8601): Sejak 24-10-2020 10.30 PDT
Waktu berakhir masalah (format ISO 8601): Terus mengamati masalah.
Detail penyiapan Apigee Hybrid:
- Platform Apigee Hybrid
GKE versi 1.15.1 - Project Google Cloud, Organisasi dan Lingkungan campuran
Project ID Google Cloud:apigee-hybrid-123456
Catatan: Ini adalah project ID tempat cluster berada.
Organisasi Apigee Hybrid:apigee-hybrid-123456
Lingkungan Apigee Hybrid: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 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:
name:user-cluster-1
region:us-east1
- Topologi jaringan
Melampirkan filenetwork-topology.png
- Mengganti File YAML
Melampirkan fileoverrides.yaml
Langkah-langkah untuk mereproduksi:
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:
Melampirkan file berikut:
network-topology.png
overrides.yaml file
- Log MART
- Log sinkronisasi