פתרון בעיות של שגיאות בזמן ריצה של מדיניות 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 למעלה). ** **

    לדוגמה, במדיניות הבאה מוגדר אלמנט <Rate> עם ההפניה בשם 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. אם המשתנה הוא:

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

    אז זה הגורם לשגיאה.

    בדוגמה שמוצגת למעלה, הערך של שיעור עצירת העלייה הפתאומית ברכיב <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 בקובץ ההחלפות. איך מציינים שינויים בהגדרות