跳转到: 导航, 搜索

已废弃: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 期间的笔记;如果将其保留在批准的规范中,请用于总结讨论内容并记录任何被拒绝的选项。