Praktik terbaik untuk kasus dukungan Google Cloud Apigee

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.
  • Versi campuran
Detail masalah Deskripsi masalah yang jelas dan mendetail yang menguraikan masalah, termasuk pesan error lengkap, jika ada.
  • Pesan error
  • Output alat debug
  • Langkah-langkah untuk merekonstruksi masalah
  • Menyelesaikan permintaan/perintah API
  • Pesan error
  • Output alat debug
  • Langkah-langkah untuk merekonstruksi masalah
  • Menyelesaikan permintaan/perintah API
  • Log diagnostik komponen
  • Metrik Cloud Monitoring
Waktu Stempel waktu spesifik kapan masalah dimulai dan berapa lama masalah tersebut berlangsung.
  • Tanggal, waktu, dan zona waktu terjadinya masalah
  • Durasi masalah
  • Tanggal, waktu, dan zona waktu terjadinya masalah
  • Durasi masalah
Penyiapan Informasi mendetail tentang tempat masalah diamati.
  • Nama organisasi
  • Nama lingkungan
  • Nama proxy API
  • Revisi

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 cqlsh.

(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 edgemicro baru edgemicro_auth gagal dengan error berikut:

{"error":"missing_authorization","error_description":"Missing Authorization header"}

Proxy edgemicro baru yang dibuat hari ini tidak berfungsi

(Nama proxy tidak diketahui. Tidak jelas apakah proxy menampilkan error atau respons yang tidak terduga.)

Klien kami mendapatkan error 500 dengan pesan error berikut saat membuat permintaan ke proxy API:

{"fault":{"faultstring":"Execution of JSReadResponse failed with error: Javascript runtime error: \"TypeError: Cannot read property \"content\" from undefined. (JSReadResponse.js:23)","detail":{"errorcode":"steps.javascript.ScriptExecutionFailed"}}}

Klien kami mendapatkan Error 500 saat membuat permintaan ke proxy API.

(Hanya menyampaikan Error 500 tidak memberikan informasi yang memadai bagi kami untuk menyelidiki masalah tersebut. Kita perlu mengetahui pesan error dan kode error yang sebenarnya yang diamati.)

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 503s diamati kemarin pukul 17.30 selama 5 menit.

(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

401 Error telah meningkat di Apigee di Google Cloud sejak 06-11-2020 09.30 CST.

Detail penyiapan Apigee:

Detail API yang gagal adalah sebagai berikut:
  Nama organisasi: myorg
  Nama lingkungan: test
  Nama proxy API: myproxy
  Nomor revisi: 3

Error:

{"fault":{"faultstring":"Failed to resolve API Key variable request.header.X-APP-API_KEY","detail":{"errorcode":"steps.oauth.v2.FailedToResolveAPIKey"}}}

401 Error telah meningkat.

(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:

Error while Creating trace session for corp-apigwy-discovery, revision 3, environment dev.

Failed to create DebugSession {apigee-hybrid-123456 dev corp-apigwy-discovery 3 ca37384e-d3f4-4971-9adb-dcc36c392bb1}

Detail penyiapan Apigee Hybrid:

  • Platform hybrid Apigee:
      Anthos GKE secara lokal versi 1.4.0
  • Project Google Cloud, organisasi dan lingkungan hybrid
      ID Project Google Cloud: apigee-hybrid-123456
      Organisasi hybrid Apigee: apigee-hybrid-123456
      Lingkungan hybrid Apigee: dev
  • Detail nama cluster Kubernetes
      k8sCluster:
      name: user-cluster-1
      region: us-east1
  • Topologi jaringan
    Melampirkan file network-topology.png.
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:
  • GKE
  • GKE on-prem
  • AKS (Azure Kubernetes Service)
  • Amazon EKS
  • GKE di AWS
Versi komponen Apigee hybrid dan dependen
  • Versi CLI Apigee Hybrid: Versi
    apigeectl
  • Versi Apigee Connect Agent:
    kubectl -n=apigee get pods -l app=apigee-connect-agent -o=json | jq '.items[].spec.containers[].image'
  • Versi Apigee MART:
    kubectl -n=apigee get pods -l app=apigee-mart -o=json | jq '.items[].spec.containers[].image'
  • Versi Apigee Synchronizer:
    kubectl -n=apigee get pods -l app=apigee-synchronizer -o=json | jq '.items[].spec.containers[].image'
  • Versi Cassandra Apigee:
    kubectl -n=apigee get pods -l app=apigee-cassandra -o=json | jq '.items[].spec.containers[].image'
  • Versi Runtime Apigee:
    kubectl -n=apigee get pods -l app=apigee-runtime -o=json | jq '.items[].spec.containers[].image'
  • Versi server dan CLI Kubernetes: Versi
    kubectl
  • Versi server dan CLI Istio: Versi
    istioctl
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:

kubectl get pods -A
kubectl get services -A

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:

kubectl -n {namespace} get pods
kubectl -n {namespace} logs {pod-name}

  • Log Agen Apigee Connect:
    kubectl -n {namespace} get pods
    kubectl -n {namespace} logs {apigee-connect-agent-pod-name}
  • Log MART:
    kubectl -n {namespace} get pods
    kubectl -n {namespace} logs {apigee-mart-pod-name}
  • Log sinkronisasi:
    kubectl -n {namespace} get pods
    kubectl -n {namespace} logs {synchronizer-pod-name}
  • Log Cassandra Apigee:
    kubectl -n {namespace} get pods
    kubectl -n {namespace} logs {apigee-cassandra-pod-name}
  • Log Runtime MP/Apigee (dari semua pod apigee-runtime):
    kubectl -n {namespace} get pods
    kubectl -n {namespace} logs {apigee-runtime-pod-name}
Menjelaskan log

Informasi mendetail tentang pod.

Hal ini berguna terutama jika Anda mengamati masalah seperti pod yang macet dalam status CrashLoopBackoff.

kubectl -n apigee describe pod {pod-name}

Cloud Monitoring
  • Menautkan ke Dasbor metrik
  • Ringkasan dasbor apa pun yang terkait dengan Metrik 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

Setelah log dibuat, kompresi semua file output dalam satu tar ball 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 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 file network-topology.png
  • Mengganti File YAML
    Melampirkan file overrides.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