Risoluzione degli errori di runtime dei criteri di Spike Arrest

Stai visualizzando la documentazione di Apigee Edge.
Vai alla documentazione di Apigee X.
informazioni

InvalidMessageWeight

Codice di errore

policies.ratelimit.InvalidMessageWeight

Corpo della risposta all'errore

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

Esempio di messaggio di errore

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

Causa

Questo errore si verifica se il valore specificato per l'elemento <MessageWeight> tramite una variabile di flusso non è valido (un valore non intero).

Ad esempio, se il valore della variabile di flusso specificata per l'elemento <MessageWeight> è 1,5 (un valore non intero), si verifica l'errore.

Diagnostica

  1. Identifica il valore non valido utilizzato per l'elemento <MessageWeight> nel criterio SpikeArrest. Puoi trovare queste informazioni nell'elemento faultstring della risposta di errore. Ad esempio, nel seguente errore, il valore non valido utilizzato per l'elemento <MessageWeight> è 1.5:

    "faultstring": "Invalid message weight value 1.5"
    
  2. Esamina tutti i criteri di Spike Arrest nello specifico proxy API in cui si è verificato l'errore. Potrebbero essere presenti uno o più criteri di arresto dei picchi in cui viene specificato l'elemento <MessageWeight>.

    Ad esempio, il seguente criterio specifica il valore di <MessageWeight> tramite una variabile di flusso denominata 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. Determina il valore della variabile utilizzata nell'elemento <MessageWeight> dei criteri di arresto anomalo identificati. Il valore della variabile di flusso può essere estratto da intestazioni HTTP, parametri di query, un payload di richiesta XML o JSON oppure definito in un altro criterio.

    1. Individua il codice all'interno del proxy API, dove la variabile è stata definita per prima.
    2. Una volta individuato il criterio in cui la variabile viene definita e completata per prima cosa, controlla come viene impostato il valore della variabile.
    3. Se il valore della variabile di flusso corrisponde al valore identificato nel passaggio 1 sopra, allora questa è la causa dell'errore.

    Ad esempio, supponiamo che un criterio JavaScript venga utilizzato prima del criterio di arresto dei picchi per impostare la variabile message_weight in base al metodo di richiesta, come mostrato di seguito:

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

    Tieni presente che il valore della variabile message_weight è 1.5, che non è valido (un valore non intero).

Risoluzione

Assicurati che il valore dell'elemento MessageWeight sia valido (valore intero).

Per correggere l'esempio mostrato sopra, puoi modificare il valore della variabile message_weight in JavaScript in modo che sia un numero intero:

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

FailedToResolveSpikeArrestRate

Codice di errore

policies.ratelimit.FailedToResolveSpikeArrestRate

Corpo della risposta all'errore

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

Esempio di messaggio di errore

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

Causa

Questo errore si verifica se il riferimento alla variabile contenente l'impostazione della tariffa all'interno dell'elemento <Rate> non può essere risolto in un valore all'interno del criterio di picco dei picchi. Questo elemento è obbligatorio e utilizzato per specificare il tasso di arresto dei picchi di traffico nel formato {int}pm o {int}ps. Ad esempio, {int}pm potrebbe essere 500pm, ossia 500 chiamate al minuto. Analogamente, il valore 10ps indica 10 chiamate al secondo.

Diagnostica

  1. Identifica il criterio di arresto con picchi in cui si è verificato l'errore e il nome del riferimento che non può essere risolto correttamente. Puoi trovare entrambi gli elementi nell'elemento stringa di errore della risposta di errore.

    Ad esempio, nella seguente stringa di errore, il nome del criterio è SpikeArrest_AuthProxy e il riferimento è request.header.rate:

    "faultstring": "Failed to resolve Spike Arrest Rate reference request.header.rate in SpikeArrest policy SpikeArrest_AuthProxy"
    
  2. Nel file XML del criterio di arresto anomalo non riuscito, verifica che il nome del riferimento utilizzato corrisponda al nome del riferimento identificato nella stringa di errore (passaggio 1 riportato sopra). **

    Ad esempio, il seguente criterio imposta l'elemento con il riferimento denominato request.header.rate, che corrisponde al contenuto della stringa di errore:

    <?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. Determina se la variabile è definita e disponibile nel flusso in cui viene eseguito il criterio di arresto di picchi.

  4. Se la variabile è:

    • fuori ambito (non disponibile nel flusso specifico in cui il criterio viene eseguito) o
    • non può essere risolto (non è definito)

    è questa la causa dell'errore.

    Nell'esempio mostrato sopra, il valore del tasso di arresto del picco nell'elemento <Rate> dovrebbe essere recuperato dall'intestazione della richiesta rate. Tuttavia, Edge non è in grado di risolvere il problema request.header.rate. Questo accade se la tariffa dell'intestazione non viene trasmessa come parte della richiesta API.

    Di seguito è riportato un esempio di richiesta API che non passa la tariffa dell'intestazione come parte della richiesta:

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

    Poiché l'intestazione rate non viene trasmessa come parte della richiesta, il riferimento request.header.rate utilizzato nell'elemento <Rate> del precedente criterio SpikeArrest non è definito e pertanto non può essere risolto. Riceverai quindi il codice di errore:

    policies.ratelimit.FailedToResolveSpikeArrestRate
    

Risoluzione

Assicurati che la variabile a cui viene fatto riferimento nell'elemento <Rate> esista/sia definita e disponibile nel flusso specifico in cui viene eseguito il criterio di arresto dei picchi.

Per correggere l'esempio mostrato sopra, puoi modificare la richiesta in modo da includere l'intestazione rate come mostrato di seguito:

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