Control API

control API 可以被用来:

  • 暴露 APISIX 内部状态信息
  • 控制单个 APISIX 的数据平面的行为

默认情况下,control API 是启用的,监听 127.0.0.1:9090。你可以通过修改 apisix/conf/config.yaml 中的 control 部分来更改设置,如下:

  1. apisix:
  2. ...
  3. enable_control: true
  4. control:
  5. ip: "127.0.0.1"
  6. port: 9090

插件的 control API 在默认情况下不支持参数匹配,如果想启用参数匹配功能可以在 control 部分添加 router: 'radixtree_uri_with_parameter'

注意:control API server 不应该被配置成监听公网地址。

通过插件添加的 control API

APISIX 中一些插件添加了自己的 control API。如果你对他们感兴趣,请参阅对应插件的文档。

独立于插件的 control API

以下是支持的 API:

GET /v1/schema

引入自 2.2 版本

使用以下格式返回被该 APISIX 实例使用的 json schema:

  1. {
  2. "main": {
  3. "route": {
  4. "properties": {...}
  5. },
  6. "upstream": {
  7. "properties": {...}
  8. },
  9. ...
  10. },
  11. "plugins": {
  12. "example-plugin": {
  13. "consumer_schema": {...},
  14. "metadata_schema": {...},
  15. "schema": {...},
  16. "type": ...,
  17. "priority": 0,
  18. "version": 0.1
  19. },
  20. ...
  21. },
  22. "stream-plugins": {
  23. "mqtt-proxy": {
  24. ...
  25. },
  26. ...
  27. }
  28. }

只有启用了的插件才会被包含在返回结果中 plugins 部分。(返回结果中的)一些插件可能会缺失如 consumer_schema 或者 type 字段,这取决于插件的定义。

GET /v1/healthcheck

引入自 2.3 版本

使用以下格式返回当前的 health check 状态

  1. [
  2. {
  3. "nodes": [
  4. {
  5. "ip": "52.86.68.46",
  6. "counter": {
  7. "http_failure": 0,
  8. "success": 0,
  9. "timeout_failure": 0,
  10. "tcp_failure": 0
  11. },
  12. "port": 80,
  13. "status": "healthy"
  14. },
  15. {
  16. "ip": "100.24.156.8",
  17. "counter": {
  18. "http_failure": 5,
  19. "success": 0,
  20. "timeout_failure": 0,
  21. "tcp_failure": 0
  22. },
  23. "port": 80,
  24. "status": "unhealthy"
  25. }
  26. ],
  27. "name": "/apisix/routes/1",
  28. "type": "http"
  29. }
  30. ]

每个 entry 包含以下字段:

  • name: 资源 ID,健康检查的报告对象。
  • type: 健康检查类型,取值为 ["http", "https", "tcp"]
  • nodes: 检查节点列表。
  • nodes[i].ip: IP 地址。
  • nodes[i].port: 端口。
  • nodes[i].status: 状态:["healthy", "unhealthy", "mostly_healthy", "mostly_unhealthy"]
  • nodes[i].counter.success: 成功计数器。
  • nodes[i].counter.http_failure: HTTP 访问失败计数器。
  • nodes[i].counter.tcp_failure: TCP 连接或读写的失败计数器。
  • nodes[i].counter.timeout_failure: 超时计数器。

用户也可以通过 /v1/healthcheck/$src_type/$src_id 来获取指定 health checker 的状态。

例如,GET /v1/healthcheck/upstreams/1 返回:

  1. {
  2. "nodes": [
  3. {
  4. "ip": "52.86.68.46",
  5. "counter": {
  6. "http_failure": 0,
  7. "success": 2,
  8. "timeout_failure": 0,
  9. "tcp_failure": 0
  10. },
  11. "port": 80,
  12. "status": "healthy"
  13. },
  14. {
  15. "ip": "100.24.156.8",
  16. "counter": {
  17. "http_failure": 5,
  18. "success": 0,
  19. "timeout_failure": 0,
  20. "tcp_failure": 0
  21. },
  22. "port": 80,
  23. "status": "unhealthy"
  24. }
  25. ],
  26. "type": "http"
  27. "name": "/apisix/routes/1"
  28. }
Control API - 图1note

只有一个上游满足以下条件时,它的健康检查状态才会出现在结果里面:

  • 上游配置了健康检查。
  • 上游在任何一个 worker 进程处理过客户端请求。

如果你使用浏览器访问该 API,你将得到一个网页:

Health Check Status Page

POST /v1/gc

引入自 2.8 版本

在 http 子系统中触发一次全量 GC

注意,当你启用 stream proxy 时,APISIX 将为 stream 子系统运行另一个 Lua 虚拟机。它不会触发这个 Lua 虚拟机中的全量 GC。

GET /v1/plugin_metadatas

引入自 3.0.0 版本

打印所有插件的元数据:

  1. [
  2. {
  3. "log_format": {
  4. "upstream_response_time": "$upstream_response_time"
  5. },
  6. "id": "file-logger"
  7. },
  8. {
  9. "ikey": 1,
  10. "skey": "val",
  11. "id": "example-plugin"
  12. }
  13. ]

GET /v1/plugin_metadata/{plugin_name}

引入自 3.0.0 版本

打印指定插件的元数据:

  1. {
  2. "log_format": {
  3. "upstream_response_time": "$upstream_response_time"
  4. },
  5. "id": "file-logger"
  6. }