מוצג המסמך של Apigee Edge.
עוברים אל
מסמכי תיעוד של Apigee X. מידע
תיאור הבעיה
אפליקציית הלקוח מקבלת קוד סטטוס HTTP של 502 Bad Gateway עם
את הקוד ECONNRESET כתגובה לקריאות ל-API ב-Edge Microgateway.
הודעת שגיאה
הלקוח יראה את קוד התגובה הבא:
HTTP/1.1 502 Bad Gateway
התגובה תכלול את הודעת השגיאה הבאה:
{"message":"socket hang up","code":"ECONNRESET"}גורמים אפשריים
| סיבה | תיאור | הוראות לפתרון בעיות עבור |
|---|---|---|
| זמן קצוב לתפוגה של קובץ 'נשארים חיים' שהוגדר באופן שגוי | הזמן הקצוב לתפוגה של Keep-alive הוגדר בצורה שגויה בין Edge Microgateway לבין שרת היעד. | משתמשי Edge בענן הציבורי והפרטי |
| שרת היעד סוגר את החיבור מוקדם מדי | שרת היעד סוגר את החיבור מוקדם מדי בזמן שה-Edge Microgateway שולח המטען הייעודי (Payload) של הבקשה. | משתמשי Edge בענן הציבורי והפרטי |
שלבי אבחון נפוצים
- בודקים את יומני Edge Microgateway:
/var/tmp/edgemicro-`hostname`-*.log
- צריך לחפש אם יש שגיאות של
502עם הקודECONNRESETבמהלך פרק זמן ספציפי (אם הבעיה התרחשה בעבר) או אם יש בקשות עדיין נכשל עם502.2021-06-23T03:52:24.110Z [error][0:8000][3][myorg][test] [emg_badtarget/flakey/hangup][][][6b089a00-d3d6-11eb-95aa-911f1ee6c684] [microgateway-core][][GET][502][socket hang up][ECONNRESET][]
- אם רמת הרישום ביומן שלך מוגדרת ל-
warnאו ל-info, יהיה גם תהיה הודעת[warn], כולל שם המארח של שרת היעד והיציאה בשנייה לרכיב מסוים. בדוגמה הזו הואX.X.X.X:8080, ואפשר להשתמש בו מאוחר יותר כדי לצלםtcpdump.2021-06-23T03:52:24.109Z [warn][X.X.X.X:8080][3][myorg][test][emg_badtarget/flakey/hangup] [][][6b089a00-d3d6-11eb-95aa-911f1ee6c684][plugins-middleware] [targetRequest error][GET][][socket hang up][ECONNRESET][395]
- קוד השגיאה
[socket hang up][ECONNRESET]מציין ששרת היעד סגרו את החיבור עם Edge Microgateway. אפשר לחפש ביומנים כדי לדעת באיזו תדירות זה קורה.
הסיבה: הזמן הקצוב לתפוגה של 'משך חיים ללא הגבלת זמן' הוגדר בצורה שגויה
אבחון
- בצעו את השלבים המפורטים בשלבי האבחון הנפוצים כדי לוודא שקיבלתם
שגיאה
[socket hang up][ECONNRESET]. אם כן, ניתן לבדוק את הנושא לעומק
tcpdumpכפי שמוסבר בהמשך:
שימוש ב-tcpdump
- צילום
tcpdumpבין Edge Microgateway לשרת העורפי מופעל מערכת ההפעלה של המארח של Edge Microgateway באמצעות הפקודה הבאה:tcpdump -i any -s 0 host TARGET_SERVER_HOSTNAME -w FILENAME.pcap
- ניתוח הנתונים של
tcpdumpשתועדו:פלט tcpdump לדוגמה: ( הצגת תמונה גדולה יותר)
בדוגמה שלמעלה
tcpdumpניתן לראות את הפרטים הבאים:- בחבילה 250288, הלקוח שולח בקשת
POST. - בחבילה 250371, השרת מגיב עם
200 OK. - בחבילה 250559, הלקוח שולח
ACK. - בחבילה 250560, השרת שולח את
Continuationהודעה. - בחבילה 250561, הלקוח שולח
ACK. - בחבילה 262436, השרת שולח
FIN, ACKאל הלקוח שמתחיל את סגירת החיבור. לתשומת ליבכם: מדובר בערך 5 שניות אחרי החבילה הקודמת (250561). - בחבילה 262441, הלקוח שולח עוד
POSTבקשה. עם זאת, הדבר נכשל מכיוון שהשרת כבר יזם סגירה של חיבור כזה. הוא מגיב עםRSTבחבילה 262441.
בדוגמה הזו נעשה שימוש חוזר באותו חיבור לפחות פעם אחת, אבל מופעל הבקשה הסופית, השרת יוזם סגירה של החיבור לאחר חמש שניות. של זמן לא פעיל, שהוא מתרחש באותו זמן שבו הלקוח שלח בקשה חדשה. הזה מצביע על כך שסביר להניח שהזמן הקצוב לתפוגה של 'שמירה במצב פעיל' של שרת הקצה העורפי קצר או שווה ל- הערך שהוגדר בלקוח. כדי לאמת זאת, יש לעיין השוואה של הזמן הקצוב לתפוגה של שמירת נתונים ב-Edge Microgateway ובשרת הקצה העורפי
- בחבילה 250288, הלקוח שולח בקשת
השוואה בין זמנים קצובים לתפוגה של שמירה במצב פעיל
- ל-Edge Microgateway אין מאפיין ספציפי של זמן קצוב לתפוגה שמוגדר ל-Keep. זה כן נקבעת על ידי מערכת ההפעלה שבה היא פועלת. דוגמאות נפוצות הן Windows, קונטיינרים Linux ו-Docker.
- ייתכן שהוא מותאם אישית במערכת ההפעלה. צריך לבדוק עם מנהל מערכת. כברירת מחדל, במערכות ההפעלה של Linux יש מצב קבוע זמן קצוב לתפוגה של שעתיים.
- לאחר מכן, צריך לבדוק את מאפיין הזמן הקצוב לתפוגה שמוגדר בשרת הקצה העורפי. קדימה נניח ששרת הקצה העורפי מוגדר עם ערך של 10 שניות.
- אם קובעים שהערך של הזמן הקצוב לתפוגה של 'שמירה במצב פעיל' במערכת ההפעלה הוא
גבוה מהערך של מאפיין הזמן הקצוב לתפוגה של שמירה במצב פעיל בשרת הקצה העורפי כמו
בדוגמה שלמעלה, זו הסיבה לשגיאות
502.
רזולוציה
מוודאים שמאפיין הזמן הקצוב לתפוגה שמוגדר במצב פעיל תמיד נמוך יותר במערכת ההפעלה שבה Edge. Microgateway פועלת בהשוואה לזו שבשרת הקצה העורפי.
- קביעת הערך שנקבע לזמן הקצוב לתפוגה של 'שמירה בזמן אמת' בשרת הקצה העורפי.
- מגדירים ערך מתאים למאפיין הזמן הקצוב לתפוגה של קובץ ה-Keep כך שמאפיין הזמן הקצוב לתפוגה שמוגדר להקלטה במצב פעיל נמוך מהערך שהוגדר בקצה העורפי השרת, באמצעות השלבים שרלוונטיים למערכת ההפעלה שלכם.
שיטה מומלצת
מומלץ מאוד שלרכיבי ה-downstream יש תמיד זמן קצוב לתפוגה של שמירה במצב פעיל
יותר מהסף שהוגדר בשרתי ה-upstream כדי להימנע ממרוץ תהליכים מהסוג הזה.
502 שגיאות. כל צעד במורד הזרם צריך להיות נמוך יותר מכל צעד בעלייה. בקצה
Microgateway, מומלץ להשתמש בהנחיות הבאות:
הזמן הקצוב לתפוגה של Keep-alive באפליקציית הלקוח או במאזן העומסים צריך להיות קטן זמן קצוב לתפוגה של שמירה במצב פעיל ב-Ecrogateway של Edge.
כדי להגדיר את הזמן הקצוב לתפוגה של שמירת נתונים ב-Edge Microgateway, צריך להוסיף את ערך של
keep_alive_timeoutלערך קובץ~/.edgemicro/org-env-config.yaml.edgemicro: keep_alive_timeout: 65000
- הזמן הקצוב לתפוגה של מערכת ההפעלה Edge Microgateway צריך להיות קטן מהיעד הזמן הקצוב לתפוגה של שרת Keep-alive.
- אם יש צעדים נוספים לפני או מאחורי Edge Microgateway, אותו כלל אמור להיות מיושם. תמיד צריך להשאיר זאת באחריות הלקוח במורד הזרם (downstream) החיבור עם הupstream.
הסיבה: שרת היעד סוגר את החיבור מוקדם מדי
אבחון
- עליכם לפעול לפי השלבים שמפורטים בשלבי האבחון הנפוצים ולוודא שאתם
קיבלת את השגיאה
[socket hang up][ECONNRESET]. - אם כן, עליך לבדוק את העניין לעומק בעזרת
tcpdump, כמו שמוסבר בהמשך.הודעת השגיאה
[targetRequest error][GET][][socket hang up][ECONNRESET]בדוגמה שלמעלה מציין שהשגיאה אירעה בזמן ש-Edge Microgateway נשלחה את הבקשה לשרת הקצה העורפי (היעד). כלומר, Edge Microgateway שלח את בקשת API לשרת העורפי והמתנת לתגובה. אבל הקצה העורפי השרת סיים את החיבור בפתאומיות לפני ש-Edge Microgateway קיבלה תגובה. - לבדוק את היומנים של שרת הקצה העורפי ולראות אם יש שגיאות או מידע הובילו את שרת הקצה העורפי לסיים את החיבור בפתאומיות. אם יימצאו שגיאות או ואז לעבור אל פתרון ולתקן את הבעיה בהתאם. בשרת העורפי.
- אם לא מוצאים שגיאות או מידע בשרת העורפי, צריך לאסוף את
הפלט של
tcpdumpבשרת Edge Microgateway:tcpdump -i any -s 0 host TARGET_SERVER_HOSTNAME -w FILENAME.pcap
- ניתוח הנתונים של
tcpdumpשתועדו:פלט tcpdump לדוגמה: ( הצגת תמונה גדולה יותר)
בדוגמה שלמעלה
tcpdumpניתן לראות את הפרטים הבאים:- בחבילה 4, נשלחת בקשת
GETמ-Edge Microgateway ליעד השרת. - בחבילה 5, שרת היעד הגיב עם
ACKכדי לאשר בקשה. - עם זאת, במנה 6, במקום להגיב באמצעות מטען ייעודי (payload) של תגובה, היעד
השרת שולח
FIN, ACKשמתחיל את סגירת החיבור. - בקבוצות 7 ואילך, החיבור נסגר באופן הדדי. מפני שהחיבור היה
נסגרה לפני שהתגובה נשלחה, Edge Microgateway יחזיר את שגיאת ה-HTTP
502שגיאה חזרה ללקוח. - חשוב לזכור שחותמת הזמן של החבילה 8,
2021-06-23T03:52:24.110Zתואמת לחותמת הזמן שבה נרשמה השגיאה ב-Edge Microgateway יומנים. לעיתים קרובות, חותמות הזמן בקובצי היומן וב-tcpdumpעשויות לשמש להתאמה של השגיאות למנות בפועל.
רזולוציה
צריך לתקן את הבעיה בשרת העורפי כראוי.
אם הבעיה נמשכת וברצונך לקבל עזרה בפתרון הבעיה
502 Bad Gateway Errorאו אם אתם חושדים שמדובר בבעיה ב-Edge Microgateway, עיינו בכתובת חובה לאסוף את פרטי האבחון.חובה לאסוף פרטי אבחון
אם הבעיה נמשכת גם לאחר ביצוע ההוראות שלמעלה, יש לאסוף את הפריטים הבאים את פרטי האבחון ולאחר מכן פונים לתמיכה של Apigee Edge:
- קובצי יומן: תיקיית ברירת המחדל היא
/var/tmp, אבל יכול להיות שאפשר לשנות אותה. בקובץ הראשיconfig.yaml(logging > dir parameter). זה כן מומלץ לשנות אתlog > levelל-infoלפני את קובצי היומן לתמיכה של Apigee. - קובץ תצורה: התצורה הראשית של Edge Microgateway נמצאת ב-
YAML בתיקיית ברירת המחדל של Edge Microgateway,
$HOME/.edgemicro. יש קובץ התצורה שמוגדר כברירת מחדל, שנקראdefault.yaml, ואז קובץ אחד לכל סביבהORG-ENV-config.yaml. יש להעלות את הקובץ הזה באופן מלא בארגון ובסביבה שהושפעו
- בחבילה 4, נשלחת בקשת