אתם צופים במסמכי התיעוד של Apigee Edge.
כדאי לעיין במסמכי התיעוד של Apigee X. מידע
תיאור הבעיה
אפליקציית הלקוח מקבלת קוד סטטוס של HTTP 404 עם ההודעה Not Found והודעת השגיאה Unable to identify proxy for host: VIRTUAL_HOST and url: PATH כתגובה לקריאות ה-API.
השגיאה הזו מציינת ש-Edge לא הצליח למצוא את proxy ל-API עבור המארח הווירטואלי והנתיב שצוינו.
הודעת השגיאה
יוצג קוד הסטטוס הבא של HTTP:
HTTP/1.1 404 Not Found
תוצג גם הודעת שגיאה שדומה להודעה שמוצגת למטה:
{
"fault":{
"faultstring":"Unable to identify proxy for host: default and url: \/oauth2\/token",
"detail":{
"errorcode":"messaging.adaptors.http.flow.ApplicationNotFound"
}
}
}
הודעת השגיאה שלמעלה מציינת ש-Edge לא הצליח למצוא את ה-proxy ל-API עבור default המארח הווירטואלי /oauth2/token והנתיב.
סיבות אפשריות
בהמשך מפורטות כמה מהסיבות האפשריות לשגיאה הזו:
| סיבה | תיאור | הוראות לפתרון בעיות שרלוונטיות ל |
|---|---|---|
| proxy ל-API לא משויך למארח וירטואלי ספציפי | פרוקסי ה-API הספציפי לא מוגדר לקבלת בקשות במארח הווירטואלי שצוין בהודעת השגיאה. | משתמשים ב-Edge Public Cloud וב-Edge Private Cloud |
| הוסר מארח וירטואלי בגרסה חדשה של proxy ל-API | הסרת המארח הווירטואלי מהגרסה החדשה שפריסתה הושלמה, בזמן שהלקוח עדיין משתמש במארח הווירטואלי הספציפי, עלולה לגרום לבעיה הזו. | משתמשים ב-Edge Public Cloud וב-Edge Private Cloud |
| הנתיב לא משויך לאף proxy ל-API | ה-proxy ל-API הספציפי לא מוגדר לקבלת בקשות בנתיב שצוין בהודעת השגיאה. | משתמשים ב-Edge Public Cloud וב-Edge Private Cloud |
| לא בוצעה פריסה של proxy ל-API בסביבה | ה-proxy ל-API הספציפי לא נפרס בסביבה הספציפית שבה אתם מנסים לשלוח את בקשות ה-API. | משתמשים ב-Edge Public Cloud וב-Edge Private Cloud |
| הסביבה לא נטענה במעבד ההודעות | הסביבה הספציפית (שבה אתם מנסים לשלוח את בקשות ה-API) לא נטענה במעבדי ההודעות בגלל שגיאה. | משתמשים ב-Edge Private Cloud |
| proxy ל-API לא נפרס במעבד הודעות אחד או יותר | יכול להיות ש-proxy ל-API לא נפרס באחד או יותר ממעבדי הבקשות בגלל חוסר בהתראה לגבי אירוע במהלך ה-Deployment (פריסה). | משתמשים ב-Edge Private Cloud |
שלבים נפוצים לאבחון
יומני NGINX ו-מעבד בקשות יעזרו לפתור את השגיאה 404.
כדי לבדוק את היומנים:
- כדי להציג את היומנים של NGINX, מריצים את הפקודה הבאה:
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
- בודקים אם השדות הבאים מופיעים ברשומות ביומן:
שדה ערך Upstream_status, status404X-Apigee-fault-codemessaging.adaptors.http.flow.ApplicationNotFoundרושמים את מזהה ההודעה מתוך היומנים.
- בודקים את היומנים של Message Processor (
/opt/apigee/var/log/edge-message-processor/logs/system.log)) כדי לראות אם יש לכםmessaging.adaptors.http.flow.ApplicationNotFoundעבור ה-API הספציפי או אם יש לכם את מזהה ההודעה הייחודי משלב 2 עבור בקשת ה-API.הודעת שגיאה לדוגמה מיומן של מעבד ההודעות
NIOThread@1 ERROR ADAPTORS.HTTP.FLOW - AbstractRequestListener.onException() : Request:POST, uri:/weather, message Id:null, exception:com.apigee.rest.framework.ResourceNotFoundException{ code = messaging.adaptors.http.flow.ApplicationNotFound, message = Unable to identify proxy for host: vh1 and url: /weather, associated contexts = []}, context:Context@342ea86b input=ClientInputChannel(SSLClientChannel[Accepted: Remote:10.123.123.123:8443 Local:10.135.33.68:62092]@1206954 useCount=1 bytesRead=0 bytesWritten=0 age=1ms lastIO=0ms isOpen=true)
ביומן שלמעלה מוצגים קוד השגיאה והודעת השגיאה:
code = messaging.adaptors.http.flow.ApplicationNotFound, message = Unable to identify proxy for host: vh1 and url: /weather
הסיבה: ה-proxy ל-API לא משויך למארח הווירטואלי הספציפי
אם שרת ה-proxy ל-API לא מוגדר לקבל את הבקשות עבור המארח הווירטואלי הספציפי, יכול להיות שנקבל תשובה 404 Not Found עם הודעת השגיאה Unable to identify proxy for host: VIRTUAL_HOST and url: PATH.
אבחון
- בודקים את ההגדרה של נקודת הקצה של ה-proxy עבור proxy ל-API, ומבררים אם ה-proxy ל-API מוגדר לקבל את הבקשות עבור המארח הווירטואלי שצוין בשגיאה. זה מצוין באלמנט
VirtualHost. כדי להבין את זה, נבחן הגדרה לדוגמהProxyEndpoint.דוגמה להגדרת נקודת קצה (endpoint) של proxy ל-API שמראה ש-proxy ל-API מקבל בקשות במארח וירטואלי מאובטח

- נניח שהמארחים הווירטואליים מוגדרים בסביבה הספציפית באופן הבא:
שם יציאה כינוי מארח default80myorg-prod.apigee.netsecure443myorg-prod.apigee.net - שולחים בקשת API אל
defaultVirtualHostבאמצעות כתובת ה-URLhttp://myorg-prod.apigee.net/weather - מכיוון של-
ProxyEndpointאיןdefaultVirtualHostכמו בדוגמה שלמעלה, מקבלים את קוד התגובה404עם הודעת השגיאה הבאה:{"fault":{"faultstring":"Unable to identify proxy for host: default and url: \/weather","detail":{"errorcode":"messaging.adaptors.http.flow.ApplicationNotFound"}}} - כדי לפתור את הבעיה, עוברים לקטע פתרון בהמשך.
- אם
ProxyEndpointמוגדר לקבל את הבקשות ב-defaultVirtualHost, עוברים לגורם הבא – הנתיב לא משויך לאף proxy ל-API.
רזולוציה
- כדי לפתור את הבעיה, צריך להוסיף את המאפיין החסר
VirtualHostלהגדרות שלProxyEndpoint. בדוגמה שלמעלה, אפשר להוסיף את ברירת המחדלVirtualHostלהגדרהProxyEndpointבאופן הבא:<VirtualHost>default</VirtualHost>
דוגמה להגדרת נקודת קצה של שרת proxy שבה מוצגת הוספה של ברירת המחדל> VirtualHost>

- לחלופין, בדוגמה שצוינה למעלה, אם רציתם להשתמש רק ב-
secureVirtualHostבשביל פרוקסי ה-API הספציפי הזה, צריך לשלוח את בקשות ה-API רק ל-secureVirtualHostבאמצעות פרוטוקול HTTPS:https://myorg-prod.apigee.net/weather
הסיבה: מארח וירטואלי הוסר בגרסה חדשה של proxy ל-API
אם פריסה של גרסה חדשה של proxy ל-API מתבצעת אחרי הסרה של מארח וירטואלי ספציפי (שהיה חלק מהגרסה הקודמת שנפרסה), והלקוחות עדיין משתמשים במארח הווירטואלי הזה כדי לשלוח בקשות API, יכול להיות שזה יגרום לבעיה הזו.
אבחון
- כדאי לבדוק את ההגדרה של נקודת הקצה של ה-Proxy בשביל ה-proxy ל-API כדי לראות אם ה-proxy ל-API מוגדר לקבל את הבקשות עבור המארח הווירטואלי שצוין בשגיאה. ההגדרה הזו מצוינת באלמנט
VirtualHostבהגדרותProxyEndpoint. - אם המארח הווירטואלי שצוין בשגיאה לא קיים בהגדרה
ProxyEndpoint, צריך לבצע את השלבים הבאים. אחרת, עוברים לגורם הבא – הנתיב לא משויך ל-proxy ל-API. - משווים את ההגדרה
ProxyEndpointשל הגרסה הקודמת שנפרסה לגרסה הנוכחית שנפרסה.- לדוגמה, נניח שהגרסה הקודמת שהופעלה הייתה
5והגרסה הנוכחית שהופעלה היא6:- Virtual Hosts configured in Proxy Endpoint in revision 5
- Virtual Hosts configured in Proxy Endpoint in revision 6
<HTTPProxyConnection> <BasePath>/weather</BasePath> <Properties/> <VirtualHost>vh1</VirtualHost> </HTTPProxyConnection><HTTPProxyConnection> <BasePath>/weather</BasePath> <Properties/> <VirtualHost>secure</VirtualHost> </HTTPProxyConnection> - בדוגמה שלמעלה,
VirtualHost vh1היה קיים ב-revision 5,אבל הוא הוסר ב-revision 6והוחלף ב-VirtualHost secure. - לכן, אם אתם או הלקוחות שלכם שולחים בקשות ל-proxy ל-API הזה באמצעות
VirtualHost vh1(שהיה חלק מ-revision 5), תקבלו את קוד התגובה404עם הודעת השגיאה הבאה:{"fault":{"faultstring":"Unable to identify proxy for host: vh1 and url: \/weather","detail":{"errorcode":"messaging.adaptors.http.flow.ApplicationNotFound"}}}
- לדוגמה, נניח שהגרסה הקודמת שהופעלה הייתה
- צריך לבדוק אם השינוי של המארח הווירטואלי בוצע בכוונה או בטעות בגרסה שפרסמתם כרגע, ולנקוט את האמצעים המתאימים כמו שמוסבר בקטע פתרון.
רזולוציה
אם תזהו שהמארח או המארחים הווירטואליים הוסרו בגרסה חדשה, יכול להיות שזה נעשה בכוונה או בטעות. בכל מקרה, מבצעים את השלבים הבאים לפתרון הבעיה.
תרחיש מספר 1: שינוי מכוון
אם ההסרה של המארח הווירטואלי היא מכוונת, אפשר לבחור באחת מהאפשרויות הבאות. האפשרות הראשונה היא המומלצת:
- יוצרים שרת proxy חדש עם נתיב בסיס שונה ומשתמשים במארח וירטואלי אחר (שלא קיים בגרסה הקודמת שפרסמתם).
-
אם רוצים להמשיך להשתמש ב-proxy ל-API הקיים אבל להשתמש במארח וירטואלי אחר, עדיף להשאיר את המארח הווירטואלי הקיים ולהוסיף את המארח הווירטואלי הנוסף.
כך תוכלו לוודא שהשינוי לא ישפיע על המשתמשים ב-proxy ל-API הזה.
אם רוצים להשתמש ב-proxy ל-API הקיים ויש רק מארח וירטואלי שונה, צריך להודיע למשתמשים מראש ולבצע את השינוי הזה במהלך תקופת תחזוקה.
כך תוכלו לוודא שהמשתמשים ב-proxy ל-API הזה מודעים לשינוי, ושהם יכולים להשתמש במארח וירטואלי אחר כדי לבצע את הקריאות ל-proxy ל-API הזה. לכן, הם לא יושפעו מהשינוי.
תרחיש מספר 2: שינוי לא מכוון
אם הסרתם את המארח הווירטואלי בטעות ולא בכוונה,אתם יכולים לבצע את הפעולות הבאות:
- מעדכנים את ההגדרה
ProxyEndpointבגרסה שכרגע בפריסה כך שתשתמש באותם מארחים וירטואליים ששימשו בגרסה הקודמת שהייתה בפריסה. בדוגמה שלמעלה, משנים את הקטע הבא מ:<HTTPProxyConnection> <BasePath>/weather</BasePath> <Properties/> <VirtualHost>secure</VirtualHost> </HTTPProxyConnection>עד
<HTTPProxyConnection> <BasePath>/weather</BasePath> <Properties/> <VirtualHost>vh1</VirtualHost> </HTTPProxyConnection> - פורסים מחדש את הגרסה.
שיטות מומלצות
תמיד מומלץ לפרוס שרתי proxy חדשים או גרסאות חדשות במהלך תקופת תחזוקה או בזמן שבו צפוי נפח התנועה הנמוך ביותר, כדי למנוע בעיות שעלולות לקרות במהלך הפריסה או לצמצם את ההשפעה על נפח התנועה.
הגורם: הנתיב לא משויך לאף שרת proxy ל-API
אם proxy ל-API לא מוגדר לקבל את הבקשות עבור הנתיב הספציפי שמשמש בכתובת ה-URL של בקשת ה-API, יכול להיות שנקבל תגובה 404 Not Found עם הודעת השגיאה Unable to identify proxy for host: VIRTUAL_HOST and url: PATH.
אבחון
- בודקים את ההגדרה
ProxyEndpointשל ה-API proxy הספציפי שאליו רציתם לשלוח את בקשות ה-API. - בודקים אם ה-proxy ל-API מוגדר לקבל את הבקשות עבור הנתיב הספציפי שמצוין בהודעת השגיאה. כדי לעשות את זה, צריך לפעול לפי השלבים שמפורטים בתרחיש מספר 1 ובתרחיש מספר 2.
תרחיש מספר 1: הנתיב לא תואם לנתיב הבסיס של proxy ל-API
- אם
pathשמופיע בהודעת השגיאה לא זהה ל-basepathשל ה-proxy ל-API הספציפי, או אם הוא לא מתחיל ב-basepath, יכול להיות שזו הסיבה לשגיאה. - כדי להסביר את זה, נשתמש בדוגמה:
- ה-
basepathשל ה-proxy ל-API המיועד הוא/weather - כתובת ה-URL של בקשת ה-API היא
https://myorg-prod.apigee.net/climate. כלומר, הנתיב שבו נעשה שימוש בכתובת ה-URL של בקשת ה-API הוא/climate. - בדוגמה הזו,
pathלא זהה ל-basepathוהוא לא מתחיל ב-basepath. לכן מופיעה השגיאה הבאה:{ "fault":{ "faultstring":"Unable to identify proxy for host: secure and url: \/climate", "detail":{ "errorcode":"messaging.adaptors.http.flow.ApplicationNotFound" } } }
רזולוציה
- מוודאים ש-
pathשמופיע בכתובת ה-URL של בקשת ה-API זהה ל-basepathשל ה-proxy ל-API הספציפי. - בדוגמה שלמעלה, כתובת ה-URL של בקשת ה-API צריכה להיות כזו:
{ https://myorg-prod.apigee.net/weather
תרחיש מספר 2: הנתיב לא תואם לאף אחד מהזרימות המותנות הזמינות
- אם
pathשמופיע בכתובת ה-URL של בקשת ה-API מתחיל ב-basepath, יכול להיות ש-path suffix(החלק שמופיע אחריbasepath) שצוין בהודעת השגיאה לא תואם לאף אחד מהזרימות המותנות, וזה יכול לגרום לשגיאה404. - כדי להסביר את זה, נשתמש בדוגמה:
- ה-
basepathשל ה-proxy ל-API המיועד הוא/weather - כתובת ה-URL של בקשת ה-API היא
https://myorg-prod.apigee.net/weather/Delhi. כלומר, הנתיב שמשמש בכתובת ה-URL של בקשת ה-API הוא/weather/Delhi.
- ה-
- בדוגמה הזו,
pathמתחיל ב-basepath/weather. בנוסף, יש לוpath suffixשל/Delhi. - עכשיו בודקים אם יש תהליכים מותנים ב-
ProxyEndpoint. - אם אין תהליכים מותנים או שיש כמה תהליכים לא מותנים, עוברים לסיבה הבאה – proxy ל-API לא נפרס בסביבה.
- אם ב-
ProxyEndpointיש רק תהליכים מותנים, צריך לבדוק את הדברים הבאים:- אם התנאים בכל זרימות התנאים האלה בודקים
proxy.pathsuffix(הנתיב אחרי נתיב הבסיס). - אם
path suffixשצוין בכתובת ה-URL של בקשת ה-API לא תואם לאף אחד מהתנאים, זו הסיבה לשגיאה.
- אם התנאים בכל זרימות התנאים האלה בודקים
- נניח שיש לנו שני תהליכים ב-
ProxyEndpointושניהם תהליכים מותנים, כמו בדוגמה הבאה:<Condition>(proxy.pathsuffix MatchesPath "/Bangalore") and (request.verb = "GET")</Condition> <Condition>(proxy.pathsuffix MatchesPath "/Chennai") and (request.verb = "GET")</Condition>
- בדוגמה שלמעלה יש שני זרימות מותנות. אחת מתאימה ל-
proxy.pathsuffix(הנתיב אחרי נתיב הבסיס) ל-/Bangalore, והשנייה מתאימה ל-/Chennai. אבל אף אחת מהן לא תואמת ל-/Delhiשהיאpath suffixשמועברת בכתובת ה-URL של בקשת ה-API. - זו הסיבה לשגיאה
404. לכן תופיע השגיאה הבאה:{ "fault":{ "faultstring":"Unable to identify proxy for host: secure and url: \/weather\/Delhi", "detail":{ "errorcode":"messaging.adaptors.http.flow.ApplicationNotFound" } } }
- בדוגמה שלמעלה יש שני זרימות מותנות. אחת מתאימה ל-
רזולוציה
- מוודאים שהערך של
path suffixתואם לפחות לאחד מהזרימות המותנות בנקודת הקצה של ה-proxy. - בדוגמה שלמעלה, אפשר להשתמש באחת מהגישות הבאות כדי לפתור את השגיאה:
- אם רוצים להפעיל קבוצה ספציפית של כללי מדיניות עבור הנתיב
/Delhi, צריך להוסיף זרימה נפרדת עם קבוצת כללי המדיניות הנדרשת ולוודא שיש תנאי שמתאים ל-/proxy.pathsuffix/Delhi, כמו שמוצג בהמשך:<Condition>(proxy.pathsuffix MatchesPath "/Delhi") and (request.verb = "GET")</Condition>
- אם רוצים להפעיל קבוצה משותפת של מדיניות עבור הנתיב
/Delhi, צריך לוודא שבזרימה המשותפת יש תנאי שמאפשר/proxy.pathsuffixכללי. כלומר, הוא יאפשר כל נתיב אחריbasepath/weatherכמו שמוצג בהמשך:<Condition>(proxy.pathsuffix MatchesPath "/**") and (request.verb = "GET")</Condition>
- אם רוצים להפעיל קבוצה ספציפית של כללי מדיניות עבור הנתיב
אם ProxyEndpoint מכיל את basepath הנכון ו-path suffix שצוין בכתובת ה-URL של ה-API תואם לאחד מהזרימות המותנות, עוברים לגורם הבא – proxy ל-API לא נפרס בסביבה.
הסיבה: proxy ל-API לא נפרס בסביבה
אבחון
- קובעים את הסביבה שבה קיים כינוי המארח שמשמש בכתובת ה-URL של בקשת ה-API.
אפשר לעשות את זה על ידי בדיקת הפרטים של כל המארחים הווירטואליים בכל הסביבות של הארגון בממשק המשתמש של Edge.
לדוגמה, נניח את ההגדרה הבאה:
- אם
http://myorg-prod.apigee.net/weatherהיא כתובת ה-URL שלכם, אזmyorg-prod.apigee.netהוא הכינוי של המארח. - כינוי המארח
myorg-prod.apigee.netמוגדר כחלק מאחד המארחים הווירטואליים בסביבתprodשל הארגון.
- אם
- בודקים אם proxy ל-API הספציפי נפרס בסביבה הספציפית שנקבעה בשלב 1 למעלה.
- אם proxy ל-API לא נפרס בסביבה הספציפית, זו הסיבה לשגיאה
404.- לכן, בדוגמה שמופיעה בשלב 1 למעלה, נניח ששרת ה-proxy ל-API לא נפרס בסביבת
prod, אז זו הסיבה לשגיאה. - עוברים לקטע פתרון בהמשך.
- לכן, בדוגמה שמופיעה בשלב 1 למעלה, נניח ששרת ה-proxy ל-API לא נפרס בסביבת
- אם proxy ל-API נפרס בסביבה הספציפית, צריך לעבור לסיבה הבאה – הסביבה לא נטענה במעבדי בקשות.
רזולוציה
פורסים את proxy ל-API בסביבה הספציפית שבה רוצים לשלוח בקשות API.
הסיבה: הסביבה לא נטענה במעבדי ההודעות
אבחון
- מתחברים לכל אחד ממעבדי ההודעות ובודקים אם הסביבה הספציפית שבה מבוצעת בקשת ה-API נטענת במעבד ההודעות באמצעות הפקודה הבאה:
curl -v 0:8082/v1/runtime/organizations/<orgname>/environments
- אם הסביבה הספציפית מופיעה כחלק מהפקודה שלמעלה, צריך לעבור לסיבה הבאה – proxy ל-API לא נפרס באחד או יותר ממעבדי הבקשות.
- אם הסביבה הספציפית לא מופיעה ברשימה, צריך לבדוק את
/opt/apigee/var/log/edge-message-processor/logs/system.logואת/opt/apigee/var/log/edge-message-processor/logs/startupruntimeerrors.logבמעבדי ההודעות כדי לראות אם יש שגיאות במהלך טעינת הסביבות. - יכולות להיות הרבה שגיאות שונות שעלולות לגרום לטעינת סביבה שנכשלה במעבד ההודעות. הפתרון תלוי בשגיאה שהתרחשה.
רזולוציה
יכולות להיות הרבה סיבות לכך שהסביבה לא נטענת במעבד ההודעות. בקטע הזה אנחנו מציגים כמה סיבות אפשריות לבעיה ומסבירים איך לפתור אותה.
-
אם אחת מהשגיאות הבאות מופיעה ביומן של Message Processor, הבעיה היא באישור או במפתחות שנוספו למאגר המפתחות או למאגר האישורים שצוינו בסביבה שצוינה.
שגיאה מספר 1: java.security.KeyStoreException: Cannot overwrite own certificate
2018-01-30 12:04:38,248 pool-47-thread-4 ERROR MESSAGING.RUNTIME - AbstractConfigurator.propagateEvent() : Error while handling the update for the Configurator com.apigee.kernel.exceptions.spi.UncheckedException: Failed to add certificate : mycert in key store : mytruststore in environment : test at com.apigee.entities.configurators.KeyStore.setCertificateEntry(KeyStore.java:156) ~[config-entities-1.0.0.jar:na] at com.apigee.entities.configurators.KeyStore.handleUpdate(KeyStore.java:101) ~[config-entities-1.0.0.jar:na] at com.apigee.entities.AbstractConfigurator.propagateEvent(AbstractConfigurator.java:85) ~[config-entities-1.0.0.jar:na] at com.apigee.messaging.runtime.Environment.handleUpdate(Environment.java:238) [message-processor-1.0.0.jar:na] … Caused by: java.security.KeyStoreException: Cannot overwrite own certificate at com.sun.crypto.provider.JceKeyStore.engineSetCertificateEntry(JceKeyStore.java:355) ~[sunjce_provider.jar:1.8.0_151] at java.security.KeyStore.setCertificateEntry(KeyStore.java:1201) ~[na:1.8.0_151] at com.apigee.entities.configurators.KeyStore.setCertificateEntry(KeyStore.java:153) ~[config-entities-1.0.0.jar:na]
... 20 common frames omitted2018-01-30 12:04:38,250 pool-47-thread-4 ERROR MESSAGING.RUNTIME - AbstractConfigurator.rollbackTransaction() : Error in processing the changes : Unknown resource type cert
שגיאה מספר 2: java.security.KeyStoreException: אי אפשר להחליף מפתח סודי
2017-11-01 03:28:47,560 pool-21-thread-7 ERROR MESSAGING.RUNTIME - AbstractConfigurator.propagateEvent() : Error while handling the update for the Configurator com.apigee.kernel.exceptions.spi.UncheckedException: Failed to add certificate : mstore in key store : myTruststore in environment : dev at com.apigee.entities.configurators.KeyStore.setCertificateEntry(KeyStore.java:156) ~[config-entities-1.0.0.jar:na] at com.apigee.entities.configurators.KeyStore.handleUpdate(KeyStore.java:101) ~[config-entities-1.0.0.jar:na] ... Caused by: java.security.KeyStoreException: Cannot overwrite secret key at com.sun.crypto.provider.JceKeyStore.engineSetCertificateEntry(JceKeyStore.java:354) ~[sunjce_provider.jar:1.8.0_144] at java.security.KeyStore.setCertificateEntry(KeyStore.java:1201) ~[na:1.8.0_144] at com.apigee.entities.configurators.KeyStore.setCertificateEntry(KeyStore.java:153) ~[config-entities-1.0.0.jar:na] ... 20 common frames omitted 2017-11-01 03:28:47,562 pool-21-thread-7 ERROR MESSAGING.RUNTIME - AbstractConfigurator.rollbackTransaction() : Error in processing the changes : Unknown resource type cert
- כדי לקבל את הפרטים של מאגר המפתחות או מאגר האישורים שצוינו בהודעת השגיאה שמופיעה בשלב הקודם, משתמשים בקריאה הבאה ל-Management API:
curl -v "http://<management-IPaddress>:8080/v1/organizations/<org-name>/environments/<env-name>/keystores/myTruststore" -u <user>
פלט לדוגמה:
{ "certs":[ "mycert", "mycert-new" ], "keys":[ "mycert" ], "name":"myTruststore" } - בדוגמה של הפלט אפשר לראות שיש שני אישורים ומפתח במאגר האישורים
myTruststore. בדרך כלל, מאגר האישורים לא מכיל מפתח. אם כן, עדיף להשתמש באישור אחד ובמפתח אחד. - אפשר לקבל את הפרטים של שני האישורים באמצעות ה-API הבא:
curl -s http://<management-IPaddress>:8080/v1/runtime/organizations/<org-name>/environments/<env-name>/keystores/<keystore-name>/certs/<cert-name>
- בודקים את תאריך התפוגה של כל אחד מהאישורים ומזהים את האישור שתוקפו פג או שהוא ישן יותר.
- מוחקים את האישור שפג תוקפו או שאתם לא רוצים אותו ממאגר האישורים
myTruststore.
אם הבעיה נמשכת או אם מופיעה שגיאה אחרת מלבד השגיאות שצוינו בשלב 1 למעלה, צריך לעבור אל איסוף מידע לצורך אבחון.
הסיבה: ה-proxy ל-API לא נפרס במעבד בקשות אחד או יותר
יכול להיות ש-proxy ל-API לא נפרס במעבד בקשות אחד או יותר. הבעיה הזו מתרחשת לעיתים רחוקות מאוד, והיא נובעת בעיקר מהתראה לגבי אירוע חסרה משרת הניהול למעבד בקשות במהלך הפריסה של proxy ל-API הספציפי. גם במקרה הזה, לא תוכלו ליצור את סשן המעקב בממשק המשתמש של Edge.
אבחון
- מתחברים לכל אחד ממעבדי הבקשות ובודקים אם הגרסה הספציפית של proxy ל-API נפרסה או לא באמצעות הפקודה הבאה:
curl -v 0:8082/v1/runtime/organizations/<orgname>/environments/<envname>/apis/<apiname>/revisions
- אם הגרסה הספציפית של proxy ל-API לא מופיעה כפלט של הפקודה שצוינה בשלב 1 למעלה, צריך להפעיל מחדש את מעבד בקשות הספציפי כפי שמוסבר בפתרון.
- חוזרים על שלבים 1-2 לכל מעבדי ההודעות.
- אם הגרסה הספציפית של proxy ל-API נפרסה בכל מעבדי הבקשות, אז זו לא הסיבה לבעיה הזו. עוברים אל Must gather diagnostic information (חובה לאסוף נתוני אבחון).
רזולוציה
מפעילים מחדש את מעבדי הבקשות הספציפיים שבהם לא נפרסה הגרסה הספציפית של proxy ל-API.
/opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
אבחון בעיות באמצעות 'מעקב אחר API'
מעקב אחר API מאפשר לכם לבודד במהירות אזורים בעייתיים כדי לאבחן בעיות שקשורות לשגיאות, לביצועים ולזמן האחזור, ולמקור שלהן, כמו אפליקציות למפתחים, שרתי proxy של API, יעדי קצה או פלטפורמת ה-API.
כדי לפתור את הבעיה הזו, אפשר לעבור לדף API Monitoring > Investigate, לבחור את התאריך המתאים, את השרת הפרוקסי וכו', ולראות את הפרטים הבאים:
- קוד תקלה:
messaging.adaptors.http.flow.ApplicationNotFound - קוד סטטוס:
404 - מקור התקלה:
ApigeeאוMP
בנוסף, אפשר ללחוץ על הצגת יומנים כמו שמוצג בצילום המסך שלמעלה, ולבדוק לעומק.

בשלבים של תרחיש לדוגמה מוסבר איך לפתור בעיות5xx ב-API באמצעות API Monitoring. לדוגמה, יכול להיות שתרצו להגדיר התראה שתשלח לכם הודעה כשהמספר של 404 קודי סטטוס יעבור סף מסוים.
צריך לאסוף פרטי אבחון
אם הבעיה נמשכת גם אחרי שמבצעים את ההוראות שלמעלה, צריך לאסוף את פרטי האבחון הבאים. צריך ליצור קשר עם התמיכה של Apigee Edge ולשתף איתם את הפרטים האלה.
- אם אתם משתמשים ב-Public Cloud, עליכם לספק את הפרטים הבאים:
- שם הארגון
- שם הסביבה
- שם ה-proxy ל-API
- השלמת פקודת curl לשחזור השגיאה
- אם אתם משתמשים ב-Private Cloud, עליכם לספק את הפרטים הבאים:
- הודעת השגיאה המלאה שזוהתה
- שם הסביבה
- חבילת proxy ל-API
- יומנים של מעבד בקשות
/opt/apigee/var/log/edge-message-processor/logs/system.log - פלט של הפקודות הבאות בכל אחד ממעבדי ההודעות.
curl -v 0:8082/v1/runtime/organizations/<orgname>/environments
curl -v 0:8082/v1/runtime/organizations/<orgname>/environments/<envname>/apis/<apiname>/revisions - פרטים על החלקים בחוברת ההדרכה הזו שניסית להשתמש בהם וכל תובנה אחרת שתעזור לנו לפתור את הבעיה במהירות.