Khắc phục lỗi thời gian chạy của chính sách Spike Arrest

Bạn đang xem tài liệu về Apigee Edge.
Chuyển đến Tài liệu về Apigee X.
thông tin

InvalidMessageWeight

Mã lỗi

policies.ratelimit.InvalidMessageWeight

Nội dung phản hồi lỗi

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

Ví dụ về thông báo lỗi

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

Nguyên nhân

Lỗi này xảy ra nếu giá trị được chỉ định cho phần tử <MessageWeight> thông qua biến luồng không hợp lệ (giá trị không phải là số nguyên).

Ví dụ: nếu giá trị của biến luồng được chỉ định cho <MessageWeight> là 1,5 (giá trị không phải số nguyên), thì lỗi sẽ xảy ra.

Chẩn đoán

  1. Xác định giá trị không hợp lệ dùng cho phần tử <MessageWeight> trong Spike Chính sách bắt giữ. Bạn có thể tìm thấy thông tin này trong phần tử faultstring của phần tử của bạn. Ví dụ: trong lỗi sau, giá trị không hợp lệ được sử dụng cho Phần tử <MessageWeight>1.5:

    "faultstring": "Invalid message weight value 1.5"
    
  2. Kiểm tra tất cả chính sách Bắt giữ tăng đột biến trong Proxy API cụ thể mà đã xảy ra lỗi. Có thể có một hoặc nhiều chính sách Bắt giữ tăng đột biến trong đó phần tử <MessageWeight> sẽ được chỉ định.

    Ví dụ: chính sách sau đây chỉ định giá trị của <MessageWeight> thông qua một biến luồng có tên là 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. Xác định giá trị của biến được dùng trong phần tử <MessageWeight> của (các) Chính sách về việc giam giữ tăng đột biến. Giá trị của biến luồng có thể là được trích xuất từ các tiêu đề HTTP, tham số truy vấn, tải trọng yêu cầu XML hoặc JSON, hoặc được xác định trong chính sách khác.

    1. Tìm mã trong proxy API, nơi biến được xác định đầu tiên.
    2. Khi bạn tìm ra chính sách mà trong đó biến được xác định và trước tiên, hãy kiểm tra cách đặt giá trị cho biến.
    3. Nếu giá trị của biến flow khớp với giá trị được xác định ở Bước #1 ở trên, thì đó là nguyên nhân gây ra lỗi.

    Ví dụ: giả sử một chính sách JavaScript được sử dụng trước Chính sách ngăn chặn sự kiện tăng đột biến để đặt biến message_weight dựa trên phương thức yêu cầu như minh hoạ bên dưới:

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

    Lưu ý rằng giá trị của biến message_weight1.5, giá trị không hợp lệ (không phải số nguyên).

Độ phân giải

Đảm bảo giá trị của phần tử MessageWeight là giá trị hợp lệ (số nguyên giá trị).

Để sửa ví dụ nêu trên, bạn có thể sửa đổi giá trị của biến message_weight trong JavaScript là một số nguyên:

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

FailedToResolveSpikeArrestRate

Mã lỗi

policies.ratelimit.FailedToResolveSpikeArrestRate

Nội dung phản hồi lỗi

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

Ví dụ về thông báo lỗi

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

Nguyên nhân

Lỗi này xảy ra nếu tham chiếu đến biến chứa chế độ cài đặt mức giá trong phần tử <Rate> không thể được giải quyết thành một giá trị trong . Phần tử này là bắt buộc và dùng để chỉ định tỷ lệ ngăn chặn tăng đột biến ở dưới dạng {int}pm hoặc {int}ps. Ví dụ: {int}pm có thể là 500pm, tức là 500 cuộc gọi mỗi phút. Tương tự, giá trị 10ps có nghĩa là 10 lệnh gọi mỗi giây.

Chẩn đoán

  1. Xác định Chính sách về việc bắt giữ tăng đột biến nơi xảy ra lỗi và tên của tham chiếu không thể được giải quyết đúng cách. Bạn có thể tìm thấy cả hai mục này trong phần tử chuỗi lỗi của phản hồi lỗi.

    Ví dụ: trong chuỗi lỗi sau đây, tên chính sách là SpikeArrest_AuthProxy và tham chiếu là request.header.rate:

    "faultstring": "Failed to resolve Spike Arrest Rate reference request.header.rate in SpikeArrest policy SpikeArrest_AuthProxy"
    
  2. Trong tệp XML chính sách về việc Bắt giữ tăng đột biến không thành công, hãy xác minh rằng tên của tham chiếu sử dụng khớp với tên tham chiếu được xác định trong chuỗi lỗi (bước #1 ở trên). ** **

    Ví dụ: chính sách sau đây đặt phần tử có tham chiếu tên là request.header.rate, khớp với nội dung trong 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. Xác định xem biến có được xác định và có sẵn trong luồng mà chính sách Chặn sự kiện tăng đột biến đang được thực thi hay không.

  4. Nếu biến là:

    • nằm ngoài phạm vi (không có trong luồng cụ thể mà chính sách đang được thực thi) hoặc
    • không thể phân giải (chưa được xác định)

    thì đó là nguyên nhân gây ra lỗi.

    Trong ví dụ trên, giá trị của tốc độ chặn đỉnh trong phần tử <Rate> được giả định là được truy xuất từ tiêu đề yêu cầu có tên là rate (tốc độ). Tuy nhiên, Edge không thể giải quyết request.header.rate. Điều này xảy ra nếu rate tiêu đề không được chuyển trong yêu cầu API.

    Dưới đây là một yêu cầu API mẫu không vượt qua tỷ lệ tiêu đề yêu cầu:

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

    rate tiêu đề không được chuyển như một phần của yêu cầu, hãy tham chiếu request.header.rate được sử dụng trong phần tử <Rate> theo mô tả ở trên Chính sách bắt giữ là chưa xác định nên không thể giải quyết. Vì vậy, bạn sẽ nhận được mã lỗi:

    policies.ratelimit.FailedToResolveSpikeArrestRate
    

Độ phân giải

Đảm bảo biến được tham chiếu trong phần tử <Rate> tồn tại/đã được xác định và có sẵn trong quy trình cụ thể, trong đó Chính sách bắt giữ tăng đột biến đang được thực thi.

Để sửa ví dụ nêu trên, bạn có thể sửa đổi yêu cầu để thêm tiêu đề rate (tỷ lệ) như minh hoạ dưới đây:

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