מוצג המסמך של Apigee Edge.
עוברים אל
מסמכי תיעוד של Apigee X. מידע
סרטונים
מומלץ לצפות בסרטונים הבאים כדי לקבל מידע נוסף על שגיאות 503:
וידאו | תיאור |
---|---|
פתרון בעיות ופתרון לשגיאה 503 של שירות לא זמין עקב בעיה ב-DNS | למידע על הנושאים הבאים:
|
פתרון בעיות ותיקון לשגיאה 503 של שירות לא זמין עקב בעיה ברשת | פתרון בעיות ופתרון לשגיאה 503 של שירות לא זמין בזמן אמת שנגרמה על ידי בעיית רשת ב-Apigee Edge |
תיאור הבעיה
אפליקציית הלקוח מקבלת תגובת HTTP 503 עם ההודעה שירות לא זמין בעקבות קריאה ל-API בשרת proxy.
הודעות שגיאה
הודעת השגיאה הבאה עשויה להופיע:
HTTP/1.1 503 Service Unavailable
בנוסף, בתגובת ה-HTTP אפשר לראות את הודעת השגיאה הבאה:
השירות לא זמין
{ "fault": { "faultstring": "The Service is temporarily unavailable", "detail": { "errorcode": "messaging.adaptors.http.flow.ServiceUnavailable" } } }
גורמים אפשריים
תגובת ה-HTTP 503 Service Unavailable עם קוד השגיאה messaging.adaptors.http.flow.ServiceUnavailable
מתרחשת אם מעבד ההודעות של Apigee Edge נתקל בשגיאות כתוצאה מזמן קצוב לתפוגה של חיבור, שגיאה
שם המארח או כשלים לחיצת יד של SSL במהלך התקשורת עם שרת הקצה העורפי.
סיבות אפשריות לתגובה 503 Service Unavailable הן:
סיבה | תיאור | מי יכול לבצע את השלבים לפתרון בעיות |
---|---|---|
שגיאות חיבור בגלל רזולוציית DNS שגויה | רזולוציית ה-DNS של שרת היעד גרמה לכתובות IP שגויות שמובילות לשגיאות חיבור. | משתמשי Edge בענן פרטי |
שגיאות התחברות | בעיות ברשת או בקישוריות מונעות מהלקוח להתחבר לשרת. | משתמשי Edge בענן פרטי |
שם מארח של שרת היעד שגוי | מארח שרת היעד שצוין שגוי או מכיל תווים לא רצויים (כגון רווח). | משתמשי Edge בענן הציבורי והפרטי |
כשלים לחיצת יד ב-SSL | לחיצת היד של TLS/SSL נכשלה בין הלקוח לשרת. (פתרון בעיות עבור סיווג זה של עוסקת בבעיה הזו בנושא נפרד). | משתמשי Edge בענן הציבורי והפרטי |
שלבי אבחון נפוצים
קביעת מזהה ההודעה של הבקשה שנכשלה
כלי המעקב
כדי לזהות את מזהה ההודעה של הבקשה שנכשלה באמצעות כלי המעקב:
- אם הבעיה עדיין פעילה, מפעילים את סשן המעקב בשביל ה-API המושפע.
- מבצעים את הקריאה ל-API ומשחזרים את הבעיה – שירות 503 לא זמין עם קוד השגיאה
messaging.adaptors.http.flow.ServiceUnavailable.
- בוחרים אחת מהבקשות שנכשלו.
- מנווטים אל שלב AX ומגדירים את מזהה ההודעה (
X-Apigee.Message-ID
) של הבקשה על ידי גלילה למטה בקטע פרטי השלב, כמו שמוצג באיור הבא.
יומני גישה ל-NGINX
כדי לקבוע את מזהה ההודעה של הבקשה שנכשלה באמצעות יומני הגישה NGINX:
אפשר גם לעיין ביומני NGINX Access כדי לבדוק את מזהה ההודעה של שגיאות 503. האפשרות הזו שימושית במיוחד אם הבעיה התרחשה בעבר או אם היא מתרחשת לסירוגין ואין לך אפשרות לתעד את המעקב בממשק המשתמש. כדי לראות את המידע הזה ביומני הגישה של NGINX, צריך לפעול לפי השלבים הבאים:
- כדאי לבדוק את יומני הגישה ל-NGINX: (
/opt/apigee/var/log/edge-router/nginx/ <org>~ <env>.<port#>_access_log
) - חיפוש אם יש שגיאות 503 עבור שרת ה-proxy הספציפי ל-API במהלך פרק זמן ספציפי (אם הבעיה התרחשה בעבר) או אם יש בקשות שעדיין נכשלות עם קוד 503.
- אם אירעו שגיאות 503 ב-X-Apigee-fault-code messages.adaptors.http.flow.ServiceUnavailable,
שימו לב למזהה ההודעה של בקשה אחת או יותר, כמו בדוגמה הבאה:
רשומה לדוגמה שמציגה שגיאה 503
שגיאות חיבור עקב רזולוציית DNS שגויה
אבחון
- קובעים את מזהה ההודעה של הבקשה שנכשלה.
- חיפוש של המזהה הספציפי של הודעת הבקשה ביומן של מעבד ההודעות (
/opt/apigee/var/log/edge-message-processor/logs/system.log
). יכול להיות שיופיעו השגיאות הבאות:
שגיאת onConnectTimeout מציינת שמעבד ההודעות לא הצליח להתחבר לשרת הקצה העורפי במהלך פרק הזמן הקצוב לתפוגה של החיבור (ברירת המחדל: 3 שניות).2019-08-14 09:11:49,314 org:myorg env:prod api:Employees rev:1 messageid:mo-96cf6757a-9401-21-1 NIOThread@0 ERROR HTTP.CLIENT - HTTPClient$Context.onTimeout() : ClientChannel[Connected:]@164162 useCount=1 bytesRead=0 bytesWritten=0 age=3001ms lastIO=3001ms .onConnectTimeout connectAddress=www.abc.com/11.11.11.11 resolvedAddress=www.abc.com/22.22.22.22 2019-08-14 09:11:49,333 org:myorg env:prod api:Employees rev:1 messageid:mo-96cf6757a-9401-21-1 NIOThread@0 ERROR ADAPTORS.HTTP.FLOW - RequestWriteListener.onTimeout() : RequestWriteListener.onTimeout(HTTPRequest@6b393600)
- שימו לב לכתובת ה-IP שטופלה בשגיאה onConnectTimeout ולבדוק אם כתובת ה-IP תקפה לשרת הקצה העורפי שלכם. אם כתובת ה-IP תקינה, עוברים לקטע שגיאות חיבור.
- אם כתובת ה-IP לא תקינה, סביר להניח שהסיבות לכך הן בעיות ברזולוציית ה-DNS.
- חוזרים על שלב 3 ו-4 עם עוד כמה בקשות API שנכשלו ובודקים אם רואים את אותה כתובת IP או כתובות IP לא חוקיות אחרות.
- ביומן של מעבד ההודעות (
/opt/apigee/var/log/edge-message-processor/logs/system.log
) מחפשים הודעות עם מילת המפתח רענון DNS. כדאי לבדוק מדי פעם אם כתובות IP פגומות או לא תקינות מתווספות למטמון ה-DNS במעבד ההודעות.2019-08-14 09:11:49,314 org:myorg env:prod api:Employees rev:1 messageid:mo-96cf6757a-9401-21-1 NIOThread@0 INFO c.a.p.h.d.DNSCachedAddress - DNSCachedAddress.reportDifferences() : DNS Refresh for host: apitarget-uat.schemeweb.co.uk:4436. Added 2 IPs [www.abc.com/22.22.22.22, www.abc.com/33.33.33.33] Removed 1 IPs [www.abc.com/11.11.11.11]
- הבעיה הזו יכולה להתרחש אם יש בעיות בשרתי ה-DNS המהימנים או בשרתי השמות שהוגדרו ב-
/etc/resolv.conf
.
בדרך כלל אפשר להגדיר שרת DNS מהימן אחד או יותר לביצוע רזולוציית DNS. אם אין שרתי DNS מהימנים, ייקבע שוב הגדרת התצורה ב-/etc/resolv.conf
ויבצע את רזולוציית ה-DNS בהתאם. לדוגמה: אם מוגדר ב-/etc/resolv.conf
שימוש בשרתי שמות ספציפיים, שרתי השמות האלה ישמשו לרזולוציית DNS. - אם יש בעיות בשרתי ה-DNS המהימנים או בשרתי השמות שצוינו ב-
/etc/resolv.conf
, שמות המארחים של שרתי הקצה העורפי יוגדרו ככתובות IP שגויות או לא תקינות. כתובות ה-IP הבעייתיות/לא חוקיות יישמרו במטמון ה-DNS של מעבד ההודעות.- אם הבעיה בשרתי ה-DNS המהימנים או בשרתי השמות שצוינו ב-
/etc/resolv.conf
נמשכת, כתובות ה-IP הבעייתיות/לא חוקיות ימשיכו להישאר במטמון ה-DNS של מעבד ההודעות. כל עוד כתובות ה-IP הגרועות שמורות במטמון ה-DNS של מעבד ההודעות, הבקשות לכל ממשקי ה-API האלה באמצעות שרת הקצה העורפי הספציפי ייכשלו ויתקבל שגיאה 503. - אם הבעיה בשרתי ה-DNS המהימנים או בשרתי השמות שצוינו ב-
/etc/resolv.conf
מתרחשת לסירוגין, כתובות IP תקינות וגרועות יישמרו לסירוגין במטמון ה-DNS. במקרה כזה תראו לסירוגין שגיאות 503 לכל ממשקי ה-API שמשתמשים בשרת הקצה העורפי הספציפי.
- אם הבעיה בשרתי ה-DNS המהימנים או בשרתי השמות שצוינו ב-
- אם הבעיה בשרתי ה-DNS נמשכת, יופיעו כשלים מתמשכים. אם הבעיה בשרתי ה-DNS מתרחשת לסירוגין, ייתכן שתראו כשלים זמניים. כלומר, בכל פעם ששם המארח של שרת הקצה העורפי מזוהה לכתובות IP שגויות, מתגלות שגיאות 503. וכששמות המארח של שרת הקצה העורפי יוגדרו לכתובות IP טובות, אפשר יהיה לראות תגובות מוצלחות.
רזולוציה
עליך לעבוד עם האדמין של מערכת ההפעלה ולפתור את הבעיות בשרתי ה-DNS.
- אם יש בעיה בשרתי ה-DNS המהימנים או בשרתי השמות שלך שצוינו ב-
/etc/resolv.conf
, עליך לפתור את הבעיה בשרת המתאים כדי לטפל בבעיה. - אם יש בעיה בהגדרה של
/etc/resolv.conf
במערכות שיש בהן מעבדי הודעות, צריך לפתור את בעיית ההגדרה.
שגיאות התחברות
שגיאת חיבור מתרחשת כשמעבד ההודעות של Apigee Edge מנסה להתחבר לקצה עורפי ואחת מהבעיות הבאות מתרחשת:
- מעבד ההודעות לא יכול להתחבר במהלך פרק הזמן הקצוב לתפוגה של החיבור. (ברירת המחדל: 3 שניות)
- שרת הקצה העורפי מסרב להתחבר.
אבחון
- קובעים את מזהה ההודעה של הבקשה שנכשלה.
-
חיפוש של המזהה הספציפי של הודעת הבקשה ביומן של מעבד ההודעות (
/opt/apigee/var/log/edge-message-processor/logs/system.log
). יכול להיות שיופיעו השגיאות הבאות:-
שגיאת onConnectTimeout מציינת שמעבד ההודעות לא הצליח
להתחבר לשרת הקצה העורפי במסגרת הזמן הקצוב לתפוגה של החיבור שהוגדר מראש.
2016-06-23 09:11:49,314 org:myorg env:prod api:Employees rev:1 messageid:mo-96cf6757a-9401-21-1 NIOThread@2 ERROR HTTP.CLIENT - HTTPClient$Context.onTimeout() : ClientChannel[C:]@10 useCount=1 bytesRead=0 bytesWritten=0 age=3001ms lastIO=3001ms .onConnectTimeout connectAddress=www.abc.com/11.11.11.11:80 resolvedAddress=www.abc.com/11.11.11.11 2016-06-23 09:11:49,333 org:myorg env:prod api:Employees rev:1 messageid:mo-96cf6757a-9401-21-1 NIOThread@2 ERROR ADAPTORS.HTTP.FLOW - RequestWriteListener.onTimeout() : RequestWriteListener.onTimeout(HTTPRequest@6b393600)
-
הודעת השגיאה Java.net.Connectexcept: החיבור נדחה מציינת את החיבור
שרת הקצה העורפי סירב.
14:40:16.531 +0530 2016-06-17 09:10:16,531 org:myorg env:prod api:www.abc.com rev:1 rrt07eadn-22739-40983870-15 NIOThread@2 ERROR HTTP.CLIENT - HTTPClient$Context.onConnectFailure() : connect to www.abc.com:11.11.11.11:443 failed with exception {} java.net.ConnectException: Connection refused at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method) ~[na:1.7.0_75] at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:739) ~[na:1.7.0_75] at com.apigee.nio.ClientChannel.finishConnect(ClientChannel.java:121) ~[nio-1.0.0.jar:na] at com.apigee.nio.handlers.NIOThread.run(NIOThread.java:108) ~[nio-1.0.0.jar:na]
-
שגיאת onConnectTimeout מציינת שמעבד ההודעות לא הצליח
להתחבר לשרת הקצה העורפי במסגרת הזמן הקצוב לתפוגה של החיבור שהוגדר מראש.
- לבדוק אם אתם יכולים להתחבר לשרת העורפי הספציפי ישירות מכל אחד מהדפדפנים הבאים:
מעבדי הודעות באמצעות הפקודה
telnet
:- אם שרת הקצה העורפי מפנה לכתובת IP אחת, משתמשים בפקודה הבאה:
telnet BackendServer-IPaddress 443
- אם שרת הקצה העורפי מפנה למספר כתובות IP, יש להשתמש בשם המארח של
שרת הקצה העורפי בפקודה
telnet
כמו שמוצג בהמשך:telnet BackendServer-HostName 443
- אם שרת הקצה העורפי מפנה לכתובת IP אחת, משתמשים בפקודה הבאה:
- אם אפשר להתחבר לשרת הקצה העורפי, יכול להיות שתוצג הודעה כמו
Connected to backend-server
. אם אתם לא מצליחים להתחבר לשרת העורפי, יכול להיות כי מעבדי ההודעות כתובות IP לא מופיעות ברשימת ההיתרים בקצה העורפי הספציפי השרת.
רזולוציה
הענקת גישה לכתובות ה-IP של מעבד ההודעות בשרת העורפי הספציפי כדי לאפשר ממעבדי ההודעות של Edge כדי לגשת לשרת העורפי שלכם. לדוגמה, ב-Linux, אפשר להשתמש iptables כדי לאפשר את תעבורת הנתונים מכתובות ה-IP של מעבד ההודעות. בשרת העורפי.
אם הבעיה נמשכת, כדאי לפנות למנהל הרשת כדי לברר ולפתור את הבעיה בעיה. אם אתם צריכים עזרה נוספת מ-Apigee, תוכלו לפנות לתמיכה של Apigee.
שם מארח שגוי של שרת יעד
אבחון
אם שם המארח שמצוין בשרת היעד שגוי, אפשר לקבל תשובת השירות לא זמין 503 עם קוד השגיאה
messaging.adaptors.http.flow.ServiceUnavailable.
כלי המעקב
כדי לאבחן באמצעות כלי המעקב:
- אם הבעיה עדיין פעילה, מפעילים את סשן המעקב בשביל ה-API המושפע.
- מבצעים את הקריאה ל-API ומשחזרים את הבעיה – שירות 503 לא זמין עם קוד השגיאה
messaging.adaptors.http.flow.ServiceUnavailable.
- בוחרים אחת מהבקשות שנכשלו.
- אפשר לעבור בין השלבים השונים במעקב ולאתר את מקום הכשל.
- בוחרים את ה-FlowInfo שבו מופיעה השגיאה. בשדה error.cause מופיע מידע נוסף שיכול להראות לכם את הסיבה לכשל, כפי שמוצג בדוגמה הבאה:
בקשה לדוגמה שמציגה שגיאה.cause במעקב
- אם מופיעה ב-error.cause מוצגת המארח לא נגיש, הסיבה הסבירה לשגיאה היא אחת מהאפשרויות הבאות:
- שם המארח שמצוין בהגדרה של שרת היעד/נקודת הקצה (endpoint) של היעד שגוי או שיש בו שטח או תווים מיוחדים לא רצויים.
לדוגמה, יש רווח לא רצוי בשם המארח כפי שמוצג כאן:
"demo-target.apigee.net "
- שם המארח מוחלף על ידי המשתנה target.url בשרת ה-proxy של ה-API באמצעות AssignMessage או מדיניות JavaScript שגויה או שיש בה רווח או תווים מיוחדים לא רצויים אחרים.
- שם המארח שמצוין בהגדרה של שרת היעד/נקודת הקצה (endpoint) של היעד שגוי או שיש בו שטח או תווים מיוחדים לא רצויים.
- כדי לראות אם שם המארח של שרת היעד שגוי או אם יש בו רווחים או תווים מיוחדים, צריך לבדוק את ההגדרות האישיות של נקודת הקצה של היעד או את ההגדרה של שרת היעד.
- אם המארח של שרת היעד נוצר באופן דינמי, צריך לבדוק את המדיניות המתאימה (לדוגמה, המדיניות AssignMessage/JavaScript) שבה נעשה שימוש כדי ליצור את המארח. סימון ל- כדאי לבדוק אם שם המארח של שרת היעד שגוי או שיש בו רווחים או תווים מיוחדים לא רצויים.
- אחרי שקובעים את שם המארח של שרת היעד, מריצים את הפקודה
nslookup/dig
על שם המארח כדי לבדוק אם ניתן לפתור את הבעיה.לדוגמה, הרצת הפקודה
nslookup
על שם המארח עם רווח לא רצוי תחזיר את הפלט הבא:nslookup "demo-target.apigee.net " Server: 49.205.75.2 Address: 49.205.75.2#53 ** server can't find demo-target.apigee.net\032: NXDOMAIN
- אם גם פקודת מערכת ההפעלה
nslookup
לא מצליחה לפענח את שם המארח, הגורם לבעיה הוא שם המארח השגוי המשמש עבור שרת היעד.עוברים אל רזולוציה.
יומנים של מעבד ההודעות
כדי לאבחן באמצעות יומני מעבד ההודעות:
- מזהים את מזהה ההודעה של הבקשה שנכשלה.
- מחפשים את מזהה ההודעה ביומן מעבד ההודעות. (
/opt/apigee/var/log/edge-message-processor/logs/system.log
) - אם אתם רואים את הודעות האזהרה/השגיאה הבאות, מעבד ההודעות לא הצליח לפענח את שם המארח. מכיוון שההודעה סומנה לטיפול בהמשך, יכול להיות שלא תראה אותה
הודעת אזהרה עבור כל הבקשות/מזהי ההודעות.
org:myorg env:prod api:TestTargetServer rev:2 messageid:<messageid> NIOThread@0 WARN S.HTTPCLIENTSERVICE - DNSCache$2.failed() : Failed to resolve hostname www.somehost.com . Reason mocktarget.apigee.net : Name or service not known. This log message will snooze for 2 hours
- לאחר מכן תופיע הודעת אזהרה, שבה מעבד ההודעות מסיר את הכתובת ממטמון ה-DNS, כי לא ניתן להגיע למארח של שרת היעד.
org:myorg env:prod api:TestTargetServer rev:2 messageid:<messageid> NIOThread@0 WARN c.a.p.h.d.DNSCachedAddress - DNSCachedAddress.addressNotReachable() : The last address has been removed from Address list null refreshing
- ייתכן שתופיע הודעה שבה מעבד ההודעות נכשל עם החריג 'לא ניתן להגיע למארח'. לפעמים מופיע שם המארח כחלק מהודעת השגיאה:
org:myorg env:prod api:TestTargetServer rev:2 messageid:<messageid> NIOThread@0 ERROR HTTP.CLIENT - HTTPClient$Context.onConnectFailure() : connect to demo-target.apigee.net failed with exception {} java.lang.RuntimeException: Host not reachable at com.apigee.protocol.http.HTTPClient$Context.initConnect(HTTPClient.java:704) at com.apigee.protocol.http.HTTPClient$Context.send(HTTPClient.java:675) at com.apigee.messaging.adaptors.http.flow.data.TargetRequestSender.sendRequest(TargetRequestSender.java:234) …<snipped>
- לפעמים הערך שמופיע הוא null כי לא ניתן לפענח את שם המארח או להגיע אליו כמו שמתואר בהמשך:
org:myorg env:prod api:TestTargetServer rev:2 messageid:<messageid> NIOThread@0 ERROR HTTP.CLIENT - HTTPClient$Context.onConnectFailure() : connect to null failed with exception {} java.lang.RuntimeException: Host not reachable at com.apigee.protocol.http.HTTPClient$Context.initConnect(HTTPClient.java:704) at com.apigee.protocol.http.HTTPClient$Context.send(HTTPClient.java:675) at com.apigee.messaging.adaptors.http.flow.data.TargetRequestSender.sendRequest(TargetRequestSender.java:234) …<snipped>
- השגיאה
Host not reachable
בדרך כלל מתרחשת באחד מהמקרים הבאים:- שם המארח שמצוין בהגדרה של שרת היעד/נקודת הקצה (endpoint) של היעד שגוי או שיש בו שטח או תווים מיוחדים לא רצויים.
לדוגמה, יש שטח לא רצוי בשם המארח 'demo-target.apigee.net' בהודעת השגיאה הבאה:NIOThread@0 ERROR HTTP.CLIENT - HTTPClient$Context.onConnectFailure() : connect to demo-target.apigee.net failed with exception
- שם המארח שהוחלף על ידי המשתנה target.url בשרת ה-proxy ל-API באמצעות מדיניות AssignMessage או JavaScript שגוי או שיש בו רווח או תווים מיוחדים אחרים שאינם רצויים.
- שם המארח שמצוין בהגדרה של שרת היעד/נקודת הקצה (endpoint) של היעד שגוי או שיש בו שטח או תווים מיוחדים לא רצויים.
- קובעים את שם מארח שרת היעד שאליו מעבד ההודעות מנסה לתקשר באמצעות אחת מהאפשרויות הבאות:
- יש לבדוק בעיון את הודעת השגיאה שמכילה
Host not reachable
. - אם בהודעת השגיאה מוצג שם המארח, מעתיקים את שם המארח כולל רווחים או תווים מיוחדים.
- אם בהודעת השגיאה מוצג הערך null לגבי שם המארח כפי שמוצג בהודעת השגיאה הבאה,
org:myorg env:prod api:TestTargetServer rev:2 messageid:<messageid> NIOThread@0 ERROR HTTP.CLIENT - HTTPClient$Context.onConnectFailure() : connect to null failed with exception {}
- אפשר לקבוע את שם המארח באמצעות בדיקה של הגדרת שרת היעד שבה נעשה שימוש בשרת ה-proxy ל-API.
- אם המארח של שרת היעד נוצר באופן דינמי, צריך לבדוק את המדיניות המתאימה (לדוגמה, AssignMessage/JavaScript policy) שבה נעשה שימוש כדי ליצור את המארח.
- אחרי שקובעים את שם המארח של שרת היעד, מריצים את הפקודה nslookup/dig על שם המארח ובודקים אם ניתן לפתור את הבעיה.
לדוגמה, מריצים את הפקודה nslookup על שם המארח שיש בו רווח.
nslookup "demo-target.apigee.net " Server: 49.205.75.2 Address: 49.205.75.2#53 ** server can't find demo-target.apigee.net\032: NXDOMAIN
- אם גם פקודת מערכת ההפעלה nslookup לא מצליחה לפענח את שם המארח, הגורם לבעיה הוא שם המארח השגוי שבו נעשה שימוש בשרת היעד.
רזולוציה
- צריך לוודא ששם המארח של שרת היעד שצוין בהגדרה של נקודת הקצה של היעד או בשרת היעד היא נכונה ואין בה רווח או תווים מיוחדים.
- אם אתם משתמשים במדיניות AssignMessage/JavaScript כלשהי כדי ליצור באופן דינמי את שם המארח של שרת היעד, יש לבדוק את הגדרת המדיניות ואת הקוד ולוודא ששם המארח של שרת היעד נוצר כראוי.
כשלי לחיצת יד ב-SSL
מדריך שלם לפתרון בעיות מוקדש לשגיאות לחיצת יד בפרוטוקול TLS או SSL. למידע נוסף, ראו כשלים לחיצת יד של SSL.
איך לאתר את הבעיה
סוגים מסוימים של שגיאות יכולים להתרחש בכניסה (צפון) או ביציאה (יוצאת) חיבור כזה. מתרחשת שגיאה נכנסת (צפון) בין אפליקציית הלקוח לבין Edge. שגיאה יוצאת (יוצאת) מתרחשת בין Edge לבין שרת היעד העורפי. כדי לאבחן מקרים כאלה כמה בעיות, התפקיד הראשון שלכם הוא להבין אם השגיאה מתרחשת בדרך הצפונית או חיבור שפונה דרומה.
הסבר על החיבורים לכיוון צפון ולדרום
ב-Edge, ייתכן שתיתקלו בשגיאה 503 Service Unavailable בחיבור הנכנס או בחיבור היוצא:
- חיבור נכנס (או לכיוון צפון) – החיבור בין הלקוח ואת נתב Edge. הנתב הוא הרכיב של Apigee Edge שמטפל בקשות נכנסות שנשלחות למערכת.
- חיבור יוצא (או דרומה) – החיבור בין הקצה מעבד ההודעות ושרת הקצה העורפי. מעבד ההודעות הוא רכיב של Apigee Edge ששולח בקשות API לשרתי יעד בקצה עורפי.
אם אתם משתמשים של Edge Public Cloud, סביר להניח שאתם לא מכירים רכיבים פנימיים כמו הנתב או מעבד ההודעות. הרכיבים הפנימיים האלה אינם גלויים או נגישים ל- משתמשי ענן ציבורי. כשהדבר אפשרי, אנחנו מציעים דרכים חלופיות לחקירת הבעיה, לא מחייבים גישה ישירה לרכיבים האלה.
האיור הבא ממחיש את החיבורים בין צפון לדרום עבור Apigee קצה.
קביעת המיקום שבו אירעה שגיאה 503 Service Unavailable
יש להשתמש באחד מהתהליכים הבאים כדי לקבוע אם אירעה שגיאה מסוג 503 Service Unavailable. בחיבור לכיוון צפון או דרום.
מעקב בממשק המשתמש
כדי לקבוע איפה השגיאה התרחשה באמצעות UI Trace:
- אם הבעיה עדיין פעילה, מפעילים את המעקב אחרי ממשק המשתמש של ה-API המושפע.
- אם מעקב ממשק המשתמש עבור בקשת ה-API שנכשלה מראה ששגיאת 503 השירות לא זמין מתרחשת במהלך תהליך בקשת היעד או שנשלחת על ידי שרת הקצה העורפי, הבעיה היא southbound (כלומר, בין מעבד ההודעות לקצה העורפי) שרת).
- אם אתם לא מוצאים את נתוני המעקב של הקריאה הספציפית ל-API, הבעיה היא צפון, בין אפליקציית הלקוח לנתב.
מעקב אחרי API
בעזרת API Monitoring תוכלו לבודד במהירות אזורים בעייתיים כדי לאבחן בעיות של שגיאות, ביצועים וזמן אחזור ואת המקור שלהן, כגון אפליקציות למפתחים, שרתי proxy ל-API, יעדים לקצה העורפי או פלטפורמת ה-API.
תרחיש לדוגמה שמדגים איך לפתור בעיות מסוג 5xx באמצעות ממשקי API באמצעות API Monitoring.
לדוגמה, אפשר להגדיר התראה שתקבלו כשמספר ה-messaging.adaptors.http.flow.ServiceUnavailable
שגיאות חורג מסף מסוים.
יומני גישה ל-NGINX
כדי לקבוע איפה השגיאה התרחשה באמצעות UI Trace:
אם הבעיה התרחשה בעבר או אם הבעיה מתרחשת לסירוגין ושאינך יכול לתעד את המעקב ומבצעים את השלבים הבאים:
- צריך לבדוק את יומני הגישה ל-NGINX (
/opt/apigee/var/log/edge-router/nginx/ org-env.port_access_log
). - מחפשים אם יש שגיאות 503 בשרת proxy ספציפי של API.
- אם אתם יכולים לזהות שגיאות 503 ב-API הספציפי בזמן מסוים, יש להזין את התרחשה בחיבור היוצא (בין מעבד ההודעות לבין שרת העורפי).
- אם לא, הבעיה התרחשה בחיבור צפון (בין אפליקציית הלקוח והנתב).