פתרון בעיות של שגיאות בזמן ריצה במדיניות Spike Arrest

אתם צופים במסמכי התיעוד של Apigee ושל Apigee Hybrid.
לעיון במסמכי התיעוד של Apigee Edge.

InvalidMessageWeight

קוד שגיאה

policies.ratelimit.InvalidMessageWeight

גוף התשובה לשגיאה

{
    "fault": {jdoe
        "faultstring": "Invalid message weight value [invalid_value]",
        "detail": {
            "errorcode": "policies.ratelimit.InvalidMessageWeight"
        }
    }
}

הודעת שגיאה לדוגמה

{
    "fault": {
        "faultstring": "Invalid message weight value 1.5",
        "detail": {
            "errorcode": "policies.ratelimit.InvalidMessageWeight"
        }
    }
}

מטרה

השגיאה הזו מתרחשת אם הערך שצוין לרכיב <MessageWeight> באמצעות משתנה של זרימת נתונים לא תקין (ערך לא שלם).

לדוגמה, אם הערך של משתנה הזרימה שצוין לרכיב <MessageWeight> הוא 1.5 (ערך לא שלם), השגיאה תתרחש.

אבחון

  1. מזהים את הערך הלא חוקי שמשמש לרכיב <MessageWeight> במדיניות Spike Arrest. המידע הזה מופיע ברכיב faultstring של תגובת השגיאה. לדוגמה, בשגיאה הבאה, הערך הלא תקין שמשמש לרכיב <MessageWeight> הוא 1.5:

    "faultstring": "Invalid message weight value 1.5"
    
  2. בודקים את כל כללי המדיניות של Spike Arrest ב-API Proxy הספציפי שבו התרחשה השגיאה. יכול להיות שיש מדיניות אחת או יותר של Spike Arrest שבהן מצוין הרכיב <MessageWeight>.

    לדוגמה, במדיניות הבאה מצוין הערך של <MessageWeight> באמצעות משתנה של זרימת נתונים שנקרא message_weight:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
        <SpikeArrest async="false" continueOnError="false" enabled="true" name="SpikeArrest_AuthProxy">
        <DisplayName>SpikeArrest_AuthProxy</DisplayName>
        <Properties/>
        <Identifier ref="request.header.some-header-name"/>
        <Rate>100ps</Rate>
        <MessageWeight ref="message_weight"/>
    </SpikeArrest>
    
  3. קובעים את הערך של המשתנה שמשמש ברכיב <MessageWeight> של מדיניות Spike Arrest שזוהתה. אפשר לחלץ את הערך של משתנה הזרימה מכותרות HTTP, מפרמטרים של שאילתות, ממטען ייעודי (payload) של בקשת XML או JSON, או להגדיר אותו במדיניות אחרת.

    1. מאתרים את הקוד ב-proxy ל-API, שבו הוגדר המשתנה לראשונה.
    2. אחרי שמגלים באיזו מדיניות המשתנה מוגדר ומאוכלס לראשונה, בודקים איך הערך של המשתנה מוגדר.
    3. אם הערך של משתנה הזרימה תואם לערך שזוהה בשלב 1 למעלה, זהו הגורם לשגיאה.

    לדוגמה, נניח שמשתמשים במדיניות JavaScript לפני מדיניות Spike Arrest כדי להגדיר את המשתנה message_weight על סמך שיטת הבקשה, כמו שמוצג בהמשך:

    var verb = context.getVariable("request.verb");
    context.setVariable("message_weight", "1.5");
    if (verb == 'POST') {
      context.setVariable("message_weight", "2");
    }
    

    שימו לב שהערך של המשתנה message_weight הוא 1.5, שהוא ערך לא תקין (לא מספר שלם).

רזולוציה

מוודאים שהערך של הרכיב MessageWeight הוא ערך תקין (מספר שלם).

כדי לתקן את הדוגמה שמוצגת למעלה, אפשר לשנות את הערך של המשתנה message_weight ב-JavaScript כך שיהיה מספר שלם:

var verb = context.getVariable("request.verb");
context.setVariable("message_weight", "1");
if (verb == 'POST') {
  context.setVariable("message_weight", "2");
}

FailedToResolveSpikeArrestRate

קוד שגיאה

policies.ratelimit.FailedToResolveSpikeArrestRate

גוף התשובה לשגיאה

{
    "fault": {
        "faultstring": "Failed to resolve Spike Arrest Rate reference [reference] in SpikeArrest policy [api_policy]",
        "detail": {
            "errorcode": "policies.ratelimit.FailedToResolveSpikeArrestRate"
        }
    }
}

הודעת שגיאה לדוגמה

{
    "fault": {
        "faultstring": "Failed to resolve Spike Arrest Rate reference request.header.rate in SpikeArrest policy SpikeArrest_AuthProxy",
        "detail": {
            "errorcode": "policies.ratelimit.FailedToResolveSpikeArrestRate"
        }
    }
}

מטרה

השגיאה הזו מתרחשת אם אי אפשר לפתור את ההפניה למשתנה שמכיל את הגדרת התעריף ברכיב <Rate> לערך במדיניות Spike Arrest. זהו רכיב חובה שמשמש לציון שיעור ההגנה מפני עלייה חדה בשימוש בתבנית {int}pm או {int}ps. לדוגמה, {int}pm יכול להיות 500pm, כלומר 500 שיחות בדקה. באופן דומה, ערך של 10ps מציין 10 שיחות בשנייה.

אבחון

  1. מזהים את מדיניות Spike Arrest שבה התרחשה השגיאה ואת שם ההפניה שלא ניתן לפתור כמו שצריך. אפשר למצוא את שני הפריטים האלה ברכיב faultstring של תגובת השגיאה.

    לדוגמה, במחרוזת השגיאה הבאה, שם המדיניות הוא SpikeArrest_AuthProxy וההפניה היא request.header.rate:

    "faultstring": "Failed to resolve Spike Arrest Rate reference request.header.rate in SpikeArrest policy SpikeArrest_AuthProxy"
    
  2. ב-XML של מדיניות Spike Arrest שנכשלה, מוודאים שהשם של ההפניה שבה נעשה שימוש זהה לשם ההפניה שזוהה במחרוזת השגיאה (שלב 1 למעלה). ** **

    לדוגמה, במדיניות הבאה מוגדר רכיב עם ההפניה בשם request.header.rate, שתואמת למה שמופיע ב-faultstring:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
        <SpikeArrest async="false" continueOnError="false" enabled="true" name="SpikeArrest_AuthProxy">
        <DisplayName>SpikeArrest_AuthProxy</DisplayName>
        <Properties/>
        <Identifier ref="request.header.some-header-name"/>
        <Rate ref="request.header.rate"/>
    </SpikeArrest>
    
    
  3. בודקים אם המשתנה מוגדר וזמין בתהליך שבו מופעלת מדיניות Spike Arrest.

  4. אם המשתנה הוא:

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

    אז זו הסיבה לשגיאה.

    בדוגמה שמוצגת למעלה, הערך של שיעור העלייה הפתאומי ב-element‏ <Rate> אמור להישלף מכותרת הבקשה שנקראת rate. עם זאת, Apigee לא יכול לפתור את request.header.rate. השגיאה הזו מתרחשת אם הכותרת rate לא מועברת כחלק מבקשת ה-API.

    לפניכם בקשת API לדוגמה שלא כוללת את הכותרת rate כחלק מהבקשה:

      curl -v http://your_host_alias/check_spikearrest -H "Content-Type: application/json"
    

    כאשר your_host_alias הוא דומיין שפונה לציבור ומשמש לגישה לממשקי ה-API, כפי שהוגדר במאפיין virtualhosts.hostAliases בקובץ ההחלפות. איך מציינים שינויים בהגדרות

    הכותרת rate לא מועברת כחלק מהבקשה, ולכן ההפניה request.header.rate שמשמשת ברכיב <Rate> במדיניות Spike Arrest שלמעלה לא מוגדרת, ולכן אי אפשר לפתור אותה. לכן תקבלו את קוד השגיאה:

    policies.ratelimit.FailedToResolveSpikeArrestRate
    

רזולוציה

צריך לוודא שהמשתנה שאליו יש הפניה ברכיב <Rate> קיים או מוגדר וזמין בתהליך הספציפי שבו מופעלת מדיניות Spike Arrest.

כדי לתקן את הדוגמה שמוצגת למעלה, אפשר לשנות את הבקשה כך שתכלול את הכותרת rate כמו בדוגמה הבאה:

curl -v  http://your_host_alias/check_spikearrest -H "Content-Type: application/json" -H "rate:30ps"

כאשר your_host_alias הוא דומיין שפונה לציבור ומשמש לגישה לממשקי ה-API, כפי שהוגדר במאפיין virtualhosts.hostAliases בקובץ ההחלפות. איך מציינים שינויים בהגדרות