添加 Prometheus 获取器¶
https://storyboard.openstack.org/#!/story/2005427
CloudKitty 需要一个获取器来描述如何从 Prometheus 服务获取 scope(以前的 tenants)。本规范旨在定义需要做什么以及原因。本文档中的所有内容均可讨论,同样在相关的 storyboard 和 gerrit 上。
问题描述¶
目前,CloudKitty 没有实现任何从 Prometheus 服务发现和获取 scope ID 的方法,并且需要一个。
提议的变更¶
该获取器将在 [fetcher_prometheus] 部分的 cloudkitty.conf 中进行配置。
配置选项如下
一个
metric选项,用于提供一个度量名称,从中我们可以推断 scope ID(默认:无)。一个
scope_attribute选项,用于提供引用 scope ID 的键(默认:project_id)。一个
filters选项,作为一个键值字典,用于使用一些元数据过滤发现查询响应(可选)。一个
prometheus_url选项,用于定义 Prometheus 服务的 HTTP API 端点 URL。一个
prometheus_user和一个prometheus_password选项,用于提供身份验证凭据(两者默认:无)。一个
cafile选项,用于允许自定义证书颁发机构文件(默认:无)。一个
insecure选项,用于显式允许不安全的 HTTPS 请求(默认:false)。
该获取器将使用 PromQL 查询请求指定 metric 上的聚合,并通过 HTTP 发送到指定的 Prometheus 服务 API 瞬时查询端点。它还将根据指定的 scope_attribute 对结果进行分组,如果指定了某些元数据 filters,则过滤响应,以便收集 scope_ids。
示例¶
# cloudkitty.conf
# [...]
[fetcher_prometheus]
metric=container_memory_usage_bytes
scope_attribute=namespace
prometheus_url=https://prometheus-dn.tld/api/v1
prometheus_user=foobar
prometheus_password=foobar
insecure=true
filters=label1:foo,label2:bar
PromQL 请求如下所示
max(container_memory_usage_bytes{label1="foo", label2="bar"}) by (namespace)
带有 URL 编码的 PromQL 的 HTTP URL 将如下所示
http://prometheus-dn.tld/api/v1/query?query=max%28container_memory_usage_bytes%7Blabel1%3D%22foo%22%2C%20label2%3D%22bar%22%7D%29%20by%20%28namespace%29
数据模型影响¶
无
REST API 影响¶
无
安全影响¶
无
通知影响¶
无
其他最终用户影响¶
最终用户将受益于新的 Prometheus 获取器,以动态发现 scope ID。
它将特别适用于与 Prometheus 收集器结合使用。
性能影响¶
无
其他部署者影响¶
无
开发人员影响¶
无
实现¶
负责人¶
Justin Ferrieu 被分配来处理规范以及开发所引发的点。
- 主要负责人
jferrieu
- 其他贡献者
无
工作项¶
实现 Prometheus 获取器(带有单元测试)
添加获取器文档
依赖项¶
无
测试¶
提议的更改将使用单元测试进行测试。
文档影响¶
我们将在 Administration Guide/Configuration Guide/Fetcher/Prometheus 中添加一个条目,详细介绍 Prometheus 获取器配置。
参考资料¶
Prometheus 文档:https://prometheus.ac.cn/docs/