监控 API
API 可观测性已经成为 API 开发的一部分,因为它解决了与 API 一致性、可靠性和快速迭代 API 功能的相关问题。可观测性可分为三个关键部分:日志、指标、链路追踪,接下来让我们逐个了解它们。
前提条件
在进行该教程之前,请确保你已经公开服务。
在 APISIX 中,日志可分为访问日志和错误日志。访问日志主要记录了每个请求的上下文信息,错误日志则是 APISIX 运行打印的日志信息,包括 NGINX 和插件相关的信息。APISIX 的日志存储在 目录下。当然你可以通过一些 APISIX 的日志插件,将 APISIX 的日志发送到指定的日志服务中,APISIX 提供了以下插件:
你可以在 APISIX 查看 APISIX 支持的所有日志插件。接下来我们将使用 http-logger
插件为你演示如何将 APISIX 的日志数据发送到 HTPP/HTTPS 服务器中。
注意
你可以使用 生成一个模拟的 HTTP 服务器来存储和查看日志。
以下示例展示了在指定路由上启动 http-logger
的示例。
注意
你可以通过修改 uri
属性,将上述 http-logger
的服务器地址更换为你的服务器地址:
{
}
创建成功后,你可以通过以下命令向 get
端点发送请求以生成日志。
curl -i http://127.0.0.1:9080/get
请求成功后,你可以单击查看访问日志。
指标
你可以通过以下命令启用 prometheus
插件:
启用成功后,你可以通过 /apisix/prometheus/metrics
接口获取 APISIX 的指标。
curl -i http://127.0.0.1:9091/apisix/prometheus/metrics
返回结果如下:
HTTP/1.1 200 OK
Server: openresty
Content-Type: text/plain; charset=utf-8
Transfer-Encoding: chunked
# HELP apisix_batch_process_entries batch process remaining entries
# TYPE apisix_batch_process_entries gauge
apisix_batch_process_entries{name="http logger",route_id="1",server_addr="172.19.0.8"} 0
# HELP apisix_etcd_modify_indexes Etcd modify index for APISIX keys
# TYPE apisix_etcd_modify_indexes gauge
apisix_etcd_modify_indexes{key="consumers"} 17819
apisix_etcd_modify_indexes{key="global_rules"} 17832
apisix_etcd_modify_indexes{key="max_modify_index"} 20028
apisix_etcd_modify_indexes{key="prev_index"} 18963
apisix_etcd_modify_indexes{key="protos"} 0
...
你还可以通过 http://localhost:9090/targets
在 Prometheus 仪表板上查看端点的状态。
如上图,APISIX 公开的指标端点已启动并正在运行。
现在,你可以查询 apisix_http_status
的指标,查看 APISIX 处理了哪些 HTTP 请求及其结果。
除此之外,你还可以查看在本地实例中运行的 Grafana 仪表板。请访问 http://localhost:3000/
。
目前,APISIX 还提供了其他两个关于指标的插件:
一个开源的分布式追踪系统。 APISIX 的 zipkin 插件 支持根据 收集链路信息并报告给 Zipkin Collector。
提示
使用该插件前,请确保你已经有一个正在运行的 Zipkin 实例。你可以使用 Docker 快速启动一个 Zipkin 实例:
你可以通过如下示例,在指定路由中启用 插件:
curl http://127.0.0.1:9180/apisix/admin/routes/1 \
-H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
{
"methods": [
"GET"
],
"uri": "/get",
"plugins": {
"zipkin": {
"endpoint": "http://127.0.0.1:9411/api/v2/spans",
"sample_ratio": 1
}
},
"upstream_id": "1"
}'
你可以通过以下命令请求 APISIX:
curl -i http://127.0.0.1:9080/get
如下所示,返回结果中的 部分附加了一些额外的跟踪标识符(TraceId、SpanId 和 ParentId):
你可以通过访问 http://127.0.0.1:9411/zipkin
,在 Zinkin 的 Web UI 上看到请求链路。
你也可以通过另外两个插件进行链路追踪: