Praktik terbaik untuk kasus dukungan Google Cloud Apigee

Anda sedang melihat dokumentasi Apigee dan Apigee Hybrid.
Lihat dokumentasi Apigee Edge.

Memberikan informasi yang mendetail dan diperlukan dalam kasus dukungan akan mempermudah tim Dukungan Google Cloud merespons Anda dengan cepat dan efisien. Jika kasus dukungan Anda tidak memiliki detail penting, kami perlu meminta informasi lebih lanjut, yang mungkin melibatkan komunikasi berulang beberapa kali. Cara ini membutuhkan waktu lebih lama dan dapat menyebabkan keterlambatan dalam penyelesaian masalah. Panduan Praktik Terbaik ini memberi tahu Anda informasi yang kami perlukan untuk menyelesaikan kasus dukungan teknis Anda lebih cepat.

Menjelaskan masalah

Masalah harus berisi informasi yang menjelaskan detail tentang apa yang terjadi versus apa yang diharapkan terjadi, serta kapan dan bagaimana hal itu terjadi. Kasus dukungan yang baik harus berisi informasi utama berikut untuk setiap produk Apigee:

Informasi utama Deskripsi Apigee di Google Cloud Apigee hybrid
Produk Produk Apigee tertentu tempat masalah diamati, termasuk informasi versi jika berlaku.
  • Versi hybrid
Detail masalah Deskripsi masalah yang jelas dan mendetail yang menguraikan masalahnya, 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 saat masalah dimulai dan berapa lama 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 menunjukkan informasi lengkap di kolom LAKUKAN, dan informasi tidak lengkap di kolom JANGAN LAKUKAN:

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 hybrid tidak ada)

Detail masalah

Berikan informasi yang tepat tentang masalah yang diamati, termasuk pesan error (jika ada) serta perilaku yang diharapkan dan yang diamati.

Tabel berikut memberikan beberapa contoh yang menunjukkan informasi lengkap di kolom BOLEH, dan informasi tidak lengkap di kolom TIDAK BOLEH:

ANJURAN LARANGAN

Proxy edgemicro edgemicro_auth baru 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 ini. Kami perlu mengetahui pesan error dan kode error yang sebenarnya yang diamati.)

Waktu

Waktu adalah informasi yang sangat penting. Penting bagi Engineer Dukungan untuk mengetahui kapan Anda pertama kali melihat masalah ini, berapa lama masalah tersebut berlangsung, dan apakah masalahnya masih berlanjut.

Engineer Dukungan yang menyelesaikan masalah mungkin tidak berada di zona waktu Anda, sehingga pernyataan waktu yang bersifat relatif membuat masalah lebih sulit didiagnosis. Oleh karena itu, sebaiknya gunakan format ISO 8601 untuk stempel tanggal dan waktu guna memberikan informasi waktu yang tepat saat masalah diamati.

Tabel berikut memberikan beberapa contoh yang menunjukkan waktu dan durasi akurat terjadinya masalah di kolom BOLEH, dan informasi yang ambigu atau tidak jelas tentang kapan masalah terjadi di kolom TIDAK BOLEH:

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.

(Kita harus menggunakan tanggal yang tersirat dan tidak jelas juga di zona waktu mana masalah ini terjadi.)

Latensi tinggi diamati pada Proxy API berikut dari 2020-11-09 15.30 IST hingga 2020-11-09 18.10 IST ...

Latensi tinggi diamati pada beberapa Proxy API minggu lalu.

(Tidak jelas pada hari dan durasi berapa masalah ini diamati dalam seminggu terakhir.)

Penyiapan

Kami perlu mengetahui detail tentang di mana tepatnya Anda melihat masalah tersebut. 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 tersebut:
    • Nama Organisasi dan Lingkungan
    • Nama proxy API dan nomor revisi (untuk kegagalan permintaan API)
  • Jika menggunakan hybrid, Anda dapat menggunakan salah satu dari banyak platform 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 menunjukkan informasi lengkap di kolom YANG BOLEH, dan informasi tidak lengkap di kolom YANG TIDAK BOLEH:

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 org: myorg
  Nama env: 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.

(Tidak memberikan informasi apa pun tentang produk yang digunakan, sejak kapan masalah tersebut diamati, atau detail penyiapan apa pun.)

Proses 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 Apigee Hybrid:
      Anthos GKE on-prem versi 1.4.0
  • Project Google Cloud, organisasi dan lingkungan hybrid
      ID Project Google Cloud: apigee-hybrid-123456
      Org. hybrid Apigee: apigee-hybrid-123456
      Lingk. hybrid Apigee: dev
  • Detail nama cluster Kubernetes
      k8sCluster:
      name: user-cluster-1
      region: us-east1
  • Topologi jaringan
    File network-topology.png dilampirkan.
Proses debug gagal di Apigee Hybrid.

Artefak berguna

Dengan memberikan artefak yang terkait dengan masalah tersebut, penyelesaian masalah akan lebih cepat karena kami dapat memahami persis perilaku yang Anda amati dan mendapatkan lebih banyak insight tentangnya.

Bagian ini menjelaskan beberapa artefak berguna yang bermanfaat 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 apa pun seperti 4XX, 5XX, dan masalah latensi.
Screenshot Screenshot membantu menyampaikan konteks perilaku atau error sebenarnya yang diamati. Hal ini berguna untuk mengetahui error atau masalah yang diamati, seperti di UI atau Analytics.
HAR (Http ARchive) HAR adalah file yang direkam oleh alat sesi HTTP untuk men-debug masalah terkait UI. Hal ini dapat direkam 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 hybrid yang didukung yang digunakan:
  • GKE
  • GKE on-prem
  • AKS (Azure Kubernetes Service)
  • Amazon EKS
  • GKE di AWS
Versi komponen dependen dan Apigee Hybrid
  • Versi CLI Apigee Hybrid:
    apigeectl version
  • Versi Apigee Connect Agent:
    kubectl -n=apigee get pods -l app=apigee-connect-agent -o=json | jq '.items[].spec.containers[].image'
  • Versi MART Apigee:
    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 Apigee Cassandra:
    kubectl -n=apigee get pods -l app=apigee-cassandra -o=json | jq '.items[].spec.containers[].image'
  • Versi Apigee Runtime:
    kubectl -n=apigee get pods -l app=apigee-runtime -o=json | jq '.items[].spec.containers[].image'
  • Versi CLI dan server Kubernetes: Versi
    kubectl
  • Versi server dan CLI Istio: Versi
    istioctl
Topologi jaringan Diagram topologi penginstalan Apigee yang menjelaskan penyiapan hybrid Anda, termasuk semua pusat data, cluster Kubernetes, namespace, dan pod.
File YAML Penggantian File overrides.yaml yang digunakan di setiap pusat data untuk menginstal bidang runtime hybrid Apigee.
Status deployment Apigee Hybrid

Output dari perintah berikut di setiap pusat data/cluster Kubernetes:

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 Apigee hybrid 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 Apigee Connect Agent:
    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 Apigee Cassandra:
    kubectl -n {namespace} get pods
    kubectl -n {namespace} logs {apigee-cassandra-pod-name}
  • Log MP/Apigee Runtime (dari semua pod apigee-runtime):
    kubectl -n {namespace} get pods
    kubectl -n {namespace} logs {apigee-runtime-pod-name}
Mendeskripsikan 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 Anda
  • Screenshot dasbor apa pun yang terkait dengan Metrik Cloud Monitoring.

Pengumpulan data wajib Apigee Hybrid

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 -o yaml 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 sr -n apigee -o wide 2>&1 | tee /tmp/k_get_sr_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, kompres semua file output ke dalam satu tarball 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 linknya kepada kami. Atau, Anda dapat menggunakan perintah split untuk memecah file besar menjadi beberapa bagian berukuran 25 MB yang dapat diupload ke portal Dukungan.

	# split -b 25M diagnostic.tar.gz "diagnostic.tar.gz.part"

Pengumpulan data penting Cassandra Apigee Hybrid

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 region atau multi-region?
  • File overrides.yaml (satu untuk setiap cluster)
  • Berapa banyak organisasi Apigee hybrid yang diinstal pada satu cluster?
  • Apakah ada perubahan terbaru?

Mengumpulkan informasi proses debug Cassandra

Run the below script to capture Cassandra debugging information from an Apigee hybrid cluster:


# Create a temporary directory to store the Cassandra debugging information.
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 -- bash -c 'nodetool -u $APIGEE_JMX_USER -pw $APIGEE_JMX_PASSWORD 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 -- bash -c 'nodetool -u $APIGEE_JMX_USER -pw $APIGEE_JMX_PASSWORD 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 -- bash -c 'nodetool -u $APIGEE_JMX_USER -pw $APIGEE_JMX_PASSWORD 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 -- bash -c 'nodetool -u $APIGEE_JMX_USER -pw $APIGEE_JMX_PASSWORD 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 -- bash -c 'nodetool -u $APIGEE_JMX_USER -pw $APIGEE_JMX_PASSWORD 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 -- bash -c 'nodetool -u $APIGEE_JMX_USER -pw $APIGEE_JMX_PASSWORD gossipinfo' 2>&1 | tee /tmp/apigee-cassandra-debug-info/nodetool_gossipinfo_$APIGEE_CASSANDRA_POD-$(date +%Y.%m.%d_%H.%M.%S).txt

  # Get Cassandra compaction details
  kubectl -n apigee exec $APIGEE_CASSANDRA_POD -- bash -c 'nodetool -u $APIGEE_JMX_USER -pw $APIGEE_JMX_PASSWORD compactionstats' 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 -- bash -c 'nodetool -u $APIGEE_JMX_USER -pw $APIGEE_JMX_PASSWORD compactionhistory' 2>&1 | tee /tmp/apigee-cassandra-debug-info/nodetool_compactionhistory_$APIGEE_CASSANDRA_POD-$(date +%Y.%m.%d_%H.%M.%S).txt
  kubectl -n apigee exec $APIGEE_CASSANDRA_POD -- bash -c 'nodetool -u $APIGEE_JMX_USER -pw $APIGEE_JMX_PASSWORD getcompactionthroughput' 2>&1 | tee /tmp/apigee-cassandra-debug-info/nodetool_getcompactionthroughput_$APIGEE_CASSANDRA_POD-$(date +%Y.%m.%d_%H.%M.%S).txt
  kubectl -n apigee exec $APIGEE_CASSANDRA_POD -- bash -c 'nodetool -u $APIGEE_JMX_USER -pw $APIGEE_JMX_PASSWORD getconcurrentcompactors' 2>&1 | tee /tmp/apigee-cassandra-debug-info/nodetool_getconcurrentcompactors_$APIGEE_CASSANDRA_POD-$(date +%Y.%m.%d_%H.%M.%S).txt

  # Get status of current Cassandra operations
  kubectl -n apigee exec $APIGEE_CASSANDRA_POD -- bash -c 'nodetool -u $APIGEE_JMX_USER -pw $APIGEE_JMX_PASSWORD tablestats' 2>&1 | tee /tmp/apigee-cassandra-debug-info/nodetool_tablestats_$APIGEE_CASSANDRA_POD-$(date +%Y.%m.%d_%H.%M.%S).txt
  kubectl -n apigee exec $APIGEE_CASSANDRA_POD -- bash -c 'nodetool -u $APIGEE_JMX_USER -pw $APIGEE_JMX_PASSWORD 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 -- bash -c 'nodetool -u $APIGEE_JMX_USER -pw $APIGEE_JMX_PASSWORD netstats' 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 -- bash -c 'nodetool -u $APIGEE_JMX_USER -pw $APIGEE_JMX_PASSWORD tablestats' 2>&1 | tee /tmp/apigee-cassandra-debug-info/nodetool_tablestats_$APIGEE_CASSANDRA_POD-$(date +%Y.%m.%d_%H.%M.%S).txt
  kubectl -n apigee exec $APIGEE_CASSANDRA_POD -- bash -c 'nodetool -u $APIGEE_JMX_USER -pw $APIGEE_JMX_PASSWORD gcstats' 2>&1 | tee /tmp/apigee-cassandra-debug-info/nodetool_gcstats_$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 -- bash -c 'nodetool -u $APIGEE_JMX_USER -pw $APIGEE_JMX_PASSWORD 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 berakhir masalah (format ISO 8601):

Detail penyiapan Apigee:
  Nama org:
  Nama env:
  Nama proxy API:
  Nomor revisi:

Langkah-langkah untuk mereproduksi:

<Berikan langkah-langkah untuk mereproduksi 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 Service Unavailable di org. Public Cloud kami. Bisakah Anda menyelidiki 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 org: myorg
  Nama env: 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 menyediakan template contoh 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 berakhir masalah (format ISO 8601):

Detail penyiapan Apigee Hybrid:

  • Platform Apigee Hybrid:

    <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 ID project tempat cluster berada. Jika Anda menggunakan GKE on-prem, Azure Kubernetes Service, atau Amazon EKS, berikan project ID tempat Anda mengirim log.>
      Org hybrid Apigee:
      Lingkungan hybrid Apigee:
  • Apigee hybrid dan versi CLI lainnya:
      Versi CLI (apigeectl) Apigee hybrid:
      Versi Kubectl:
  • Detail nama cluster Kubernetes:
      k8sCluster:
      name:
      region:
  • Topologi jaringan:
    <Lampirkan topologi jaringan yang menjelaskan penyiapan Apigee Hybrid Anda, termasuk pusat data, cluster Kubernetes, namespace, dan pod.>
  • File YAML Penggantian:
    <Lampirkan file YAML Penggantian.>

Langkah-langkah untuk mereproduksi

<Berikan langkah-langkah untuk mereproduksi 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): Masih mengamati masalah ini.

Detail penyiapan Apigee Hybrid:

  • Platform Apigee Hybrid
    GKE versi 1.15.1
  • Project Google Cloud, Organisasi dan Lingkungan Hybrid
      Project ID Google Cloud: apigee-hybrid-123456
      Catatan: Ini adalah project ID tempat cluster berada.
      Org Apigee Hybrid: apigee-hybrid-123456
      Env 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 Management API 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