מה צריך לדעת על שגיאות שקשורות למדיניות

אתם מציגים את מסמכי התיעוד של Apigee Edge.
כניסה למסמכי העזרה של Apigee X.
info

בנושא הזה מתוארים המבנה של שגיאות מדיניות והסוגים של משתני תהליך שמוגדר כשמתרחשת שגיאת מדיניות. המידע הזה חיוני אם אתם מתכננים ומטמיעים טיפול בכשלים בשרתים שלכם.

הנושא הזה מבוסס על ההנחה שיש לכם הבנה כללית לגבי אופן הטיפול בתקלות ב-Edge, ושאתם יודעים מהם כללי הפגמים. אם אתם צריכים בדיקה, תוכלו לעיין במאמר טיפול בכשלים. המידע הזה יעזור לכם גם לנווט בחומר העזר בנושא שגיאות שקשורות למדיניות ולהשתמש בו.

מידע על תגובת השגיאה שמוגדרת כברירת מחדל במדיניות

כשמדיניות מסוימת גורמת לשגיאה, Edge נכנס מיד לתהליך הטיפול בשגיאה ויוצר הודעת שגיאה. ההודעה הזו שנוצרת על ידי המערכת היא אובייקט JSON שכולל שני קטעי מידע: errorcode ו-faultstring.

לדוגמה:

{  
   "fault":{  
      "detail":{  
         "errorcode":"steps.extractvariables.SourceMessageNotAvailable"
      },
      "faultstring":"foo message is not available for ExtractVariable: ParseJsonResponse"
   }
}

נפרק במהירות את הודעת השגיאה הזו:

קוד השגיאה מורכב מקידומת ומשם שגיאה, באופן הבא: [prefix].[error_name]. בדוגמה שלמעלה, "steps.extractvariables" הוא התחילית ו-SourceMessageNotAvailable הוא שם השגיאה. הקידומת מציינת איזה סוג מדיניות גרמה לשגיאה. בדוגמה שלמעלה, אפשר לראות שהמדיניות של Extract Variables יצרה את השגיאה וששם השגיאה הוא SourceMessageNotAvailable.

faultstring מכיל תיאור של השגיאה. מחרוזת הטעות כוללת בדרך כלל רמזים שיעזרו לכם למצוא בעיה ספציפית שגרמה לשגיאה, כמו שם המדיניות, שם של משתנה שלא טופל או מה שתרמה לשגיאה. לדוגמה, בהודעת השגיאה שלמעלה, "foo" הוא השם של משתנה הודעה לא פתור שיש אליו הפניה במדיניות, ו-"ParseJsonResponse" הוא שם המדיניות שהפעילה את השגיאה.

משתנים ספציפיים לשגיאות שקשורות למדיניות

כאשר מופעלת שגיאה שקשורה למדיניות, משתני זרימה מסוימים שספציפיים לשגיאות מאוכלסים. המשתנים האלה שימושיים מאוד לטיפול בתקלות. כמו שמוסבר בנושא טיפול בתקלות, מקובל לתעד את שגיאות המדיניות שנוצרות על ידי המערכת ולבצע פעולה נוספת, למשל כדי ליצור תשובה מותאמת אישית לשגיאה. לדוגמה, מטעמי אבטחה, ייתכן שתרצו למנוע מלקוחות לראות את השגיאות ואת קודי הסטטוס ש-Edge מחזיר בפועל.

המשתנה fault.name

כשמדיניות מקפיצה שגיאה, היא מגדירה את משתנה הזרימה fault.name לחלק error_name של קוד השגיאה (כפי שמתואר בקטע הקודם). מקובל מאוד להעריך את המשתנה הזה כדי להפעיל כללי כשל באופן מותנה.

זוהי דוגמה לכלל תקלה שבודק את הערך של fault.name:

<faultrule name="VariableOfNonMsgType"<>/faultrule><FaultRule name="Source Message Not Available Fault">
    <Step>
        <Name>AM-CustomErrorMessage</Name>
        <Condition>(fault.name Matches "SourceMessageNotAvailable") </Condition>
    </Step>
</FaultRule>

חשוב לזכור: כשמדיניות מפעילה שגיאה, המשתנה fault.name מוגדר תמיד לשם השגיאה.

המשתנה [prefix].[policy_name].failed

בנוסף למשתנה fault.name, משתנה נוסף שמפתחים בודקים לעיתים קרובות הוא הדגל [prefix].[policy_name].failed, שמוגדר כ-true או כ-false כשמדיניות מסוימת מופעלת. בכללי השגיאה, צריך לבדוק מתי הערך true – כלומר, מתי אירעה שגיאה. כך יוצרים תנאי שבודק את הדגל [prefix].[policy_name].failed. כדי לבדוק נכון את המשתנה הזה, צריך לדעת שני דברים:

  • שם המדיניות שבודקים. זהו הערך של מאפיין השם של המדיניות, ולא של השם המוצג. המאפיין הזה תמיד נכלל ב-XML של הגדרת המדיניות.
  • קידומת שהיא ספציפית לסוג המדיניות שבודקים. (בהמשך נסביר איך למצוא את הקידומת).

כדי להמחיש, הנה דוגמה נוספת לכלל תקלה. שימו לב לדרך שבה שם המשתנה [prefix].[policy_name].failed נוצר בתנאים החיצוניים. במקרה הזה, התחילית היא extractvariables ושם המדיניות הוא ParseJsonResponse. במקרה כזה, כלל השגיאה יבוצע רק אם המשתנה הזה יהיה true. טיפ: כללי הכשלים יכולים להכיל מספר שלבים, ולכן הדפוס הזה הוא דרך טובה לארגן את כללי הכשלים בבלוקים.

<faultrule name="VariableOfNonMsgType"></faultrule><FaultRule name="Extract Variable Faults">
    <Step>
        <Name>AM-CustomErrorMessage</Name>
        <Condition>(fault.name Matches "SourceMessageNotAvailable") </Condition>
    </Step>
    <Condition>(extractvariables.ParseJsonResponse.failed = true) </Condition>
</FaultRule>

מידע על המשתנים error ו-message

המשתנה error זמין רק בתהליך השגיאה של שרת proxy. אפשר לקבל מידע שימושי ממשתנה השגיאה, כמו הודעת השגיאה, קוד הסטטוס, ביטוי הסיבה וכו'. תבנית הפורמט של משתנה השגיאה היא:

error.[error_component] = [value]

לדוגמה:

error.message = "request message is not available for ExtractVariable: ParseJsonResponse אינץ'

וגם

error.status.code = "500"

המשתנה message זמין גם בתהליך השגיאה ואפשר להשתמש בו למטרות דומות כמו המשתנה error. המשתנה של ההודעה הוא מיוחד כי הוא לפי הקשר. בתהליך הבקשה הוא פועל כמו משתנה בקשה, ובתהליך התגובה אפשר להשתמש בו כדי לקבל/להגדיר ערכי תגובה. מידע נוסף זמין במאמר תרחישים לדוגמה למשתני הודעות.

בחומר העזר בנושא משתנים תוכלו לקרוא מידע על כל המשתנים של Edge, כולל error ו-message.