写点什么

编写 Prometheus HTTP 服务发现有什么要求

作者:耳东@Erdong
  • 2022 年 7 月 30 日
  • 本文字数:1064 字

    阅读完需:约 3 分钟

编写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 服务发现的格式要求是这样的:


[  {    "targets": [ "<host>", ... ],    "labels": {      "<labelname>": "<labelvalue>", ...    }  },  ...]
复制代码


对于 HTTP 服务发现的格式的样例如下:


[    {        "targets": ["10.0.10.2:9100", "10.0.10.3:9100", "10.0.10.4:9100", "10.0.10.5:9100"],        "labels": {            "__meta_datacenter": "london",            "__meta_prometheus_job": "node"        }    },    {        "targets": ["10.0.40.2:9100", "10.0.40.3:9100"],        "labels": {            "__meta_datacenter": "london",            "__meta_prometheus_job": "alertmanager"        }    },    {        "targets": ["10.0.40.2:9093", "10.0.40.3:9093"],        "labels": {            "__meta_datacenter": "newyork",            "__meta_prometheus_job": "alertmanager"        }    }]
复制代码


发布于: 刚刚阅读数: 3
用户头像

耳东@Erdong

关注

还未添加个人签名 2020.05.24 加入

主要研究分享运维技术,专注于监控、CICD、操作系统、云原生领域,公众号【耳东学堂】,坚持原创,希望能和大家在运维路上结伴而行 邮箱:erdong@mail.erdong.site

评论

发布
暂无评论
编写Prometheus HTTP 服务发现有什么要求_Prometheus_耳东@Erdong_InfoQ写作社区