编写 Prometheus HTTP 服务发现有什么要求
Prometheus 提供了一个通用的 HTTP 服务发现,它可以通过 HTTP 接口发现目标。
HTTP 服务发现是受支持的服务发现机制的补充,是基于文件的服务发现的替代方案。
对比基于文件的服务发现和 HTTP 服务发现
我们通过表格来看两种服务发现的对比清理
HTTP 服务发现的请求接口
如果要实现 HTTP SD 接口,那么应该注意以下几个需求。
请求的响应内容将按原样使用,不加修改。在每个刷新间隔(默认为 1 分钟)上,Prometheus 将执行对 HTTP SD 接口的 GET 请求。GET 请求包含一个带有刷新间隔的 X-Prometheus-Refresh-Interval-Seconds
HTTP 报头。
写好的 SD 接口必须可以返回一个 HTTP 200 的状态码,返回的响应包含 Content-Type: application/json
的 HTTP Header。响应体必须是 UTF-8 格式的。如果没有要传输的 Target,也必须返回 HTTP 200,并使用空列表[]
,Target 列表是无序的。
Prometheus 会缓存 Target 列表,如果在获取新的 Target 列表时发生错误,Prometheus 会继续使用当前的 Target 列表,Prometheus 重新启动时不保存 Target 列表。Prometheus 有一个计数器类型的监控指标 prometheus_sd_http_failures_total
来统计刷新失败的次数。
Prometheus 每次拉取数据的时候所有的 Target 以列表形式全部返回。编写的服务发现接口不应该支持 Target 增量更新,因为 Prometheus 通过 SD 接口不可能知道 SD 请求是否是重启后的第一个请求。
出于安全考虑,HTTP SD 的 URL 不应该是秘密隐藏起来,应该使用适当的身份验证机制传递身份验证和任何 API 密钥。Prometheus 支持 TLS 认证、基本认证、OAuth2 和认证 header。
HTTP 服务发现的格式
对于 HTTP 服务发现的格式要求是这样的:
对于 HTTP 服务发现的格式的样例如下:
版权声明: 本文为 InfoQ 作者【耳东@Erdong】的原创文章。
原文链接:【http://xie.infoq.cn/article/abfd43775c4e91350cdba50ff】。未经作者许可,禁止转载。
评论