מוצג המסמך של Apigee Edge.
עוברים אל
מסמכי תיעוד של Apigee X. מידע
תיאור הבעיה
אפליקציית הלקוח מקבלת קוד סטטוס HTTP של 502 Bad Gateway
עם קוד שגיאה
protocol.http.TooBigLine
כתגובה לקריאות ל-API.
הודעת שגיאה
אפליקציית הלקוח מקבלת את קוד התגובה הבא:
HTTP/1.1 502 Bad Gateway
בנוסף, יכול להיות שתופיע הודעת השגיאה הבאה:
{ "fault":{ "faultstring":"response line size exceeding 2,048", "detail":{ "errorcode":"protocol.http.TooBigLine" } } }
גורמים אפשריים
שגיאה זו מתרחשת אם הגודל של שורת התגובה שנשלח על ידי שרת יעד/שרת עורפי ל-Apigee Edge כחלק מתגובת ה-HTTP גדול מהמקסימום המותר למגבלה ב-Apigee Edge.
לפני שנבחן את הסיבות האפשריות לשגיאה זו, עלינו להבין מהי שורת התגובה ואיך לבדוק את הגודל שלו.
הסבר על שורת התגובה
תגובת HTTP אופיינית מורכבת משלושה חלקים:
- Status-Line (שורת סטטוס) (נקראת Response-Line ב-Apigee)
- ( קבוצה של כותרות HTTP )
- [ גוף ]
שורת התגובה מורכבת משלושה חלקים: גרסת הפרוטוקול ואחריה מספר את קוד הסטטוס ואת הביטוי הטקסטואלי המשויך אליו, כפי שמוצג בהמשך:
Response-Line = <HTTP-Version> <Status-Code> <Reason-Phrase>
כשתגובת HTTP נשלחת על ידי אפליקציית שרת היעד/הקצה העורפי, השורה הראשונה
מייצג את שורת התגובה כפי שתואר למעלה. אחריו מופיע
כותרות וגוף התשובה/מטען ייעודי (payload). בצילום המסך לדוגמה הבא מוצג
בקשה של curl
, החלק בקשה והחלק תגובה (יחד עם
שורת תגובה).
הסבר על הגודל של שורת התגובה
בדוגמה שלמעלה, גם שורת התחלה (השורה הראשונה) בתשובה נקרא Response-Line כך:
HTTP/1.1 200 OK
הגודל של שורת התגובה הזו הוא
~15 bytes
כי היא מכילה15 ASCII characters
. מאחר שזו בתוך מותרת ב-Apigee Edge, התגובה נשלחת חזרה ללקוח ללא שגיאות ב-Apigee Edge.- באופן דומה, אם מסתכלים על
faultstring
הודעת השגיאה שמוצגת למעלה, היא מכילה"response line size exceeding 2,048"
. הדבר מציין שה-Response-Line בתגובת ה-HTTP שנשלח על ידי שרת היעד/הקצה העורפי, חרג מ-2,048 בייטים.
הסבר על שורת תגובה גדולה
לפי ההגדרה של שורת סטטוס (שנקראת כאן Response-Line) ובקשות HTTP אופייניות התגובה, הגודל יהיה קטן בהרבה ממגבלת ברירת המחדל שהוגדרה של 2 K ב-Apigee Edge, לכן יכול להיות שלא להגיע למגבלה. עם זאת, הנה כמה תרחישים אפשריים שבהם אתם עשויים לחרוג מהמגבלה הזו:
- שרת היעד/הקצה העורפי הוא לא מערכת HTTP. ייתכן שהוא מגיב עם קוד שאינו HTTP תשובה.
- לשרת היעד/העורפי יש בעיות והוא שולח שורת תגובה ארוכה כחלק מה-HTTP תשובה.
למידע נוסף בנושא מקבלים שגיאה Protocol.http.TooBigLine, "גודל שורת תגובה חורג מ-2,048.
אלה הסיבות האפשריות לשגיאה:
סיבה | תיאור | הוראות לפתרון בעיות עבור |
---|---|---|
הגודל של שורת התגובה חורג מהמגבלה המותרת | הגודל של שורת התגובה שנשלח על ידי שרת היעד/הקצה העורפי כחלק תגובת HTTP ל-Apigee Edge גדולה יותר מותר להשתמש ב-Apigee Edge | משתמשי Edge בענן הציבורי והפרטי |
שלבי אבחון נפוצים
יש להשתמש באחד מהכלים או השיטות הבאים כדי לאבחן את השגיאה:
מעקב API
כדי לאבחן את השגיאה באמצעות API Monitoring:
- נכנסים ל-Apigee Edge UI כמשתמש עם התפקיד המתאים.
עוברים לארגון שבו רוצים לחקור את הבעיה.
- מנווטים אל ניתוח > מעקב API > לחקור את הדף.
- בוחרים את מסגרת הזמן הספציפית שבה הבחנתם בשגיאות.
- אפשר לבחור במסנן Proxy כדי לצמצם את קוד השגיאה.
- הציגו את קוד התקלה ביחס ל-Time.
צריך לבחור תא עם קוד התקלה
protocol.http.TooBigLine
בתור מוצגת למטה:יוצג מידע על קוד השגיאה
protocol.http.TooBigLine
כפי שמוצג בהמשך:לוחצים על הצגת היומנים ומרחיבים את השורה של הבקשה שנכשלה.
- בחלון יומנים שימו לב לפרטים הבאים:
- קוד סטטוס:
502
- מקור התקלה:
target
- קוד התקלה:
protocol.http.TooBigLine
.
- קוד סטטוס:
- אם מקור התקלה כולל את הערך
target
ואת הערך Fault הקוד מכיל את הערךprotocol.http.TooBigLine
, אז הוא מציין גודל שורת התגובה של תגובת ה-HTTP משרת היעד/ הקצה העורפי גדול מ- המגבלה המקסימלית המותרת ב-Apigee Edge.
כלי המעקב
- מפעילים את סשן המעקב
וגם:
- צריך להמתין עד שהשגיאה
502 Bad Gateway
תתבצע. או - אם אפשר לשחזר את הבעיה, אפשר לשלוח קריאה ל-API ולשחזר את השגיאה
502 Bad Gateway
.
- צריך להמתין עד שהשגיאה
- בוחרים אחת מהבקשות שנכשלו ובודקים את המעקב.
- לעבור בין השלבים השונים במעקב ולאתר את מקום התקלה אירעה שגיאה.
השגיאה בדרך כלל מופיעה בקטע
flowinfo
שגיאה אחרי השלב הבקשה נשלחה לשרת היעד כפי שמוצג בהמשך:שימו לב לערכי השגיאה שמופיעים במעקב:
- שגיאה:
response line exceeding 2,048
- error.class:
com.apigee.errors.http.server.BadGateway
זה מציין ש-Apigee Edge (רכיב של מעבד הודעות) מקפיצה את השגיאה בתור ברגע שהוא מקבל את התגובה משרת הקצה העורפי עקב גודל של שורת תגובה חריגה מהמגבלה המותרת.
- שגיאה:
הודעת השגיאה שנשלחה ללקוח תופיע בתגובה שנשלחה אל שלב הלקוח כפי שמוצג בהמשך:
- שימו לב לערכי השגיאה שמופיעים במעקב:
- שגיאה:
502 Bad Gateway
. - תוכן השגיאה:
{"fault":{"faultstring":"response line exceeding 2,048","detail":{"errorcode":"protocol.http.TooBigLine"}}}
- שגיאה:
אפשר גם לנווט לשלב AX (Analytics Data Recorded) ולוחצים עליו כדי לראות את פרטי השגיאה.
שימו לב לערכים הבאים:
כותרות של בקשות ערך X-Apigee-fault-code protocol.http.TooBigLine
X-Apigee-fault-source target
תוכן השגיאה : גוף {"fault":{"faultstring":"response line size exceeding 2,048","detail":{"errorcode":"protocol.http.TooBigLine"}}}
NGINX
כדי לאבחן את השגיאה באמצעות יומני הגישה של NGINX:
- אם אתם משתמשים בענן פרטי, תוכלו להשתמש ביומני הגישה ל-NGINX כדי
לדעת את המידע העיקרי לגבי שגיאות HTTP
502
. בודקים את יומני הגישה ל-NGINX:
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
איפה: ORG, ENV ו-PORT# מוחלפים בערכים בפועל.
- אפשר לחפש אם יש שגיאות
502
בטווח זמן ספציפי (אם הבעיה אירעה בעבר) או אם יש בקשות שעדיין לא נענו502
אם מופיעות שגיאות
502
בקוד X-Apigee-fault-code תואם לערך שלprotocol.http.TooBigLine
, ואז קובעים הערך של X-Apigee-fault-source.הרשומה לדוגמה שלמעלה מיומן הגישה ל-NGINX כוללת את הערכים הבאים עבור X- Apigee-fault-code ו-X-Apigee-fault-source:
כותרות של תשובות ערך X-Apigee-fault-code protocol.http.TooBigLine
X-Apigee-fault-source target
הסיבה: הגודל של שורת התגובה חורג מהמגבלה המותרת
אבחון
- מגדירים את קוד השגיאה ואת מקור התקלה של השגיאה שזוהתה באמצעות ה-API יומני Monitoring, כלי מעקב או יומני גישה ל-NGINX, כמו שמוסבר ב שלבי האבחון הנפוצים.
- אם ל-Fault Source יש את הערך
target
, זה מציין גודל שורת התגובה שנשלח על ידי אפליקציית שרת היעד/הקצה העורפי ל-Apigee גדול יותר מהגודל של המגבלה המותרת ב-Apigee Edge. אפשר לוודא שהגודל של שורת התגובה חרג מהמגבלה המותרת של 2KB באמצעות פונקציית באחת מהשיטות הבאות:
הודעת שגיאה
כדי לבצע אימות באמצעות הודעת השגיאה:
אם יש לכם גישה להודעת השגיאה המלאה שהתקבלה מ-Apigee Edge, צריך לעיין
faultstring
הודעת שגיאה לדוגמה:
"faultstring":"response line size exceeding 2,048"
הערך
faultstring
שלמעלה מציין שגודל שורת התגובה חרג מהמותר מוגבל ל-2KB.הבקשה בפועל
כדי לאמת באמצעות הבקשה עצמה:
אם יש לכם גישה לבקשה שנשלחה בפועל לשרת היעד או לשרת העורפי מבצעים את השלבים הבאים:
- אימות הגודל של שורת התגובה
- אם גודל ה-URI גדול מ
המגבלה המותרת ב-Apigee Edge, אז זו הסיבה
הבעיה.
תגובה לדוגמה משרת היעד/שרת הקצה העורפי:
curl -v http://HOSTALIAS/test
* Trying 3.2.1.4... * TCP_NODELAY set * Connected to <hostalias> (3.2.1.4) port 80 (#0) > GET /test HTTP/1.1 > Host: HOSTALIAS > User-Agent: curl/7.64.1 > Accept: */* > < HTTP/1.1 200 1111…<trimmed>...11111111 < Date: Mon, 26 Jul 2021 07:07:18 GMT < Content-Type: application/json < Content-Length: 269 < Connection: keep-alive < Server: gunicorn/19.9.0 < Access-Control-Allow-Origin: * < Access-Control-Allow-Credentials: true < { <Response Body> } * Connection #0 to host <hostalias> left intact * Closing connection 0
במקרה שלמעלה, שורת התגובה
HTTP/1.1 200 1111…<trimmed>...11111111
גדולה מ-2KB. כלומר היא מכילה יותר מ-2K תווי ASCII.אם משתמשים בלקוח אחר, אפשר לבדוק את יומני הלקוח ולנסות כדי לבדוק את הגודל של שורת התגובה שנשלחת ל-Apigee Edge.
יומני מעבד ההודעות
כדי לאמת באמצעות יומני מעבד הודעות:
אם אתם משתמשים ב-Private Cloud, תוכלו להשתמש ביומנים של מעבד ההודעות כדי: אימות אם הגודל של שורת התגובה חרג מותר להשתמש ב-Apigee Edge.
- קובעים את מזהה ההודעה של הבקשה שנכשלה באמצעות API Monitoring, כלי המעקב, או יומני גישה ל-NGINX, כמו שמוסבר בשלבי האבחון הנפוצים.
מחפשים את מזהה ההודעה ביומן מעבד ההודעות:
/opt/apigee/var/log/edge-message-processor/logs/system.log
יופיעו שורות מ-
system.log
שדומות לאלה:2021-07-26 06:45:41,451 org:myorg env:prod api:testtoobigline rev:1 messageid:r-5110240-1 NIOThread@1 ERROR HTTP.CLIENT - HTTPClient$Context$3.onException() : ClientChannel[Connected: Remote:3.2.1.2:80 Local:192.168.205.251:44398]@20592 useCount=1 bytesRead=0 bytesWritten=201 age=144ms lastIO=0ms isOpen=true.onExceptionRead exception: {} com.apigee.errors.http.server.BadGateway: response line size exceeding 2,048 at <snipped> 2021-07-26 06:45:41,451 org:myorg env:prod api:testtoobigline rev:1 messageid:r-5110240-1 NIOThread@1 ERROR ADAPTORS.HTTP.FLOW - AbstractResponseListener.onException() : AbstractResponseListener.onError (HTTPResponse@6a5d6c33, response line size exceeding 2,048)
הטקסט
message = response line size exceeding 2,048
למעלה הודעת השגיאה מציינת שהגודל של שורת התגובה גדול מ-2KB. לכן, Apigee Edge מקפיצה את החריג ומחזירה קוד סטטוס502
עם קוד שגיאהprotocol.http.TooBigline
באפליקציות של לקוחות.
רזולוציה
תיקון הגודל
אפשרות מס' 1 [מומלץ]: תיקון אפליקציית שרת היעד/השרת העורפי שלא תישלח שורות התגובה גדולות יותר מהמגבלה המותרת
- ניתוח הסיבה לכך שהלקוח הספציפי שלח יותר שורת גודל מהמגבלה המותרת, כפי שמוגדר במגבלות.
- אם לא רוצים לעשות זאת, יש לשנות את אפליקציית שרת היעד או שרת הקצה העורפי כך שולחת שורת תגובה בגודל הנמוך מהמגבלה המותרת.
- אם זה רצוי ואתם רוצים לשלוח שורת תגובה בגודל שגבוה יותר מהגודל המגבלה המותרת, עוברים לאפשרויות הבאות.
CwC
אפשרות 2: שימוש במאפיין CwC כדי להגדיל את המגבלה של שורת התגובה
Apigee מספקת CwC שמאפשר לו להגדיל את מגבלת הגודל של שורת התגובה. פרטים נוספים זמינים במאמר מגדירים את מגבלת שורות התגובה במעבד ההודעות.
מגבלות
Apigee מצפה שאפליקציית הלקוח ושרת הקצה העורפי לא ישלחו בקשה/תגובה שהגדלים שלהם גדולים מהמגבלה המותרת לפי תיעוד של מגבלת שורות הבקשות/התגובה. במגבלות של Apigee Edge.
- אם אתם משתמשים בענן הציבורי, המגבלה המקסימלית של בקשה וכן גודל שורת התגובה מתועד עבור גודל שורת הבקשה/תגובה ב- מגבלות Apigee Edge.
- אם אתם משתמשים בענן פרטי , יכול להיות ששיניתם את ערך ברירת המחדל המקסימלי מגבלת הגודל של הבקשה ושל שורת התגובה (למרות שזו לא שיטה מומלצת). אפשר לקבוע את מגבלת הגודל המקסימלי של שורת התגובה לפי ההוראות הבאות: איך בודקים את המגבלה הנוכחית
איך בודקים את המגבלה הנוכחית?
בקטע הזה מוסבר איך לאמת שהנכס HTTPResponse.line.limit
כולל
עודכן בערך חדש ב'מעבדי הודעות'.
- במעבד הודעות, מחפשים את המאפיין.
HTTPResponse.line.limit
ב- ספריית/opt/apigee/edge-message-processor/conf
ובדיקה רואים איזה ערך הוגדר באופן הבא:grep -ri "HTTPResponse.line.limit" /opt/apigee/edge-message-processor/conf
- התוצאה לדוגמה מהפקודה שלמעלה היא:
/opt/apigee/edge-message-processor/conf/http.properties:HTTPResponse.line.limit=2k
בפלט לדוגמה שלמעלה, שימו לב שהמאפיין
HTTPResponse.line.limit
הוגדר עם הערך2k
ב-http.properties
.מציינת שהמגבלה של גודל שורת התגובה המוגדרת ב-Apigee לחשבונות פרטיים גודל הענן הוא 2KB.
אם עדיין דרושה לך עזרה מהתמיכה של Apigee, אפשר לעבור אל חובה לאסוף את פרטי האבחון.
חובה לאסוף פרטי אבחון
אוספים את פרטי האבחון הבאים ופונים לתמיכה של Apigee Edge:
אם אתם משתמשים ב-Public Cloud, עליכם לספק את הפרטים הבאים:
- שם הארגון
- שם הסביבה
- שם ה-API של ה-Proxy
- צריך להשלים את פקודת ה-curl שמשמשת לשחזור השגיאה
502
- קובץ מעקב אחר בקשות ה-API
אם אתם משתמשים בענן פרטי, עליכם לספק את הפרטים הבאים:
- הודעת שגיאה מלאה שנצפתה בבקשות שנכשלו
- שם הארגון
- שם הסביבה
- חבילת API Proxy
- קובץ מעקב לבקשות ה-API שנכשלו
- צריך להשלים את הפקודה
curl
ששימשה לשחזור השגיאה502
יומני גישה ל-NGINX
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
איפה: ORG, ENV ו-PORT# מוחלפים ב: והערכים בפועל.
- יומני מערכת של מעבד ההודעות
/opt/apigee/var/log/edge-message-processor/logs/system.log