Health Checks, Rate Limiting và Request Size Limiting Kong Api qua Konga

Việc tạo mới API đã được nhắc đến ở bài viết trước   Thêm mới và bảo mật API. Sau khi tạo mới, các API có thế được theo dõi, quản lý qua Konga. Bài viết này giới thiệu một số tính năng thông qua Konga.

Health Checks

Khi click vào một API đã tạo trước đó, sẽ xuất hiện tab Health Checks

Cần định nghĩa một HC Endpoint và kích hoạt nút Health Checks sang Enabled

Có thể thêm tham số notification hoặc set thông báo qua email.

Sau đó, biếu tượng status sẽ thông báo trạng thái health checks hiện tại

 

Rate Limiting 

Giới hạn số lượng yêu cầu HTTP lập trình viên có thể thực hiện trong một khoảng thời gian nhất định, giây, phút, ngày, tháng hoặc năm. Nếu API không có lớp xác thực, địa chỉ IP của client sẽ được sử dụng, nếu không thì Consumer sẽ được sử dụng nếu một plugin xác thực đã được cấu hình.

Có thể thêm Plugin Rate Limiting qua Konga

Hoặc bằng câu lệnh:

Rate Limiting:

$ curl -X POST http://kong:8001/apis/{api}/plugins \
    --data "name=rate-limiting" \
    --data "config.second=5" \
    --data "config.hour=10000"

Với các tham số:

  • Name : Tên của plugin để sử dụng, trong trường hợp này: rate-limiting
  • Consumer_id: ID CONSUMER mà cấu hình plugin này sẽ nhắm mục tiêu
  • Config.second, config.minute, config.hour : Số lượng yêu cầu HTTP

 

Request Size Limiting 

Chặn các requests lớn hơn một kích thước cụ thể (megabyte).

$ curl -X POST http://kong:8001/apis/{api}/plugins \
    --data "name=request-size-limiting" \
    --data "config.allowed_payload_size=128"

Với các tham số:

  • Name : Tên của plugin để sử dụng, trong trường hợp này: request-size-limiting
  • Config.allowed_payload_size​ : Kích thước tải yêu cầu được yêu cầu là megabyte, mặc định là 128 (128000000 Bytes)

 

LOGGING

SYSLog:

$ curl -X POST http://kong:8001/apis/{api}/plugins \
    --data "name=syslog"
  • Name: tên plugin
  • config.successful_severity: được gán cho tất cả các yêu cầu thành công với mã trạng thái phản hồi ít hơn 400.
  • config.client_errors_severity: được gán cho tất cả các yêu cầu không thành công với mã trạng thái phản hồi 400 trở lên nhưng ít hơn 500.
  • config.server_errors_severity: được gán cho tất cả các yêu cầu không thành công với mã trạng thái phản hồi 500 trở lên.
  • config.log_level :bất kỳ yêu cầu nào có mức độ nghiêm trọng tương đương hoặc cao hơn sẽ được ghi vào nhật ký Hệ thống

Log format 

{
    "request": {
        "method": "GET",
        "uri": "/get",
        "url": "http://httpbin.org:8000/get",
        "size": "75",
        "querystring": {},
        "headers": {
            "accept": "*/*",
            "host": "httpbin.org",
            "user-agent": "curl/7.37.1"
        }
    },
    "upstream_uri": "/",
    "response": {
        "status": 200,
        "size": "434",
        "headers": {
            "Content-Length": "197",
            "via": "kong/0.3.0",
            "Connection": "close",
            "access-control-allow-credentials": "true",
            "Content-Type": "application/json",
            "server": "nginx",
            "access-control-allow-origin": "*"
        }
    },
    "tries": [
        {
            "state": "next",
            "code": 502,
            "ip": "127.0.0.1",
            "port": 8000
        },
        {
            "ip": "127.0.0.1",
            "port": 8000
        }
    ],
    "authenticated_entity": {
        "consumer_id": "80f74eef-31b8-45d5-c525-ae532297ea8e",
        "id": "eaa330c0-4cff-47f5-c79e-b2e4f355207e"
    },
    "api": {
        "created_at": 1488830759000,
        "hosts": [
          "example.org"
        ],
        "http_if_terminated": true,
        "https_only": false,
        "id": "6378122c-a0a1-438d-a5c6-efabae9fb969",
        "name": "example-api",
        "preserve_host": false,
        "retries": 5,
        "strip_uri": true,
        "upstream_connect_timeout": 60000,
        "upstream_read_timeout": 60000,
        "upstream_send_timeout": 60000,
        "upstream_url": "http://httpbin.org"
    },
    "consumer": {
        "username": "demo",
        "created_at": 1491847011000,
        "id": "35b03bfc-7a5b-4a23-a594-aa350c585fa8"
    },
    "latencies": {
        "proxy": 1430,
        "kong": 9,
        "request": 1921
    },
    "client_ip": "127.0.0.1",
    "started_at": 1433209822425
}

 

Microservices một cách dễ hiểu Microservices một cách dễ hiểu Nguyễn Thành Long Blog Home Cấu trúc thư mục một project sử dụng Go-Micro Cấu trúc thư mục một project sử dụng Go-Micro Techmaster team