מוצג המסמך של Apigee Edge.
עוברים אל
מסמכי תיעוד של Apigee X. מידע
תיאור הבעיה
אפליקציית הלקוח מקבלת קוד סטטוס HTTP של 504 עם ההודעה
Gateway Timeout בתגובה לקריאות ל-API.
תגובת השגיאה הזו מציינת שהלקוח לא קיבל תגובה בזמן מ-Apigee Edge או שרת העורפי במהלך ביצוע קריאה ל-API.
הודעת שגיאה
אפליקציית הלקוח מקבלת את קוד התגובה הבא:
HTTP/1.1 504 Gateway Time-out
כשמפעילים שרת proxy כזה באמצעות cURL או דפדפן אינטרנט, עשויה להופיע השגיאה הבאה:
<!DOCTYPE html> <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>
מה גורם לחסימות זמניות?
הנתיב הטיפוסי לבקשת API דרך פלטפורמת Edge הוא Client > (לקוח >) נתב > ההודעה מעבד > שרת עורפי כפי שמוצג באיור הבא:
כל הרכיבים בתהליך זמן הריצה של Apigee Edge, כולל לקוחות, נתבים ו-Message
מעבדים ושרתים בקצה העורפי מוגדרים עם ערכי ברירת מחדל מתאימים של זמן קצוב לתפוגה כדי
לוודא שהמילוי של בקשות ה-API לא נמשך זמן רב מדי. אם אחד מהרכיבים
לא יקבלו את התגובה מרכיב ה-upstream בתוך התקופה שצוינה
של רכיב מסוים, אז לרכיב הספציפי עומד הזמן הקצוב לתפוגה ולרוב יחזיר
504 Gateway Timeoutשגיאה.
במדריך הזה מוסבר איך לפתור בעיות מסוג 504 ולפתור אותן
הזמן הקצוב של הנתב.
הזמן הקצוב לתפוגה בנתב
הזמן הקצוב לתפוגה שמוגדר כברירת מחדל בנתבים ב-Apigee Edge הוא 57 שניות. זהו המספר המקסימלי משך הזמן ששרת proxy ל-API יכול לפעול מהרגע שבקשת ה-API התקבלה ב-Edge ועד התגובה נשלחת בחזרה, כולל התגובה לקצה העורפי וכל כללי המדיניות שמופעלים. ניתן לבטל את הזמן הקצוב לתפוגה שהוגדר כברירת מחדל בנתבים או במארחים הווירטואליים, כמו שמוסבר ב הגדרת זמן קצוב לתפוגה של קלט/פלט בנתבים.
גורמים אפשריים
ב-Edge, הסיבות הטיפוסיות לשגיאה 504 Gateway Timeout שנגרמו בגלל
הזמן הקצוב לתפוגה של הנתב:
| סיבה | תיאור | הוראות לפתרון בעיות עבור |
|---|---|---|
| הגדרה שגויה של הזמן הקצוב לתפוגה בנתב | זה קורה אם הנתב מוגדר עם זמן שגוי של קלט/פלט (I/O). | משתמשי Edge בענן הציבורי והפרטי |
שלבי אבחון נפוצים
יש להשתמש באחד מהכלים או השיטות הבאים כדי לאבחן את השגיאה:
- מעקב אחרי API
- יומני גישה ל-NGINX
מעקב אחרי API
כדי לאבחן את השגיאה באמצעות API Monitoring:
- מנווטים אל ניתוח > מעקב API > לחקור את הדף.
- מסננים לאיתור
5xxשגיאות ובוחרים את מסגרת הזמן. - הציגו קוד סטטוס לצד זמן.
-
כדי לראות פרטים נוספים ולהציג פרטים נוספים, יש ללחוץ על התא הספציפי שבו מוצגות שגיאות מסוג
504יומנים על השגיאות האלה, כפי שמוצג בהמשך:דוגמה להצגת שגיאות 504

- בחלונית שמשמאל, לוחצים על View Logs.

בחלון יומני תנועה, שימו לב לפרטים הבאים לגבי חלק משגיאות
504:- בקשה: הפעולה הזו מספקת את שיטת הבקשה וה-URI שמשמשים לביצוע הקריאות.
- זמן תגובה: משך הזמן הכולל שחלף לבקשה.
בדוגמה שלמעלה,
- הבקשה מפנה אל
GET /test-timeout. - זמן התגובה הוא
57.001שניות. זה מציין שהנתב הזמן הקצוב הסתיים לפני שמעבד ההודעות הצליח להגיב כי הערך קרוב מאוד לברירת המחדל של הזמן הקצוב לתפוגה של קלט/פלט (I/O) שהוגדר בנתב, שהוא 57 שניות.
אפשר גם לקבל את כל היומנים באמצעות API Monitoring API של GET Logs. לדוגמה, באמצעות שליחת שאילתה על היומנים של
org,env,timeRange, וגםstatus, תוכלו להוריד את כל היומנים של עסקאות שבהן פג הזמן הקצוב של הלקוח.מכיוון ש-API Monitoring מגדיר את שרת ה-proxy ל-
-(לא מוגדר) עבור504הערכים האלה שגיאות, אפשר להשתמש ב-API (יומנים API) כדי לקבל את שרת ה-proxy המשויך למארח ולנתיב הווירטואלי.לדוגמה :
curl "https://apimonitoring.enterprise.apigee.com/logs/apiproxies?org=ORG&env=ENV&select=https
- צריך לבדוק בזמן התגובה אם יש
504שגיאות נוספות ולבדוק כדי לבדוק אם זמן התגובה עקבי (ערך הזמן הקצוב לתפוגת קלט/פלט מוגדר בנתב שהוא 57 שניות) בכל השגיאות של504.
יומני גישה ל-NGINX
כדי לאבחן את השגיאה באמצעות יומני הגישה של NGINX:
- בודקים את יומני הגישה ל-NGINX:
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log - אפשר לבצע חיפוש כדי לראות אם יש שגיאות
504במהלך פרק זמן ספציפי (אם הבעיה אירעה בעבר) או אם יש בקשות שעדיין לא נענו504 - שימו לב לפרטים הבאים לגבי חלק מהשגיאות ב-
504:- בתוך כמה זמן תקבלו תשובה
- כתובת אתר מבוקשת

בדוגמה הזאת אנחנו רואים את הפרטים הבאים:
-
זמן הבקשה:
57.001שניות. המשמעות היא הזמן הקצוב של הנתב פג אחרי 57.001 שניות. - בקשה:
GET /test-timeout - כתובת האימייל החלופית של המארח:
myorg-test.apigee.net
-
צריך לבדוק אם זמן הבקשה זהה לזמן הקצוב לתפוגה של קלט/פלט שהוגדר בנתב/במארח הווירטואלי. אם כן, סימן שתם הזמן הקצוב של הנתב לפני מעבד ההודעות לא הגיב בפרק הזמן הזה.
ברשומה לדוגמה של יומן הגישה ל-NGINX שמוצגת למעלה, מזינים את הבקשה הזמן של
57.001שניות קרוב מאוד לזמן הקצוב לתפוגה של קלט/פלט (I/O) שהוגדר כברירת מחדל בנתב. זה מציין בבירור שתם הזמן הקצוב של הנתב לפני ההודעה מעבד המידע יכול להגיב. - מאתרים את ה-Proxy ל-API שעבורו הבקשה נשלחה באמצעות הנתיב הבסיסי בקובץ ה- בקשה .
הסיבה: הגדרה שגויה של הזמן הקצוב לתפוגה בנתב
אבחון
- יש לקבוע אם השגיאות מסוג
504נגרמות כי פג הזמן הקצוב של הנתב מעבד ההודעות יוכל להגיב. אפשר לעשות זאת על ידי בדיקה אם Response Time ב-API Monitoring/Request Time בנתב (שני השדות) שמייצגות את אותו מידע,אבל נקראות בשמות שונים) זהה הזמן הקצוב לתפוגה של קלט/פלט (I/O) שהוגדר בנתב/במארח וירטואלי ובשדות מקור התקלה, תקלה שרתי ה-proxy ו-Fault Code מוגדרים ל--באמצעות API Monitoring או NGINX Access יומנים, כמו שמוסבר ב שלבי האבחון הנפוצים. -
צריך לבדוק אם ערך הזמן הקצוב לתפוגה של קלט/פלט (I/O) שהוגדר בנתב או במארח וירטואלי ספציפי הוא נמוך יותר בהשוואה לערך שהוגדר במעבד ההודעות או בשרת ה-proxy הספציפי ל-API.
כדי לעשות זאת, צריך לפעול לפי השלבים בקטע הזה.
אימות הזמן הקצוב לתפוגה של קלט/פלט במארחים וירטואליים
ממשק המשתמש של Edge
כדי לבדוק את הזמן הקצוב לתפוגה של המארח הווירטואלי באמצעות ממשק המשתמש של Edge, מבצעים את הפעולות הבאות:
- מתחברים לממשק המשתמש של Edge.
- עוברים לקטע ניהול > מארחים וירטואליים.
- בוחרים סביבה ספציפית שבה נתקלתם בבעיה עם הזמן הקצוב לתפוגה.
- בוחרים את המארח הווירטואלי הספציפי שעבורו רוצים לאמת את ערך הזמן הקצוב לתפוגה של קלט/פלט.
- בקטע מאפיינים, מציגים את הערך הזמן הקצוב לתפוגה של קריאה לשרת proxy בשניות.

בדוגמה שלמעלה, הזמן הקצוב לתפוגה של קריאה לשרת proxy מוגדר עם ערך של
120. המשמעות היא שהזמן הקצוב לתפוגה של קלט/פלט (I/O) שהוגדר במארח הווירטואלי הזה הוא 120 שניות.
ממשקי API לניהול
אפשר גם לבדוק את הזמן הקצוב לתפוגה של קריאה לשרת proxy באמצעות ממשקי ה-API הבאים לניהול:
-
להפעיל את אחזור API של מארח וירטואלי כדי לקבל את ההגדרה של
virtualhostכמו בדוגמה הבאה:משתמש ב-Public Cloud
curl -v -X GET https://api.enterprise.apigee.com/v1/organizations/ORGANIZATION_NAME/environments/ENVIRONMENT_NAME/virtualhosts/VIRTUALHOST_NAME -u USERNAME
משתמש בענן פרטי
curl -v -X GET http://MANAGEMENT_SERVER_HOST:PORT#/v1/organizations/ORGANIZATION_NAME/environments/v/virtualhosts/VIRTUALHOST_NAME -u USERNAME
כאשר:
ORGANIZATION_NAME הוא שם הארגון
ENVIRONMENT_NAME הוא שם הסביבה
VIRTUALHOST_NAME הוא השם של המארח הווירטואלי
-
בדיקת הערך שהוגדר לנכס
proxy_read_timeoutהגדרה של מארח וירטואלי לדוגמה
{ "hostAliases": [ "api.myCompany,com", ], "interfaces": [], "listenOptions": [], "name": "secure", "port": "443", "retryOptions": [], "properties": { "property": [ { "name": "proxy_read_timeout", "value": "120" } ] }, "sSLInfo": { "ciphers": [], "clientAuthEnabled": "false", "enabled": "true", "ignoreValidationErrors": false, "keyAlias": "myCompanyKeyAlias", "keyStore": "ref://myCompanyKeystoreref", "protocols": [] }, "useBuiltInFreeTrialCert": false }בדוגמה שלמעלה,
proxy_read_timeoutמוגדר עם ערך של120. המשמעות היא שהזמן הקצוב לתפוגה של קלט/פלט (I/O) שהוגדר במארח הווירטואלי הזה הוא 120 שניות.
מאמת את הזמן הקצוב לתפוגה של קלט/פלט בקובץ console.properties
- מתחברים למכשיר נתב.
- חיפוש הנכס
proxy_read_timeoutב/opt/nginx/conf.dולבדוק אם היא הוגדרה עם הערך החדש ככה:grep -ri "proxy_read_timeout" /opt/nginx/conf.d
-
בדיקת הערך שהוגדר לנכס
proxy_read_timeoutבתצוגה הווירטואלית הספציפית קובץ תצורה של המארח.תוצאה לדוגמה מפקודת gRep
/opt/nginx/conf.d/0-default.conf:proxy_read_timeout 57; /opt/nginx/conf.d/0-edge-health.conf:proxy_read_timeout 1s;
בפלט לדוגמה שלמעלה, שימו לב שהנכס
proxy_read_timeoutכולל הוגדר עם הערך החדש57ב-0-default.conf, שהוא קובץ תצורה עבור המארח הווירטואלי המוגדר כברירת מחדל. הדבר מציין שהזמן הקצוב לתפוגה של קלט/פלט הוגדרה ל-57 שניות בנתב למארח הווירטואלי ברירת המחדל. אם יש לכם מספר מארחים וירטואליים, המידע הזה יוצג לגבי כל אחד מהם. קבלת הערך שלproxy_read_timeoutלמארח הווירטואלי הספציפי שבו השתמשתם ליצירת ה-API קריאות שנכשלו עם504שגיאות.
מאמת את הזמן הקצוב לתפוגה של קלט/פלט בשרת proxy ל-API
אפשר להציג את הזמן הקצוב לתפוגה של קלט/פלט בדברים הבאים:
- נקודת קצה (endpoint) של יעד של שרת proxy ל-API
- מדיניות ServiceCallout על שרת proxy ל-API
הצגת הזמן הקצוב לתפוגה של קלט/פלט בנקודת הקצה ביעד של שרת ה-proxy ל-API
- בממשק המשתמש של Edge, בוחרים את שרת ה-proxy הספציפי ל-API שבו רוצים להציג את הקלט/פלט (I/O) ערך הזמן הקצוב לתפוגה.
- בוחרים את נקודת הקצה הספציפית שרוצים לבדוק.
- צריך לראות את המאפיין
io.timeout.millisעם ערך מתאים מתחת רכיב<HTTPTargetConnection>בTargetEndpointהגדרה אישית.לדוגמה, הזמן הקצוב לתפוגה של קלט/פלט בקוד הבא מוגדר ל-120 שניות:
<Properties> <Property name="io.timeout.millis">120000</Property> </Properties>
הצגת הזמן הקצוב לתפוגה של קלט/פלט במדיניות ServiceCallout של שרת ה-proxy ל-API
- בממשק המשתמש של Edge, בוחרים את שרת ה-proxy הספציפי ל-API שבו רוצים להציג את הקלט/פלט החדש הזמן הקצוב לתפוגה של מדיניות ServiceCallout.
- בוחרים את המדיניות הספציפית של ServiceCallout שרוצים לבדוק.
-
אפשר לראות את הרכיב
<Timeout>עם ערך מתאים מתחת הגדרה של<ServiceCallout>.לדוגמה, הזמן הקצוב לתפוגה של קלט/פלט בקוד הבא יהיה 120 שניות:
<Timeout>120000</Timeout>
אימות הזמן הקצוב לתפוגה של קלט/פלט במעבדי ההודעות
- מתחברים למעבד ההודעות.
-
חיפוש הנכס
HTTPTransport.io.timeout.millisב הספרייה/opt/apigee/edge-message-processor/confבאמצעות הפקודה הבאה:grep -ri "HTTPTransport.io.timeout.millis" /opt/apigee/edge-message-processor/conf
פלט לדוגמה
/opt/apigee/edge-message-processor/conf/http.properties:HTTPTransport.io.timeout.millis=55000
- בפלט לדוגמה שלמעלה, שימו לב שהמאפיין
HTTPTransport.io.timeout.millisהוגדר עם הערך55000ב-http.properties. הדבר מציין שהזמן הקצוב לתפוגה של קלט/פלט הוגדר בהצלחה 55 שניות במעבד ההודעות.
אחרי שקובעים את הזמן הקצוב לתפוגה שהוגדר בנתב ובמעבד ההודעות, צריך לוודא נתב/מארח וירטואלי הוגדר עם ערך זמן קצוב נמוך יותר בהשוואה לזה שרת proxy של מעבד הודעות/API.
שימו לב לערכים שהוגדרו בכל השכבות, כפי שמוצג בטבלה הבאה:
| זמן קצוב לתפוגה בנתב (בשניות) | זמן קצוב לתפוגה במארח וירטואלי (בשניות) | הזמן הקצוב לתפוגה של מעבד ההודעות (בשניות) | הזמן הקצוב לתפוגה בשרת proxy ל-API (בשניות) |
|---|---|---|---|
| 57 | - | 55 | 120 |
במשפט הזה,
- ערך ברירת המחדל של 57 שניות מוגדר בנתב.
- ערך הזמן הקצוב לתפוגה לא מוגדר במארח הווירטואלי הספציפי. כלומר, היא תשתמש ערך ברירת המחדל של 57 שניות שהוגדר בנתב עצמו.
- במעבד ההודעות מוגדר ערך ברירת מחדל של 55 שניות.
- עם זאת, בשרת ה-proxy הספציפי ל-API מוגדר ערך של 120 שניות.
חשוב לשים לב שערך הזמן הגבוה יותר מוגדר רק בשרת ה-proxy של ה-API, אבל הנתב עדיין
שהוגדר עם 57 שניות. לכן, הזמן הקצוב של הנתב הוא 57 שניות, בזמן
מעבד המידע/הקצה העורפי עדיין בתהליך עיבוד הבקשה. זה יגרום לנתב להגיב
שגיאה 504 Gateway Timeout באפליקציית הלקוח.
רזולוציה
מבצעים את השלבים הבאים כדי להגדיר את הזמן הקצוב לתפוגה של קלט/פלט (I/O) בנתב ובהודעה מעבד המידע כדי לפתור את הבעיה.
- פרטים נוספים שיטות מומלצות להגדרת זמן קצוב לתפוגה של קלט/פלט כדי להבין אילו ערכי זמן קצוב לתפוגה צריכה להיות מוגדרת ברכיבים שונים שמעורבים בתהליך בקשת ה-API דרך Apigee Edge.
- בדוגמה שלמעלה, אם וידאתם שצריך להגדיר ערך גבוה יותר של זמן קצוב לתפוגה
כי שרת הקצה העורפי דורש זמן רב יותר והגדלתם את הזמן הקצוב לתפוגה
שבמעבד ההודעות ל-120 שניות, ולאחר מכן הגדרת ערך גבוה יותר של זמן קצוב לתפוגה
לדוגמה:
123 secondsבנתב. כדי למנוע השפעה על כל שרתי ה-proxy ל-API בגלל הערך החדש של הזמן הקצוב לתפוגה, הגדירו את הערך123 secondsרק בשעה מארח וירטואלי ספציפי שבו נעשה שימוש בשרת ה-Proxy הספציפי ל-API. - פועלים לפי ההוראות ב הגדרת זמן קצוב לתפוגה של קלט/פלט בנתבים כדי לקבוע את הזמן הקצוב לתפוגה במארח הווירטואלי.