אתם צופים במסמכי התיעוד של Apigee Edge.
כדאי לעיין במסמכי התיעוד של Apigee X. מידע
תיאור הבעיה
אפליקציית הלקוח מקבלת קוד סטטוס של HTTP 502 עם ההודעה "Bad Gateway" כתגובה לקריאות ל-API.
קוד סטטוס של HTTP 502 מציין שהלקוח לא מקבל תגובה תקינה מהשרתים בעורף המערכת שאמורים למלא את הבקשה.
הודעות שגיאה
אפליקציית הלקוח מקבלת את קוד התגובה הבא:
HTTP/1.1 502 Bad Gateway
בנוסף, יכול להיות שיופיעו הודעות השגיאה הבאות:
<html> <head> <title>Error</title> <style> body { width: 35em; margin: 0 auto; font-family: Tahoma, Verdana, Arial, sans-serif; } </style> </head> <body> <h1>An error occurred.</h1> <p>Sorry, the page you are looking for is currently unavailable.<br/> Please try again later.</p> </body> </html>
אם השגיאה מגיעה מהשרת העורפי, יכול להיות שיוצג לכם משהו כזה. הודעת השגיאה מהקצה העורפי תלויה לחלוטין בהטמעה שלו.
<html> <head><title>502 Bad Gateway</title></head> <body bgcolor="white"> <center><h1>502 Bad Gateway</h1></center> </body> </html>
סיבות אפשריות
אלה כמה סיבות אפשריות לשגיאה 502 Bad Gateway ב-API שעובר דרך Apigee Edge:
| הסיבה | תיאור | הוראות לפתרון בעיות שרלוונטיות ל |
| אין חברי פרלמנט זמינים במאגר | השגיאה הזו מתרחשת אם כל המעבדים במאגר לא זמינים, כלומר הם מושבתים או עסוקים ולכן לא מגיבים. | משתמשים ב-Edge Private Cloud |
| הגדרת SSL שגויה בין נתבים לבין מעבדי הודעות | השגיאה הזו מתרחשת אם אישור הבסיס החתום של רשות האישורים של הלקוח חסר במאגר האישורים המהימנים של נתב Edge. | משתמשים ב-Edge Private Cloud |
| שגיאה מהשרת העורפי | השגיאה הזו תופיע אם שרת הקצה העורפי ייכשל וישלח את התגובה הזו. | משתמשים בענן ציבורי ופרטי של Edge |
הסיבה: אין חברי פרלמנט זמינים במאגר
השגיאה הזו תתרחש אם נתב יגלה שכל מעבדי ההודעות באזור או במרכז נתונים מסוים לא זמינים (לדוגמה, אם כולם מושבתים).
מערכת Apigee Edge מוגדרת כך שתנועת ה-API הנכנסת (בקשות) באזור או במרכז נתונים מסוים תמיד מנותבת מהנתבים למעבדי ההודעות (MPs) באותו אזור או מרכז נתונים. במקרים מסוימים, יכול להיות שרכיבי Apigee Edge יוגדרו רק באזור אחד או במרכז נתונים אחד, ובמקרים אחרים הם יוגדרו ביותר מאזור אחד או ביותר ממרכז נתונים אחד. בכל אזור או מרכז נתונים יוגדרו שני נתבים או יותר ומעבדי הודעות.
אבחון
- אם יש יותר מאזור או מרכז נתונים אחד, צריך לקבוע את האזור או מרכז הנתונים שבהם בקשות ה-API נכשלות עם השגיאה 502 Bad Gateway. אפשר לזהות את האזור שבו המשתמשים רואים שגיאות 502, או לבדוק את יומני הגישה של NGINX בספרייה
/opt/apigee/var/log/edge-router/nginx/בכל אחד מהנתבים ששייכים לאזורים שונים. - השגיאה הבאה תופיע ביומני השגיאות של NGINX (
/opt/apigee/var/log/edge-router/nginx/ORG-Env.)_error_log
2019/06/24 15:26:00 [error] 4796#4796: *56357443 no live upstreams while connecting to upstream, client: <Router_IP_address>, server: <HostAlias>, request: "PUT <BasePath> HTTP/1.1", upstream: "http://<ListOfMP-IP_R-MP-Port>/<BasePath>", host: "<HostAlias>"
תרחיש 1: כל מעבדי ההודעות מושבתים
- בודקים אם מעבדי ההודעות באזור הספציפי או במרכז הנתונים הספציפי פועלים.
- אם כל מעבדי ההודעות מושבתים, מפעילים אותם מחדש.
רזולוציה
מפעילים מחדש את כל מעבדי ההודעות באמצעות הפקודה הבאה:
/opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
תרחיש 2: כל מעבדי ההודעות עסוקים בעיבוד בקשות שוטפות
השגיאה הזו מתרחשת אם נתבי ה-Router מזהים שכל מעבדי ההודעות באזור או במרכז נתונים מסוים לא זמינים, כי כולם עסוקים בעיבוד בקשות שמתבצעות כרגע.
- בודקים אם מעבדי ההודעות באזור הספציפי או במרכז הנתונים הספציפי פועלים.
- אם כל מעבדי ההודעות פועלים ופעילים, בודקים אם יש שימוש גבוה ב-CPU של מעבדי ההודעות, ואז יוצרים שלוש תמונות מצב של השרשור כל 30 שניות באמצעות הפקודה הבאה:
<JAVA_HOME>/bin/jstack -l <pid> > <filename>
- אם מעבד ההודעות צורך הרבה שימוש בזיכרון, צריך ליצור תמונת מצב של הזיכרון באמצעות הפקודה הבאה:
sudo -u apigee
/bin/jmap -dump:live,format=b,file= - מפעילים מחדש את מעבד ההודעות באמצעות הפקודה שלמטה. השימוש במעבד ובזיכרון צריך לרדת:
/opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
- כדאי לעקוב אחרי הקריאות ל-API כדי לוודא שהבעיה עדיין קיימת.
- כדי לחקור את הסיבה לשימוש הגבוה ב-CPU או בזיכרון, אפשר לפנות אל התמיכה של Apigee ולספק את קובצי ה-thread dumps, את קובץ ה-heap dump ואת היומנים של Message Processor (
/opt/apigee/var/log/edge-message-processor/logs/system.log).
הסיבה: הגדרת SSL שגויה בין נתבים לבין מעבדי הודעות
אבחון
- בודקים את יומני הגישה של NGINX (
/opt/apigee/var/log/edge-router/nginx/ORG-Env.). תופיע תגובת 502 כמו שמוצג בהמשך:_access_log
2019-07-23T12:13:42+03:00 sc-10-254-226-23 10.X.X.X:53634 10.X.X.X:8998 0.000 - - 502 502 189 344 GET <path> curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.27.1 zlib/1.2.3 libidn/1.18 libssh2/1.4.2 <host alias> mp-10-254-226-23-23706-8552529-1 10.129.107.101 - - -1 - - dc-2 gateway-2 green - gateway-2 dc-2 op pilot http -
- בודקים את יומני השגיאות של NGINX (
/opt/apigee/var/log/edge-router/nginx/ORG-Env.). יופיעו שגיאות כמו השגיאה הבאה:_error_log
2019/07/30 17:02:24 [error] 7691#7691: *11753633 peer closed connection in SSL handshake while SSL handshaking to upstream, client: X.X.X.X, server: <HostAlias>, request: "GET /no-target HTTP/1.1", upstream: "https://X.X.X.X:8998/no-target", host: "<HostAlias>"
- השגיאה הזו מציינת שכשל בחיבור SSL בין הנתב למעבד ההודעות.
- אם תתבוננו היטב בהודעת השגיאה בשלב 1 ובשלב 2, תראו שמספר היציאה שמשמש לתקשורת עם מעבד ההודעות הוא 8998, שזו יציאה לא מאובטחת, אבל הפרוטוקול הוא SSL (https). בדרך כלל מספר היציאה המאובטחת שמשמש הוא 8443. השימוש ביציאה לא מאובטחת לתקשורת מאובטחת גורם לכשל בלחיצת היד של SSL.
- בדרך כלל זה קורה אם פספסתם שלבים או הגדרתם ערכים שגויים במהלך הגדרת SSL בין נתב ומעבד הודעות. השלבים מפורטים כאן.
לדוגמה, השגיאה הזו יכולה להתרחש אם
- מספר היציאה מוגדר כ-8998 במקום 8443 ב-
/opt/apigee/customer/application/message-processor.properties as shown below
conf/message-processor-communication.properties+local.http.port=8998
- קובצי ההגדרות של הנתב בספרייה
/opt/nginx/conf.d/*לא נמחקים והנתב לא מופעל מחדש במהלך הגדרת ה-SSL. בתרחיש הזה, אפשר לראות שמספר היציאה של מעבדי ההודעות יישאר 8998 בקובצי ההגדרות.
- מספר היציאה מוגדר כ-8998 במקום 8443 ב-
רזולוציה
- חשוב לוודא שכל השלבים שמפורטים במאמר הגדרת TLS בין נתב למעבד הודעות בוצעו בצורה נכונה.
- אם הבעיה נמשכת, עוברים אל איסוף מידע לצורך אבחון.
הסיבה: שגיאה מהשרת העורפי
אבחון
- אם השגיאה מתרחשת בכל פעם, אפשר לצלם את המעקב בממשק המשתמש עבור הבקשות שנכשלו. בוחרים בקשה שנכשלה ועוברים בין השלבים השונים ב-trace. אם אתם מקבלים את השגיאה '502 Bad Gateway' מהשרת העורפי עצמו, יכול להיות שהבעיה היא שקרה כשל כלשהו בשרת העורפי.
Trace showing 502 Bad Gateway coming from the backend server
- אם הבעיה מתרחשת לסירוגין ואין לך אפשרות לצלם את הנתונים,
- אם אתם משתמשים בענן ציבורי, אתם יכולים להשתמש במעקב אחרי API ולבדוק את הפרטים על שגיאות 502.
- אם קוד התקלה הוא
messaging.adaptors.http.flow.ErrorResponseCodeומקור התקלה הואtarget, השגיאה נגרמת בגלל שרת הקצה העורפי.
- אם קוד התקלה הוא
- אם אתם משתמשים ב-Private Cloud, תוכלו לנתח את יומני הגישה של NGINX
/opt/apigee/var/log/edge-router/nginx/ORG-Env._access_log.
הכניסה לבקשה שנכשלה תיראה כך:
2017-02-24T14:42:12+00:00 rt-01 192.8.155.2:18118 192.168.84.166:8998 10.225 - - 502 502 440 0 GET /adv-eadlg-test/documents?type=doctype HTTP/1.1 rt-02efawae234-1234 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36 myorg-dev.apigee.net rt-02efawae234-1234 6 - false target messaging.adaptors.http.flow.ErrorResponseCode null/null - /organizations/myorg/environments/dev/apiproxies/api123
- אם קוד התקלה הוא
messaging.adaptors.http.flow.ErrorResponseCodeומקור התקלה הואtarget, השגיאה נגרמת בגלל שרת הקצה העורפי.
- אם קוד התקלה הוא
- אם אתם משתמשים בענן ציבורי, אתם יכולים להשתמש במעקב אחרי API ולבדוק את הפרטים על שגיאות 502.
רזולוציה
- כדי לפתור את הבעיה, צריך לפנות לצוות השרתים של הקצה העורפי.
איסוף פרטי אבחון
- יומני גישה של NGINX
(/opt/apigee/var/log/edge-router/nginx/ORG-Env.)_access_log
ויומני שגיאות
(/opt/apigee/var/log/edge-router/nginx/ORG-Env.)._error_log - יומנים של מעבד בקשות
(/opt/apigee/var/log/edge-message-processor/logs/system.log).