Grafana 代理数据源¶
https://blueprints.launchpad.net/watcher/+spec/grafana-proxy-datasaource
Watcher 需要来自计算节点和实例的指标来执行资源优化。 指标是通过多种不同的数据源检索的,例如 Gnocchi 和 Monasca,但是,并非每个 OpenStack 云都部署了可用的数据源。 Grafana 可以实现为附加的数据源,用于从多个不同的数据库中检索指标,Grafana 端点配置为使用这些数据库。
问题描述¶
并非每个 OpenStack 云都可能使用当前可用的数据源,从而限制了 Watcher 的使用。 通过提供一个广泛使用的监控平台作为具有灵活配置选项的数据源,更多的 OpenStack 云可以开始使用 Watcher。
用例¶
作为服务运营商,我希望 Watcher 与当前部署的监控解决方案集成。
作为服务运营商,我希望限制我必须为 Watcher 配置的外部凭据的数量。
提议的变更¶
新的 Grafana 数据源将能够根据最终用户配置的内容查询不同的指标。 灵活的配置选项将允许 Grafana 适用于每个用户的配置。 其中一些选项将使用字典中的键值对为每个指标配置。 这些选项称为映射,因为它们将值映射到特定指标。 配置选项包括
端点 URL
授权令牌
项目 ID 映射
属性映射
数据库映射
转换器映射
查询映射
为 host_cpu_usage 和 instance_cpu_usage 指标配置的配置示例可能如下所示
[grafana_client]
token = uyyNKUJOZiLW7AVKRF7XAAAAQQDzoXbnS6cOxxcqJfS8ZEQyxgakF0bSUo0D==
base_url = https://grafana.ch/api/datasources/proxy/
project_id_map = host_cpu_usage:1337,instance_cpu_usage:4337
metric_db_map = host_cpu_usage:production_db,instance_cpu_usage:production_db
attribute_map = host_cpu_usage:hostname,instance_cpu_usage:human_id
translator_map = host_cpu_usage:influxdb,instance_cpu_usage:influxdb
query_map = host_cpu_usage:SELECT 100-{0}("{0}_value") FROM {3}.cpu_percent
WHERE ("host" =~ /^{1}$/ AND "type_instance" =~/^idle$/ AND
time > now()-{2}m),instance_cpu_usage:SELECT 100-{0}("{0}_value")
FROM {3}.cpu_percent WHERE ("host" =~ /^{1}$/ AND "type_instance"
=~/^idle$/ AND time > now()-{2}m)
Grafana 使用项目 ID 来代理到不同的 数据库,这些项目中的每个项目都可能包含不同类型的 数据库。 术语“项目” 将在本文档中贯穿使用,以防止可能的混淆。 可以从多个项目或单个项目收集所有所需的指标,具体取决于监控的配置,但限制为每个项目一个指标。 这是因为没有方法可以在多个项目之间聚合单个指标。
查询必须发送到端点的方式以及如何解释检索到的数据将取决于 Grafana 背后的项目。 为了解释这些项目之间的差异,将开发特定的转换器。 将首先开发 influxdb 转换器。 转换器映射用于根据项目类型对每个指标执行正确的转换。
项目可以包含一个或多个数据库,类似于 MySQL 中的模式。 数据库映射允许为每个指标定义特定的数据库。
与项目映射和数据库映射类似的是查询映射。 此映射包含将发送到项目以检索指标的查询。 查询取决于项目类型,并且在 influxdb 的情况下,它们类似于 SQL 语句。
属性映射用于从资源对象中选择特定的属性。 这是必要的,因为在项目中用作标识符的属性可能因部署和指标而异。
从查询映射中,条目将被格式化,以便可以实现检索所需主机特定指标的基本信息。
query = 'SELECT "{0}_value" FROM cpu_util WHERE host =~ /^{1}$/ AND time > '
'now() - {2}m'
query.format(aggregate, attribute, period, translator_specific)
如果其他特定项目(例如弹性搜索)需要不同的参数才能成功构建查询,则可以随着时间的推移扩展格式选项。
初始格式选项将是
{0} = aggregate
{1} = attribute
{2} = period
{3} = { influxdb: retention_period, }
由于 Grafana 可用的指标数量取决于用户配置,因此对数据源管理器进行了一些小的更改,以便在运行时构建 Grafana 的指标列表。
与其使用默认配置文件中的许多参数 metric yaml,不如使用 metric yaml 来设置配置,但由于参数数量众多,预期的参数与其他数据源不同。
grafana:
host_cpu_usage:
project: 1337
db: production_db
attribute: hostname
translator: influxdb
query: SELECT 100-{0}("{0}_value") FROM {3}.cpu_percent
WHERE ("host" =~ /^{1}$/ AND "type_instance" =~/^idle$/ AND
time > now()-{2}m)
备选方案¶
可以开发与 Grafana 集成的各个项目的数据库,但这将需要大量的开发工作,并可能使授权复杂化,因为它必须为每个数据库配置。
数据模型影响¶
无
REST API 影响¶
无
安全影响¶
配置文件需要包含 Grafana 授权令牌,该令牌提供对 Grafana 配置的数据库的读取访问权限。 配置文件已经包含其他重要的凭据。
通知影响¶
无
其他最终用户影响¶
无
性能影响¶
无
其他部署者影响¶
无
开发人员影响¶
无
实现¶
负责人¶
- 主要负责人
Dantali0n
工作项¶
配置选项
通用 Grafana 数据源
转换器接口
InfluxDB 转换器
Grafana 的单元测试
转换器的单元测试
依赖项¶
与 Grafana 的通信使用 requests 库实现
测试¶
将创建针对数据源本身以及转换器基类和任何后续转换器的单元测试。
文档影响¶
将创建一个页面,其中包含有关最终用户如何配置选项以成功使用 Grafana 作为数据源的文档。
参考资料¶
历史¶
发布名称 |
描述 |
|---|---|
Train |
引入 |