HTTP 服务发现
Prometheus 提供了一个通用的 HTTP 服务发现(HTTP service discovery,即 HTTP SD),允许通过 HTTP 端点发现 Target。
HTTP 服务发现是 Prometheus 服务发现机制的补充功能,是基于文件的服务发现(file-based service discovery,即文件 SD)的一个替代方案。
文件 SD 和 HTTP SD 的比较
以下是我们的两种通用服务发现实现之间的比较表。
项 | 文件 SD | HTTP SD |
---|---|---|
基于事件 | 是,通过 inotify | 否 |
更新频率 | 立即,依赖 inotify | 遵循 refresh_interval |
格式 | YAML 或 JSON | JSON |
传输方式 | 本地文件 | HTTP/HTTPS |
安全性 | 基于文件的安全性 | TLS、基本认证、授权头、OAuth2 |
HTTP SD 端点的要求
如果你实现了一个 HTTP SD 端点,请注意以下几点要求。
响应是以原始内容被消费的,未修改。在每个刷新间隔(默认:1 分钟)内,Prometheus 将执行一个 GET 请求到 HTTP SD 端点。GET 请求包含一个X-Prometheus-Refresh-Interval-Seconds
HTTP 头部,其中包含了刷新间隔。
SD 端点必须以 HTTP 200 响应回答,并带有 HTTP 头部Content-Type: application/json
。响应必须是 UTF-8 格式的。如果没有任何 target 被传输,SD 端点也必须发出 HTTP 200 响应,并附带空列表[]
。Target 列表是无序的。
Prometheus 缓存目标列表。如果在获取更新的 target 列表时发生错误,Prometheus 会继续使用当前的 Target 列表。Target 列表不会在重启后保存。prometheus_sd_http_failures_total
计数器追踪服务发现刷新失败的次数。
整个 Target 列表必须在每次抓取时返回,不支持增量更新。Prometheus 实例不会发送其主机名,因此 SD 端点无法知道收到的 SD 请求是否是在 Prometheus 实例在重启后的第一个请求。
HTTP SD 的 URL 不被视为密文。认证和任何 API 密钥应通过适当的认证机制传输。Prometheus 支持 TLS 认证、基本认证、OAuth2 和授权头。
HTTP SD 格式
示例:
该文档基于 Prometheus 官方文档翻译而成。