健康检查
确定路由器的状态
健康检查通常由负载均衡器使用以确定服务器是否可用并准备好开始服务流量。
GraphOS 路由器 和 Apollo 路由器核心 支持 HTTP 缺省健康检查。这默认启用并运行在端口 8088
,URL 路径为 /health
。如果 HTTP 服务器成功提供服务,则返回 200
状态码。您可以通过设置 health_check
来更改此设置:
router.yaml
health_check:listen: 127.0.0.1:8088enabled: truepath: /health # Optional, default: /health
每个选项都可以进行配置。例如,我们可以将健康检查端点设置为 127.0.0.1:8090/healthz
:
router.yaml
health_check:listen: 127.0.0.1:8090enabled: truepath: /healthz
我们也可以禁用健康检查端点
router.yaml
health_check:enabled: false
使用 curl
测试
以下示例演示了如何使用 curl
命令向运行在 127.0.0.1:4000
的 路由器 实例发送基本健康检查查询:
$ curl -v "http://127.0.0.1:8088/health"* Trying 127.0.0.1:8088...* Connected to 127.0.0.1 (127.0.0.1) port 8088 (#0)> GET /health HTTP/1.1> Host: 127.0.0.1:8088> User-Agent: curl/7.79.1> Accept: */*>* Mark bundle as not supporting multiuse< HTTP/1.1 200 OK< vary: origin< content-type: application/json< content-length: 15< date: Wed, 21 Sep 2022 17:10:45 GMT<* Connection #0 to host 127.0.0.1 left intact{"status":"UP"}
日志记录
如果在开启 trace 日志记录的情况下启动 router,您将看到对每次健康检查的路由器日志记录:
--log apollo_router=trace2023-01-23T17:42:04.640501Z apollo-router/src/axum_factory/axum_http_server_factory.rs:100 TRACE apollo_router::axum_factory::axum_http_server_factory: health check health=Health { status: Up } request=Request { method: GET, uri: /health, version: HTTP/1.1, headers: {"host": "127.0.0.1:8088", "user-agent": "curl/7.85.0", "accept": "*/*"}, body: Body(Empty) }
这可能有助于确认健康检查是否正确工作。
在容器环境中使用
健康检查默认监听 127.0.0.1,这将不允许从网络发出的连接。虽然这是一个安全默认值,但 其他容器将无法执行健康检查,这将阻止 router pod 转换到健康状态。,
您可以通过设置 health_check
来更改此设置:
router.yaml
health_check:listen: 0.0.0.0:8088enabled: true
与 Kubernetes 一起使用
在 Kubernetes 中,您可以通过设置资源定义中 containers
对象上的 readinessProbe
和 livenessProbe
来配置健康检查:
# ... snipped for partial example ...containers:- name: router# ... snipped for partial example ...livenessProbe:httpGet:path: "/health"port: 8088readinessProbe:httpGet:path: "/health"port: 8088# ... snipped for partial example ...
请参阅我们 Kubernetes 文档 的更完整示例。
与 Docker 一起使用
Docker 有一个 HEALTHCHECK
指令,该指令告诉 Docker 如何测试容器是否仍在工作。这些定义在构建容器的 Dockerfile
中:
HEALTHCHECK CMD curl --fail \"http://127.0.0.1:8088/health" || exit 1
在我们的示例中,我们没有定义这些,因为这些不常用。您可以根据需要将自己定义的参数添加到您的镜像中。Dockerfile
。