iT邦幫忙

2025 iThome 鐵人賽

DAY 13
0
Cloud Native

與雲原生精靈共舞:APISIX使用者的兩年旅程系列 第 13

Ch8 - APISIX 自身健康檢查的兩種途徑:適用於不同版本的配置實戰

  • 分享至 

  • xImage
  •  

在「健康檢查」一章中,透過/health.json檢查新竹百貨公司的健康狀態。這些健康檢查端點,也可以提供給Uptime Monitor服務--像是UptimeRobot進行檢查。

https://ithelp.ithome.com.tw/upload/images/20250927/201124706OrCBlMcgV.png

那麼APISIX本身呢?

TL;DR

如果是使用3.13以後的版本,可以直接使用Status API。如果是此前版本,可以透過promethues或是node-status端點進行檢查。

Status API

Status API是在3.13版本後才出現在文檔之中。

如果要將「Quick Start」中的案例調整成3.13版本,可以調整docker-compose.yaml中的apisix服務:

  apisix:
    container_name: apisix
    restart: always
    #image: "apache/apisix:3.2.2-debian"
    image: "apache/apisix:3.13.0-debian"
    volumes:
      - ./apisix_config/config.yaml:/usr/local/apisix/conf/config.yaml:ro
    ports:
      - 9180:9180 # admin api
      - 7085:7085 # Status API
      - 9080:9080 # HTTP
      - 9091:9091 # prometheus
      - 9443:9443 # HTTPS
      - 9090:9090 # control api
      - 389:389 # Proxy AD Service
    environment:
      TZ: "Asia/Taipei"

將使用的image替換成apache/apisix:3.13.0-debian,並且轉發7085端口。然後調整apisix_config/config.yaml

apisix:
  node_listen: 9080
  enable_ipv6: false

  status:  # Status API
    ip: "0.0.0.0"
    port: 7085

增加apisix.status區段。接著重新創建apisix服務:

docker compose up -d apisix

然後就可以瀏覽 http://localhost:7085/status

https://ithelp.ithome.com.tw/upload/images/20250927/20112470AarGpUm3ZV.png

node-status plugin

在此前,也已經示範了如何啟用prometheus plugin。這部份將示範如何啟用node-status plugin。可以在apisix_config/config.yaml添加plugins區段:

plugins:
  # - ...
  - node-status

不過如此添加,會覆蓋掉原本預設(default)的區段內容。我會建議直接將預設值貼上,並找到node-status的plugin,取消其註解:

plugins:                          # plugin list (sorted by priority)
  - real-ip                        # priority: 23000
  - ai                             # priority: 22900
  - client-control                 # priority: 22000
  - proxy-control                  # priority: 21990
  - request-id                     # priority: 12015
  - zipkin                         # priority: 12011
  #- skywalking                    # priority: 12010
  #- opentelemetry                 # priority: 12009
  - ext-plugin-pre-req             # priority: 12000
  - fault-injection                # priority: 11000
  - mocking                        # priority: 10900
  - serverless-pre-function        # priority: 10000
  #- batch-requests                # priority: 4010
  - cors                           # priority: 4000
  - ip-restriction                 # priority: 3000
  - ua-restriction                 # priority: 2999
  - referer-restriction            # priority: 2990
  - csrf                           # priority: 2980
  - uri-blocker                    # priority: 2900
  - request-validation             # priority: 2800
  - openid-connect                 # priority: 2599
  - cas-auth                       # priority: 2597
  - authz-casbin                   # priority: 2560
  - authz-casdoor                  # priority: 2559
  - wolf-rbac                      # priority: 2555
  - ldap-auth                      # priority: 2540
  - hmac-auth                      # priority: 2530
  - basic-auth                     # priority: 2520
  - jwt-auth                       # priority: 2510
  - key-auth                       # priority: 2500
  - consumer-restriction           # priority: 2400
  - forward-auth                   # priority: 2002
  - opa                            # priority: 2001
  - authz-keycloak                 # priority: 2000
  #- error-log-logger              # priority: 1091
  - body-transformer               # priority: 1080
  - proxy-mirror                   # priority: 1010
  - proxy-cache                    # priority: 1009
  - proxy-rewrite                  # priority: 1008
  - workflow                       # priority: 1006
  - api-breaker                    # priority: 1005
  - limit-conn                     # priority: 1003
  - limit-count                    # priority: 1002
  - limit-req                      # priority: 1001
  #- node-status                   # priority: 1000
  - gzip                           # priority: 995
  - server-info                    # priority: 990
  - traffic-split                  # priority: 966
  - redirect                       # priority: 900
  - response-rewrite               # priority: 899
  - degraphql                      # priority: 509
  - kafka-proxy                    # priority: 508
  #- dubbo-proxy                   # priority: 507
  - grpc-transcode                 # priority: 506
  - grpc-web                       # priority: 505
  - public-api                     # priority: 501
  - prometheus                     # priority: 500
  - datadog                        # priority: 495
  - elasticsearch-logger           # priority: 413
  - echo                           # priority: 412
  - loggly                         # priority: 411
  - http-logger                    # priority: 410
  - splunk-hec-logging             # priority: 409
  - skywalking-logger              # priority: 408
  - google-cloud-logging           # priority: 407
  - sls-logger                     # priority: 406
  - tcp-logger                     # priority: 405
  - kafka-logger                   # priority: 403
  - rocketmq-logger                # priority: 402
  - syslog                         # priority: 401
  - udp-logger                     # priority: 400
  - file-logger                    # priority: 399
  - clickhouse-logger              # priority: 398
  - tencent-cloud-cls              # priority: 397
  - inspect                        # priority: 200
  #- log-rotate                    # priority: 100
  # <- recommend to use priority (0, 100) for your custom plugins
  - example-plugin                 # priority: 0
  #- gm                            # priority: -43
  - aws-lambda                     # priority: -1899
  - azure-functions                # priority: -1900
  - openwhisk                      # priority: -1901
  - openfunction                   # priority: -1902
  - serverless-post-function       # priority: -2000
  - ext-plugin-post-req            # priority: -3000
  - ext-plugin-post-resp           # priority: -4000

留意public-apiserver-info也是啟用的(server-info非必要)。這樣一來,可以在Dashboard看到節點狀態。

警告
server-info 插件已棄用,將在未來的版本中移除。更多關於棄用和移除計劃的信息,請參考 這個討論

https://ithelp.ithome.com.tw/upload/images/20250927/20112470auSqHiKsmB.png

揭露node-status API

curl http://127.0.0.1:9180/apisix/admin/routes/ns -H 'X-API-KEY: SaiTJp7TEa9K39oy7D5A4ouXmdqHvL9a' -X PUT -d '
{
    "uri": "/apisix/status",
    "plugins": {
        "public-api": {}
    }
}'

https://ithelp.ithome.com.tw/upload/images/20250927/20112470bWZkfE0rvk.png

同樣的就可以瀏覽 http://localhost:9080/apisix/status

https://ithelp.ithome.com.tw/upload/images/20250927/201124709utoI2a1QQ.png

呈現的資訊如下,這個端點也可以作為APISIX自身的健康檢查端點:

參數 說明
status APISIX 的狀態資訊。
total 用戶端請求總數。
waiting 當前等待用戶端請求的閒置連線數。
accepted 當前已經接受的用戶端連線總數。
writing 當前正在寫給用戶端回應的連線數。
handled 當前已經處理的連線總數,除非達到其他資源的限制,否則此值與 accepted 相同。
active 當前活躍的用戶端連線數。
reading 當前正在讀取請求標頭的連線數。
id APISIX UID 資訊,保存在 ./conf/apisix.uid 檔案中。

上一篇
Ch7 - APISIX 精準除錯術:不穩定 API 的動態記錄解方
下一篇
Ch9 - 流量的「天氣預報」:透過 Admin API 調整上游權重,確保 APISIX 零停機部署
系列文
與雲原生精靈共舞:APISIX使用者的兩年旅程14
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言