背景
在 Kubernetes 的生态中,习惯使用 /healthz
作为健康检查的接口。例如,下面为 kubernetes 官方文档中配置存活探针和启动探针的配置文件,将探活的接口命名为 /healthz
。与在平时实践的探活接口命名有些不同,一般我们将探活接口命名为 /health
、/whoami
等。
ports:
- name: liveness-port
containerPort: 8080
hostPort: 8080
livenessProbe:
httpGet:
path: /healthz
port: liveness-port
failureThreshold: 1
periodSeconds: 10
startupProbe:
httpGet:
path: /healthz
port: liveness-port
failureThreshold: 30
periodSeconds: 10
解答
/healthz
的命名来自谷歌内部的实践,这样命名的原因是为了避免与应用程序已有的状态接口产生冲突。
It historically comes from Google’s internal practices. They're called "z-pages".
The reason it ends with
z
is to reduce collisions with actual application endpoints with the same name (like/status
). See this talk for more: https://vimeo.com/173610242Similar endpoints (at least inside Google) are
/varz
,/statusz
,/rpcz
. Services developed at Google automatically get these endpoints to export their health and metrics and there are tools that collect the exposed metrics/statuses from all the deployed services.Open source tools like Prometheus implement this pattern (since original authors of Prometheus are also ex-Googlers) by coming to a well-known endpoint to collect metrics from your application. Similarly OpenCensus allows you to expose z-pages from your app (ideally on a different port) to diagnose problems.