Rozwiązywanie problemów z błędem zasad dotyczących Spike Arrest

Wyświetlasz dokumentację Apigee Edge.
Otwórz dokumentację Apigee X.
info

InvalidMessageWeight

Kod błędu

policies.ratelimit.InvalidMessageWeight

Treść odpowiedzi na błąd

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

Przykładowy komunikat o błędzie

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

Przyczyna

Ten błąd występuje, jeśli wartość określona dla elementu <MessageWeight> za pomocą zmiennej przepływu jest nieprawidłowa (wartość niebędąca liczbą całkowitą).

Jeśli na przykład wartość zmiennej przepływu określonej dla elementu <MessageWeight> jest równa 1, 5 (wartość niecałkowita), wystąpi błąd.

Diagnostyka

  1. Określ nieprawidłową wartość używaną w elemencie <MessageWeight> w zasadach SpikeArrest. Te informacje znajdziesz w elemencie faultstring odpowiedzi na błąd. Na przykład w tym błędzie nieprawidłowa wartość użyta w elemencie <MessageWeight> to 1.5:

    "faultstring": "Invalid message weight value 1.5"
    
  2. Sprawdź wszystkie zasady Spike Arrest w konkretnym serwerze proxy interfejsu API, w którym wystąpił błąd. Może istnieć co najmniej 1 zasada ochrony przed nagłymi wzrostami, w której określony jest element <MessageWeight>.

    Na przykład ta zasada określa wartość <MessageWeight> za pomocą zmiennej przepływu o nazwie 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. Określ wartość zmiennej użytej w elemencie <MessageWeight> zidentyfikowanych zasad ochrony przed nagłymi wzrostami. Wartość zmiennej przepływu można wyodrębnić z nagłówków HTTP, parametrów zapytania, ładunku żądania XML lub JSON albo zdefiniować w innych zasadach.

    1. Znajdź w proxy interfejsu API kod, w którym zmienna została zdefiniowana po raz pierwszy.
    2. Gdy ustalisz, w której zasadzie zmienna jest zdefiniowana i wypełniana jako pierwsza, sprawdź, jak ustawiana jest jej wartość.
    3. Jeśli wartość zmiennej przepływu jest zgodna z wartością określoną w kroku 1 powyżej, to jest to przyczyna błędu.

    Załóżmy na przykład, że przed zasadą Spike Arrest używana jest zasada JavaScript, która ustawia zmienną message_weight na podstawie metody żądania, jak pokazano poniżej:

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

    Zwróć uwagę, że wartość zmiennej message_weight to 1.5, czyli nieprawidłowa wartość (nie jest liczbą całkowitą).

Rozdzielczość

Sprawdź, czy wartość elementu MessageWeight jest prawidłowa (wartość całkowita).

Aby poprawić powyższy przykład, możesz zmodyfikować wartość zmiennej message_weight w JavaScript tak, aby była liczbą całkowitą:

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

FailedToResolveSpikeArrestRate

Kod błędu

policies.ratelimit.FailedToResolveSpikeArrestRate

Treść odpowiedzi na błąd

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

Przykładowy komunikat o błędzie

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

Przyczyna

Ten błąd występuje, jeśli odwołanie do zmiennej zawierającej ustawienie limitu w elemencie <Rate> nie może zostać rozwiązane na wartość w ramach zasady Spike Arrest. Ten element jest wymagany i służy do określania szybkości zatrzymania nagłego wzrostu w postaci {int}pm lub {int}ps. Na przykład {int}pm może mieć wartość 500pm, co oznacza 500 połączeń na minutę. Podobnie wartość 10ps oznacza 10 wywołań na sekundę.

Diagnostyka

  1. Określ zasadę Spike Arrest, w której wystąpił błąd, oraz nazwę odwołania, którego nie można prawidłowo rozpoznać. Oba te elementy znajdziesz w elemencie faultstring odpowiedzi na błąd.

    Na przykład w tym ciągu błędów nazwa zasady to SpikeArrest_AuthProxy, a odwołanie to request.header.rate:

    "faultstring": "Failed to resolve Spike Arrest Rate reference request.header.rate in SpikeArrest policy SpikeArrest_AuthProxy"
    
  2. W pliku XML nieudanej zasady Spike Arrest sprawdź, czy nazwa użytego odwołania jest zgodna z nazwą odwołania podaną w ciągu błędu (krok 1 powyżej). ** **

    Na przykład te zasady ustawiają element z odwołaniem o nazwie request.header.rate, które pasuje do ciągu 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. Sprawdź, czy zmienna jest zdefiniowana i dostępna w przepływie, w którym wykonywana jest zasada Spike Arrest.

  4. Jeśli zmienna ma wartość:

    • poza zakresem (niedostępne w określonym procesie, w którym zasada jest wykonywana) lub
    • nie można rozstrzygnąć (nie jest zdefiniowana)

    wtedy to jest przyczyną błędu.

    W przykładzie powyżej wartość współczynnika zatrzymania nagłego wzrostu w elemencie <Rate> ma być pobierana z nagłówka żądania o nazwie rate. Edge nie może jednak rozpoznać wartości request.header.rate. Dzieje się tak, jeśli nagłówek rate nie jest przekazywany w ramach żądania do interfejsu API.

    Oto przykładowe żądanie interfejsu API, które nie przekazuje nagłówka rate w ramach żądania:

        curl -v http://jdoe-eval-test.apigee.net/check_spikearrest -H "Content-Type: application/json"
    

    Nagłówek rate nie jest przekazywany w ramach żądania, więc odwołanie request.header.rate użyte w elemencie <Rate> w powyższej zasadzie Spike Arrest jest niezdefiniowane i nie można go rozpoznać. Otrzymasz więc kod błędu:

    policies.ratelimit.FailedToResolveSpikeArrestRate
    

Rozdzielczość

Sprawdź, czy zmienna, do której odwołuje się element <Rate>, istnieje lub jest zdefiniowana i dostępna w danym przepływie, w którym wykonywana jest zasada Spike Arrest.

Aby poprawić przykład pokazany powyżej, możesz zmodyfikować żądanie, dodając nagłówek rate, jak pokazano poniżej:

curl -v  http://jdoe-eval-test.apigee.net/check_spikearrest -H "Content-Type: application/json" -H "rate:30ps"