הדף הזה רלוונטי ל-Apigee ול-Apigee Hybrid.
לעיון במסמכי התיעוד של Apigee Edge
כשמספקים מידע מפורט ונדרש בבקשת התמיכה, קל יותר לצוות התמיכה של Google Cloud להגיב במהירות וביעילות. כשחסרים פרטים חיוניים בבקשת התמיכה, אנחנו צריכים לבקש עוד מידע, ולפעמים זה כרוך בהתכתבות הלוך ושוב כמה פעמים. התהליך הזה לוקח יותר זמן ויכול לגרום לעיכובים בפתרון הבעיות. במדריך הזה לשיטות מומלצות מוסבר איזה מידע דרוש לנו כדי שנוכל לטפל במהירות בבקשות לתמיכה טכנית.
תיאור הבעיה
בבעיה צריך להיות מידע שמסביר את הפרטים על מה שקרה לעומת מה שציפיתם שיקרה, וגם מתי ואיך זה קרה. פנייה טובה לתמיכה צריכה לכלול את פרטי המפתח הבאים לגבי כל אחד ממוצרי Apigee:
| Key information | תיאור | Apigee ב-Google Cloud | Apigee Hybrid |
|---|---|---|---|
| מוצר | המוצר הספציפי של Apigee שבו נצפתה הבעיה, כולל פרטי הגרסה אם רלוונטי. |
|
|
| פרטי הבעיה | תיאור ברור ומפורט של הבעיה, כולל הודעת השגיאה המלאה, אם יש כזו. |
|
|
| זמן | חותמת הזמן הספציפית שבה הבעיה התחילה וכמה זמן היא נמשכה. |
|
|
| הגדרה | מידע מפורט על המקום שבו הבעיה מתרחשת. |
|
|
בחלקים הבאים נרחיב על כך בפירוט.
מוצר
יש מוצרים שונים של Apigee, Apigee ב-Google Cloud ו-Apigee hybrid, ולכן אנחנו צריכים מידע ספציפי לגבי המוצר שבו הייתה הבעיה.
בטבלה הבאה מופיעות כמה דוגמאות למידע מלא בעמודה DOs ולמידע לא מלא בעמודה DON'Ts:
| DOs | מה לא לעשות |
|---|---|
הפריסה של ה-proxy ל-API OAuth2 נכשלה בארגון Apigee on Google Cloud ... |
הפריסה של proxy ל-API נכשלה (אנחנו צריכים לדעת באיזה מוצר של Apigee נתקלת בבעיה). |
קיבלנו את השגיאה הבאה כשניסינו לגשת אל Cassandra באמצעות
cqlsh ב-Apigee Hybrid גרסה 1.3 ... |
אין לנו גישה ל-Cassandra באמצעות (חסרים פרטי הגרסה ההיברידית) |
פרטי הבעיה
צריך לספק מידע מדויק על הבעיה שנצפתה, כולל הודעת השגיאה (אם יש כזו) וההתנהגות הצפויה וההתנהגות בפועל שנצפתה.
בטבלה הבאה מופיעות כמה דוגמאות למידע מלא בעמודה DOs ולמידע לא מלא בעמודה DON'Ts:
| DOs | מה לא לעשות |
|---|---|
|
שרת ה-proxy החדש |
שרת proxy חדש של (שם ה-proxy לא ידוע. לא ברור אם ה-proxy מחזיר שגיאה או תגובה לא צפויה כלשהי). |
|
הלקוחות שלנו מקבלים שגיאות |
הלקוחות שלנו מקבלים שגיאות
(העברת מידע רק על שגיאות |
שעה
הזמן הוא נתון קריטי. חשוב למהנדס התמיכה לדעת מתי הבחנת בבעיה בפעם הראשונה, כמה זמן היא נמשכה ואם היא עדיין נמשכת.
יכול להיות שמהנדס התמיכה שיטפל בבעיה יהיה באזור זמן שונה משלכם, לכן אמירות יחסיות לגבי זמן יקשו עליו לאבחן את הבעיה. לכן, מומלץ להשתמש בפורמט ISO 8601 לחותמת התאריך והשעה כדי לספק את פרטי הזמן המדויקים שבהם נצפתה הבעיה.
בטבלה הבאה מופיעות דוגמאות לזמן ולמשך מדויקים שבהם הבעיה התרחשה בעמודה מה כן לעשות, ודוגמאות למידע מעורפל או לא ברור לגבי הזמן שבו הבעיה התרחשה בעמודה מה לא לעשות:
| DOs | מה לא לעשות |
|---|---|
מספר גדול של 503s נצפו אתמול בין
2020-11-06 17:30 PDT לבין 2020-11-06 17:35 PDT... |
מספר עצום של (אנחנו נאלצים להשתמש בתאריך המשוער, וגם לא ברור באיזו אזור זמן הבעיה הזו נצפתה). |
| נצפו זמני אחזור ארוכים בשרתי ה-API Proxy הבאים מ-2020-11-09 15:30 IST עד 2020-11-09 18:10 IST ... |
בשבוע שעבר נצפו השהיות גבוהות בחלק משרתי ה-API Proxy. (לא ברור באיזה יום ובמשך כמה זמן הבעיה הזו נצפתה בשבוע האחרון). |
הגדרה
אנחנו צריכים לדעת פרטים על המקום שבו הבעיה מופיעה. בהתאם למוצר שבו אתם משתמשים, אנחנו צריכים את הפרטים הבאים:
- אם אתם משתמשים ב-Apigee ב-Google Cloud, יכול להיות שיש לכם יותר מארגון אחד, ולכן אנחנו צריכים לדעת את הארגון הספציפי ופרטים נוספים שקשורים לבעיה שנתקלתם בה:
- שמות הארגון והסביבה
- שם ה-proxy ל-API ומספרי הגרסאות (לגבי כשלים בבקשות ל-API)
- אם אתם משתמשים בהיברידי, יכול להיות שאתם משתמשים באחת מ הפלטפורמות ההיברידיות הרבות שנתמכות ובטופולוגיות התקנה שונות. לכן אנחנו צריכים לדעת באיזו פלטפורמה היברידית ובאיזו טופולוגיה אתם משתמשים, כולל פרטים כמו מספר מרכזי הנתונים והצמתים.
בטבלה הבאה מופיעות כמה דוגמאות למידע מלא בעמודה מה כן, ולמידע לא מלא בעמודה מה לא:
| DOs | מה לא לעשות |
|---|---|
|
פרטי ההגדרה של Apigee:
פרטי ה-API שנכשל:
שגיאה: |
מספר השגיאות (היא לא מספקת מידע על המוצר שבו נעשה שימוש, על התקופה שבה הבעיה נצפתה או על פרטי ההגדרה). |
ניפוי הבאגים נכשל עם השגיאה הבאה ב-Apigee Hybrid גרסה 1.3 שגיאה:
פרטי ההגדרה של Apigee Hybrid:
| ניפוי הבאגים נכשל ב-Apigee Hybrid. |
קבצים נלווים
כל קובץ נוסף שתוכלו לספק לנו וקשור לבעיה יעזור לנו לפתור אותה מהר יותר, כי נוכל להבין את ההתנהגות המדויקת שאתם רואים ולקבל תובנות נוספות לגביה.
בקטע הזה מתוארים כמה ארטיפקטים שימושיים שרלוונטיים לכל מוצרי Apigee:
פריטי מידע שנוצרו בתהליך הפיתוח (Artifact) משותפים לכל מוצרי Apigee
הארטיפקטים הבאים שימושיים לכל מוצרי Apigee: Apigee ב-Google Cloud ו-Apigee hybrid:
| ארטיפקט | תיאור |
|---|---|
| פלט של כלי לניפוי באגים | הפלט של כלי הניפוי מכיל מידע מפורט על בקשות ה-API שמועברות דרך מוצרי Apigee. האפשרות הזו שימושית לכל שגיאות זמן הריצה, כמו 4XX, 5XX ובעיות שקשורות לזמן אחזור. |
| צילומי מסך | צילומי מסך עוזרים להעביר את ההקשר של ההתנהגות או השגיאה בפועל שנצפו. הוא יכול לעזור לכם לפתור שגיאות או בעיות שזיהיתם, למשל בממשק המשתמש או ב-Analytics. |
| HAR (Http ARchive) | קובץ HAR הוא קובץ שמתועד על ידי כלים של סשנים ב-HTTP לצורך ניפוי באגים של בעיות שקשורות לממשק המשתמש. אפשר לצלם את המסך באמצעות דפדפנים כמו Chrome, Firefox או Internet Explorer. |
tcpdumps |
הכלי tcpdump מתעד חבילות TCP/IP שהועברו או התקבלו ברשת. האפשרות הזו שימושית לפתרון בעיות שקשורות לרשת, כמו כשלים בתהליך הלחיצה של TLS, שגיאות 502 ובעיות של זמן אחזור וכו'. |
פריטי מידע נוספים שנוצרו בתהליך פיתוח (Artifact) עבור סביבה היברידית
במקרה של פריסה היברידית, יכול להיות שנצטרך עוד קבצים שיעזרו לנו לאבחן את הבעיות מהר יותר.
| ארטיפקט | תיאור |
|---|---|
| פלטפורמת Apigee Hybrid | מציינים את אחת מ
פלטפורמות ההיברידיות הנתמכות שבהן נעשה שימוש:
|
| גרסאות של Apigee Hybrid ושל רכיבים תלויים |
|
| הטופולוגיה של הרשת | תרשים טופולוגיית ההתקנה של Apigee שמתאר את ההגדרה ההיברידית, כולל כל מרכזי הנתונים, אשכולות Kubernetes, מרחבי השמות וה-Pods. |
| קובץ YAML של שינויים מברירת המחדל | קובץ overrides.yaml שמשמש בכל מרכז נתונים להתקנת מישור זמן הריצה של Apigee hybrid.
|
| סטטוס הפריסה של Apigee Hybrid |
הפלט של הפקודות הבאות בכל מרכז נתונים או אשכול Kubernetes:
|
| יומני רכיבים של Apigee Hybrid |
צריך לספק קישורים ליומנים של Cloud Operations (StackDriver) עבור הרכיבים ההיברידיים או אפשר לאחזר את היומנים של רכיב Apigee hybrid באמצעות הפקודות הבאות בכל מרכז נתונים או אשכול Kubernetes ולשתף אותם איתנו:
|
| תיאור של יומנים |
מידע מפורט על הפוד. האפשרות הזו שימושית במיוחד אם אתם נתקלים בבעיות כמו פודים שנתקעים במצב
|
| Cloud Monitoring |
|
Apigee Hybrid must-gather
אפשר גם להריץ את סקריפט Must-Gather על סמך הפקודות שמפורטות בהמשך.
###--- "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
# tar -cvzf /tmp/apigee_hybrid_logs_$(date +%Y.%m.%d_%H.%M).tar.gz /tmp/k_*
אם קובץ ה-TAR גדול מ-25MB, אפשר להעלות אותו ל-Google Drive ולשתף איתנו את הקישור. אפשר גם להשתמש בפקודה split כדי לפצל את הקבצים הגדולים לחלקים של 25MB שאפשר להעלות לפורטל התמיכה.
# split -b 25M diagnostic.tar.gz "diagnostic.tar.gz.part"
Apigee hybrid Cassandra must-gather
איסוף נתונים בסיסיים
עליך לספק את הפרטים הבאים:
- פלטפורמת Apigee Hybrid (GKE, GKE בארגון, AKS, EKS וכו')
- גרסת Apigee Hybrid
- מזהה הפרויקט ב-Google Cloud
- ארגון Apigee Hybrid
- סביבת Apigee Hybrid
- האם מדובר בפריסה באזור אחד או בכמה אזורים?
- קובץ
overrides.yaml(אחד לכל אשכול) - כמה ארגונים ב-Apigee Hybrid מותקנים באותו אשכול?
- האם נעשו שינויים לאחרונה?
איסוף מידע על תוצאות ניפוי הבאגים ב-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
Apigee hybrid MCP must-gather
מריצים את הסקריפט הבא כשפותחים בקשת תמיכה שקשורה למישור הנתונים של Model Context Protocol (MCP) ב-Apigee Hybrid. הסקריפט אוסף את מצב ה-pod של MCP, את יומני הצד ואת מאגרי הנתונים של מישור הנתונים של MCP, את משאבי ה-MCP (ApigeeDeployment, Service, HPA, ApigeeRoute) ואת מעבד ההודעות hostAliases שמנתב את התנועה של כלי ה-MCP למישור הנתונים של MCP.
# Create a temporary directory to store the MCP debugging information. mkdir -p /tmp/apigee-mcp-debug-info/ ###--- MCP pod state ---### kubectl -n apigee get pod -l app=apigee-mcp-server -o wide 2>&1 | tee /tmp/apigee-mcp-debug-info/k_get_pod_mcp_$(date +%Y.%m.%d_%H.%M.%S).txt kubectl -n apigee describe pod -l app=apigee-mcp-server 2>&1 | tee /tmp/apigee-mcp-debug-info/k_desc_pod_mcp_$(date +%Y.%m.%d_%H.%M.%S).txt ###--- MCP resources: ApigeeDeployment (CRD, not vanilla Deployment), Service, HPA ---### kubectl -n apigee get apigeedeployment -l app=apigee-mcp-server -o yaml 2>&1 | tee /tmp/apigee-mcp-debug-info/k_get_apigeedeployment_mcp_$(date +%Y.%m.%d_%H.%M.%S).yaml kubectl -n apigee describe apigeedeployment -l app=apigee-mcp-server 2>&1 | tee /tmp/apigee-mcp-debug-info/k_desc_apigeedeployment_mcp_$(date +%Y.%m.%d_%H.%M.%S).txt kubectl -n apigee get svc -l app=apigee-mcp-server -o yaml 2>&1 | tee /tmp/apigee-mcp-debug-info/k_get_svc_mcp_$(date +%Y.%m.%d_%H.%M.%S).yaml kubectl -n apigee get hpa 2>&1 | grep apigee-mcp-server | tee /tmp/apigee-mcp-debug-info/k_get_hpa_mcp_$(date +%Y.%m.%d_%H.%M.%S).txt ###--- MCP data plane container logs (apigee-mcp-server) ---### ###--- MCP sidecar container logs (apigee-mcp-server-config) ---### for p in $(kubectl -n apigee get pods -l app=apigee-mcp-server --no-headers -o custom-columns=":metadata.name"); do kubectl -n apigee logs $p -c apigee-mcp-server --tail=2000 2>&1 | tee /tmp/apigee-mcp-debug-info/k_logs_${p}_apigee-mcp-server_$(date +%Y.%m.%d_%H.%M.%S).log kubectl -n apigee logs $p -c apigee-mcp-server-config --tail=2000 2>&1 | tee /tmp/apigee-mcp-debug-info/k_logs_${p}_apigee-mcp-server-config_$(date +%Y.%m.%d_%H.%M.%S).log done ###--- Ingress routing state (ApigeeRoute + ApigeeRouteConfig for the MCP-serving envgroup) ---### kubectl -n apigee get apigeeroute -o yaml 2>&1 | tee /tmp/apigee-mcp-debug-info/k_get_apigeeroute_$(date +%Y.%m.%d_%H.%M.%S).yaml kubectl -n apigee get apigeerouteconfig -o yaml 2>&1 | tee /tmp/apigee-mcp-debug-info/k_get_apigeerouteconfig_$(date +%Y.%m.%d_%H.%M.%S).yaml ###--- Message Processor hostAliases (verifies MCP injection into MP pods) ---### ###--- Every MP pod must show one entry with two hostnames: mcp.apigee.internal and.mcp.apigee.internal ---### for p in $(kubectl -n apigee get pods -l app=apigee-runtime --no-headers -o custom-columns=":metadata.name"); do kubectl -n apigee get pod $p -o jsonpath='{.spec.hostAliases}{"\n"}' 2>&1 | tee /tmp/apigee-mcp-debug-info/k_mp_hostaliases_${p}_$(date +%Y.%m.%d_%H.%M.%S).txt done ###--- Recent events in the apigee namespace filtered for MCP resources ---### ###--- (matches on the resource-name prefix, not the substring "mcp", to ---### ###--- avoid false positives when your organization name contains "mcp".) ---### kubectl -n apigee get events --sort-by='.lastTimestamp' 2>&1 | grep -iE 'apigee-mcp-server' | tee /tmp/apigee-mcp-debug-info/k_events_mcp_$(date +%Y.%m.%d_%H.%M.%S).txt # compress all collected data tar -czvf apigee-mcp-debug-info-$(date +%Y.%m.%d_%H.%M.%S).tar.gz -C /tmp apigee-mcp-debug-info
אם קובץ ה-TAR גדול מ-25MiB, צריך לפצל אותו לחלקים של 25MiB כדי להעלות אותו לפורטל התמיכה באמצעות אותה פרוצדורה שמתוארת בקטע Apigee hybrid must-gather שלמעלה.
תבניות של בקשות תמיכה ודוגמאות לבקשות תמיכה
בסעיף הזה מפורטות תבניות של פניות ותבניות לדוגמה למוצרים שונים, בהתאם לשיטות המומלצות שמתוארות במסמך הזה:
Apigee Cloud
תבנית
בקטע הזה מופיעה תבנית לדוגמה ל-Apigee ב-Google Cloud.
הבעיה:
<כאן צריך לתת תיאור מפורט של הבעיה או של ההתנהגות שנצפתה אצלך. צריך לכלול את שם המוצר והגרסה שלו, אם רלוונטי.>
הודעת שגיאה:
<Include the complete error message observed (if any)>
שעת ההתחלה של הבעיה (בפורמט ISO 8601):
שעת הסיום של הבעיה (בפורמט ISO 8601):
פרטי ההגדרה של Apigee:
שמות הארגונים:
שמות הסביבות:
שמות ה-proxy ל-API:
מספרי הגרסאות:
צעדים לשחזור:
<Provide steps to reproduce the issue where possible>
מידע על אבחון:
<רשימת הקבצים המצורפים>
דוגמה לבקשת תמיכה
בקטע הזה מופיעה דוגמה לתרחיש של Apigee ב-Google Cloud.
הבעיה:
אנחנו רואים מספר גבוה של שגיאות מסוג 503 (השירות לא זמין) בארגון Public Cloud שלנו. אפשר לבדוק את הבעיה ולפתור אותה או להסביר לנו איך לפתור אותה?
הודעת שגיאה:
{"fault":{"faultstring":"The Service is temporarily available", "detail":{"errorcode":"messaging.adaptors.http.flow.ServiceUnavailable"}}}
שעת התחלה של הבעיה (בפורמט ISO 8601): 2020-10-04 06:30 IST
שעת סיום הבעיה (בפורמט ISO 8601): הבעיה עדיין מתרחשת.
פרטי ההגדרה של Apigee Cloud:
שמות הארגונים: myorg
שמות הסביבות: dev
שמות ה-proxy ל-API: myproxy
מספרי הגרסאות: 3
צעדים לשחזור:
מריצים את הפקודה הבאה curl כדי לשחזר את הבעיה:
curl -X GET 'https://myorg-dev.apigee.net/v1/myproxy'
מידע על אבחון:
פלט של כלי לניפוי באגים (trace-503.xml)
מודל השתתפות היברידי
תבנית
בקטע הזה מופיעה תבנית לדוגמה ל-Apigee Hybrid.
הבעיה:
<כאן צריך לתת תיאור מפורט של הבעיה או של ההתנהגות שנצפתה אצלך. צריך לכלול את שם המוצר והגרסה שלו, אם רלוונטי.>
הודעת שגיאה:
<Include the complete error message observed (if any)>
שעת ההתחלה של הבעיה (בפורמט ISO 8601):
שעת הסיום של הבעיה (בפורמט ISO 8601):
פרטי ההגדרה של Apigee Hybrid:
- פלטפורמת Apigee Hybrid:
<כאן צריך לספק מידע על הפלטפורמה שבה התקנתם את הגרסה ההיברידית ואת הגרסה שלה.>
- פרויקט Google Cloud, ארגון וסביבה היברידיים:
מזהה פרויקט Google Cloud:
<אם אתם משתמשים ב-Google Kubernetes Engine (GKE), חשוב לציין את מזהה הפרויקט שבו נמצאים האשכולות. אם אתם משתמשים ב-GKE On-Prem, ב-Azure Kubernetes Service או ב-Amazon EKS, עליכם לספק את מזהה הפרויקט שאליו אתם שולחים את היומנים.>
Apigee hybrid org:
Apigee hybrid env: - Apigee Hybrid וגרסאות אחרות של CLI:
גרסת Apigee Hybrid CLI (apigeectl):
גרסת Kubectl: - פרטים על השם של אשכול Kubernetes:
k8sCluster:
name:
region: - טופולוגיית הרשת:
<Attach the network topology describing the setup of your Apigee hybrid including data centers, Kubernetes clusters, namespaces, and pods.> - קובץ YAML של שינויים:
<Attach the Overrides YAML file.>
שלבים לשחזור
<Provide steps to reproduce the issue where possible>
מידע על אבחון:
<רשימת הקבצים המצורפים>
דוגמה לבקשת תמיכה
בקטע הזה מופיעה דוגמה לתרחיש של Apigee Hybrid.
הבעיה:
אנחנו מקבלים שגיאות כשמבצעים ממשקי API לניהול ב-Apigee hybrid version 1.3.
הודעת שגיאה:
[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"
}
}
שעת ההתחלה של הבעיה (בפורמט ISO 8601): מאז 2020-10-24 10:30 PDT
שעת סיום הבעיה (בפורמט ISO 8601): הבעיה עדיין נמשכת.
פרטי ההגדרה של Apigee Hybrid:
- פלטפורמת Apigee Hybrid
גרסת GKE 1.15.1 - פרויקט Google Cloud, ארגון וסביבה היברידיים
מזהה פרויקט Google Cloud:apigee-hybrid-123456
הערה: זהו מזהה הפרויקט שבו נמצאים האשכולות.
ארגון Apigee Hybrid: apigee-hybrid-123456
סביבת Apigee Hybrid: dev - גרסאות של Apigee Hybrid ושל CLI אחרים:
גרסת Apigee Hybrid CLI (apigeectl):
גרסה:1.2.0
Commit:ac09109
מזהה Build: 214
זמן Build: 2020-03-30T20:23:36Z
גרסת Go: go1.12
גרסת Kubectl:
גרסת לקוח:version.Info{Major:"1", Minor:"15", GitVersion:"v1.15.0", GitCommit:"e8462b5b5dc2584fdcd18e6bcfe9f1e4d970a529", GitTreeState:"clean", BuildDate:"2019-06-19T16:40:16Z", GoVersion:"go1.12.5", Compiler:"gc", Platform:"darwin/amd64"}
גרסת השרת:version.Info{Major:"1", Minor:"14+", GitVersion:"v1.14.10-gke.36", GitCommit:"34a615f32e9a0c9e97cdb9f749adb392758349a6", GitTreeState:"clean", - פרטים על שם אשכול Kubernetes:
k8sCluster:
name:user-cluster-1
region:us-east1 - טופולוגיה של הרשת
הקובץnetwork-topology.pngצורף - קובץ YAML של שינוי ברירת המחדל
הקובץoverrides.yamlצורף
צעדים לשחזור:
מריצים את Management API הבא כדי לראות את השגיאה:
curl -X GET --header "Authorization: Bearer <TOKEN>" "https://apigee.googleapis.com/v1/organizations/apigee-hybrid-123456/environments/dev/keyvaluemaps"
מידע אבחוני:
הקבצים הבאים צורפו:
network-topology.pngoverrides.yaml file- יומני MART
- יומני סנכרון