已废弃:Ceilometer/blueprints/APIv2
- Launchpad 条目: CeilometerSpec:API v2
- 创建: 2012年12月6日
- 贡献者: Angus Salkeld
目录
总结
我们当前的 API 嵌套很深,作为链接看起来很棒,但添加新功能时会比较麻烦,因为需要在很多地方添加。测试用例也会变得过多。所以让我们使用可选参数进行过滤,而不是资源所有权。
So: /resources?source=elsewhere rather than /sources/elsewhere/resources
请注意,我从这里开始:https://github.com/asalkeld/ceilometer/commit/c678ff8abd2a91c4404657748b9ed9b31c1541df
发布说明
原理
术语
- 计量 == 测量值的定义(名称、所有权、资源、元数据) - 同义词(指标)
- 样本 == 实际数据值(值、单位、时间戳) 同义词(测量值)(取代“事件”)
- 资源 是为用户创建的 OpenStack 对象(例如,实例、卷)
- 用户 是经过 Keystone 认证的 OpenStack 用户
- 来源 是用户和项目/租户的来源(通常为“openstack”)。
- Gauge 是一种计量类型,表示绝对测量值(汽车:转速)
- Counter 是一种计量类型,用于计数(汽车:行驶距离 - 假设你不太倒车:-)
用户故事
前提条件
- 通过创建新的计量,隐式地创建资源
- 传递数组需要像这样完成 class[index].property=value
- 对象之间的关系没有改变(资源 -> 计量 -> 样本)
So the same db schema (at least in mongo)
设计
| 查询类型 | 资源 |
| GET | /resources |
| GET | /resources/<resource_id> |
| GET | /meters |
| GET | /meters/<meter> |
| GET | /meters/<meter>/statistics |
| POST | /meters |
| PUT | /meters/<meter> |
| DELETE | /meters/<meter> |
通用可选参数
查询
q[].field=name q[].op=eq q[].value=56
op 是比较运算符(eq、gt、lt 等)
字段选择
s[]=field
这是一种选择返回字段的方式。 如果省略此项,我们将默认返回所有字段。
资源资源
与当前相同,但我们支持以下操作
- 使用通用的查询机制进行列表显示
- 获取单个资源
因此,仅 resource_id 即可使资源唯一。
计量资源
GET /v2/meters
返回与查询(如果给定)匹配的可用计量列表。
POST /v2/meters
请求体
GET /v2/meters/<meter>
获取与查询(如果给定)匹配的计量样本,并返回原始样本。
GET /v2/meters/<meter>/statistics 获取派生的统计信息
{
'min': 3,
'max': 20,
'avg': 8,
'sum': 45,
'duration': <actual difference between the first and last sample that the stats were calulated from>
}
周期用于定义计算上述值的的时间段。
Period
示例
/v2/meters/cpu_util/statistics? q[0].field=metadata.autoscale_group& q[0].op=eq& q[0].value=all_mine& q[1].field=timestamp& q[1].op=lt& q[1].value=<now>& q[2].field=timestamp& q[2].op=gt& q[2].value=<now - 5 hours>& period=360
以上获取所有 cpu_util 样本,元数据.autoscale_group=all_mine 在 5 小时前到现在的范围内。然后计算每个小时的最小值、最大值和平均值。这将返回类似以下内容
{[
{min=12, max=34, avg=23},
{min=14, max=41, avg=26},
{min=15, max=43, avg=29},
{min=16, max=44, avg=34},
{min=18, max=47, avg=33},
]}
实现
UI 变更
代码变更
迁移
测试/演示计划
未解决的问题
QU:我们需要保留以下查询吗?
/sources /projects /users
基本上,这些查询目前正在使用吗?
ANS:DUDE 列出了项目中的资源,然后询问有关报告资源的计量的数据。我们不使用这些查询。- dhellmann
QU:API 包含传递计算期间
这会产生如下输出
{[
{min=12, max=34, avg=23},
{min=14, max=41, avg=26},
...
这整洁/超级有用还是不必要?
你有什么实现它的想法吗?我认为我可以用 mapreduce 以一种笨拙的方式来实现它,但我不知道 SQL。- dhellmann
嗯,我们可以将 API 中的周期拆分,然后数据库可以返回该一个周期的所有统计计算。
所以数据库 API 可以如下所示
def get_samples(meter, query):
'''just return the raw samples that match the query'''
def get_statistics(meter, query):
'''return (max,min,avg,len,duration) for the given query'''
BoF 议程和讨论
使用本节记录 BoF 期间的笔记;如果将其保留在批准的规范中,请用于总结讨论内容并记录任何被拒绝的选项。